Czesc, zrobilem nowa wersje txt2osm.py, mam nadzieje ze lepsza. Ta wersja konwertuje nie tylko ulice ale wszystko co jest w UMP, podszedlem do tego z takiej strony ze zamiast ignorowac to czego program nie rozumie to program sie wywala jesli czegos nie rozumie, i dodawalem feature’sy az przestal sie wywalac, w zwiazku z tym zrobil sie dosyc dlugasny. Zastrzegam ze nie znam pythona i pewnie mozna by go bylo zakodowac lepiej.
Z ciekawszych rzeczy, potrafi:
- wykombinowac wartosc “highway=” dla rond, biorac klase najwazniejszej drogi ktora dochodzi do ronda.
- zrozumiec tag HLevel0 z UMP i dzieli droge na kawalki odpowiednio przydzielajac “layer=”, “bridge=yes” i “tunnel=yes” kawalkom.
- dodawac dane adresowe dla budynkow, drog, sklepow itd. Dla drog, jesli w UMP sa numery budynkow dla dwoch koleknych wezlow z ich lewej i prawej strony to dodaje addr:interpolation (wedlug Karlsruhe Schema) obok drogi, po lewej i po prawej. Kody pocztowe itd.
- dodawac relacje turn restrictions z plikow *.zakazy.txt z UMP. To jest chyba najbardziej skomplikowana czesc programu bo UMP opisuje zakazy punktami a nie drogami wiec skrpt musi znalesc droge ktora przechodzi przez dane wezly i ewentualnie podzielic ja na dwie (w OSM drogi w relacji musza sie konczyc albo zaczynac na wezle “via”). Dodatkowo jesli z nazwy relacji nie wynika czy to jest zakaz skretu w prawo czy w lewo to prboje sam policzyc kat skretu (oczywiscie bardzo zawode).
- przetrawic cala europe w ciagu pol godziny. Oryginalny skrypt jak zapuscilem tylko dla katalogu UMP-Warszawa to pracowal 66.2 minut, zmienilem strukture w ktorej sa punkty z listy na podwojny slownik (z dwoma indeksami) i przekonwertowal UMP-Warszawa/ w 14 sekund. Dodanie relacji spowodowalo ze zajmuje mu to 43 sekundy.
Dla POI zamiast czytac pliki .pnt, zapuszczam skrypt z katalogu narzedzia/ w UMP ktory konwertue je do .txt i dopiero potem zapuszczam txt2osm. Poniewaz w UMP wszystko jest opisane tylko punktami a nie identyfikatorami to im wiekszy obszar skonwertujesz za jednym razem, tym mniej roboty jest pozniej z laczeniem drog ze soba, bo skrypt je polaczy, wiecej lepiej pracowac na wiekszych obszarach. Na przyklad w wolominie pod warszawa wszystkie lokalne ulice byly w pliku …ulice.txt oprocze ronda w samym srodku ktore bylo w …drogi.txt, wiec nie zostalo polaczone. Najlepiej wiec uruchamiac skrypt w ten sposob (zalozmy ze chcemy skonwertowac Wolomin i okolice):
./txt2osm.py UMP-Warszawa/src/WOLOMIN*.txt – UMP-Warszawa/src/*.txt > wolomin.osm
to spowoduje ze skrypt najpierw zaladuje WOLOMIN.drogi.txt i WOLOMIN.ulice.txt, zobaczy jakie sa minimalne i maksymalne wspolrzedne wezlow w tych danych, i potem zaladuje cala reszte warszawy wywalajac to co nie ma zadnego przeciecia z wyznaczonym prostokatem, w zwiazku z tym dostaniemy taki prostokatny wycinek mapy UMP ze wszystkimi danymi ktore sa w UMP. Wszystkie pliki podane po parametrze “–” juz nie zmieniaja rozmiarow tego prostokata.
Oczywiscie dane trzeba nadal sprawdzic recznie po zaladowaniu do JOSM i popoprawiac. Niektore tagi uzywane w UMP dla roznych osob najwyrazniej mialy rozne znaczeni i wtedy w roznych regionach, ten sam tag ma rozne znaczenie, w zwiazku z tym nie wszedzie moglem znalesc jednoznaczny odpowiednik z osm. Wydaje mi sie ze dane ktore juz sa w OSM maja wiekszy priorytet i nie nalezy nigdy ich wywalac na kozysc ump, (czesto mamy lepsza dokladnosc).
Wyjatkiem sa nazwy miejscowosci, w OSM ktos kiedys zaimportowal wszystkie miejscowosci z GNS, czyli z dokladnoscia do 0.03 stopnia w zwiazku z tym tworza taka brzydka siatkie i niektore miescowosci sa w tych samych punktach (czasem 5 miejscowosci sie pokrywa w tym samym punkcie) i czasem brakuje w nich polskich znakow. Wiec jesli w UMP jest jakas miejscowosc to chyba mozna spokojnie odszukac ta sama miejscowosc w OSM i wywalic. (W bazie gns sa w ogole jakies bardzo stare dane i nazwy miejscowosci ktore juz dawno nie istenija i nawet lokalna ludnosc o nich nie wie, ale moze warto je i tak trzymac… ostatnia aktualizacja w gns jest chyba z '93)
Tam gdzie sa dostepne zdjecia yahoo chyba warto popoprawiac odrazu polozenie obiektow.
Skrypt nie rozwija skrotow wiec trzeba recznie porozwijac skroty w nazwach i pododawac imiona do nazwisk a nazwach ulic. Wydaje mi sie ze nalezy zostawiac tag source= nawet jesli sie poprawi recznie dany obiekt po to zeby nie lamac licencji UMP ktora przeciez wymaga “attribution”, i to sie odnosi nie tylko do pozycji ale takze nazwy i innych informacji o obiekcie.
Ogolnie nie bylem fanem importowania danych z UMP bo sytuacja z licencja jest bardzo niejasna… czy przez attribution autorzy rozumieja tylko zeby istniala informacja ktora pozwoli dociekliwym osobom znalesc sciezke do zrodla danej informacji czy tez oczekuja informacji o tym ze dane sa z UMP przy kazdym ich uzyciu (jesli to drugie oczywisice OSM nie moze sie zgadzac na taka licencje). Zalozmy ze ktos chce uzyc mapke zrobiona z osm w telewizji zeby pokazac gdzie cos sie stalo, to wtedy licencia OSM wymaga tylko zeby gdzies na ekranie pojawila sie nazwa OpenStreetMap ale nie nazwy innych wlascicieli praw autorskich danych w osm.
(No ale rzeczywiscie nie ma sensu podwajac wysilkow w dwoch projektach, i skoro juz ktos robi import to najlepiej to zrobic dobrze odrazu bo dane w UMP nie maja identyfikatorow i pewnie nigdy nie bedzie mozna robic automatycznych update’ow)
Na listach -legal i -licensing twierdzi sie ze CC w ogole nie ma zatosowania do danych i ze uzycie tej licencji bylo pomylka i ze wlasciwie to mozna robic co sie chce z danymi na CC. Ale glupio bylo by ignorowac licencje UMP jesli sami uzywamy tej samej licenji w tym momencie. Nie jest dla mnie jasne czy kiedy zmieni sie nasza licencja to czy trzeba bedzie wywalic zaimportowane na prawach CC dane z bazy. Nie bedac wlascicielami praw do tych danych, teoretycznie nie mozna zgodzic sie na zmiane ich licencji (Z drugiej strony “share-alike” w CC mowi tylko ze licencja ma byc podobna, nie koniecznie taka sama)
Nie wiem tez skad sa niektore dane w UMP, dzis znalazlem w wolominie ulice podzielona na trzy segmenty z name=Ottokara, name=Brzozy i name=Brzeziny i okazuje sie ze to jest jedna ulica ktora tak naprawde nazywa sie Generala Ottokara Brzozy-Brzeziny Najwyrazniej ktos patrzyl na jakas inna mape i narysowal to co widzial, dodatkowo chyba trzymal ja do gory nogami bo Ottokara byla po prawej a Brzeziny po lewej
Skrypt jest pod http://www.openstreetmap.pl/ump/txt2osm.py
i pliki .osm (zzipowane) pod http://www.openstreetmap.pl/ump/
W ump jest troche literowek i najpierw dodawalem do skryptu te literowki ale potem zaczalem poprawiac w pikach .txt wiec jak ktos chce zapuscic skrypt na wszystkich danych to musi nalozyc patcha z http://www.openstreetmap.pl/ump/ump.diff na dane z CVSa