osm-pl / osm-addr-tools

Address conflation tools, expanded version of https://gist.github.com/balrog-kun/4241509 and friends
3 stars 3 forks source link

merger.py i problem z brakującym addr:city #13

Closed zibik closed 9 years ago

zibik commented 9 years ago

Weźmy dla przykładu wdrożenie piastow.e-mapa.net Dawno temu balrog-kun zrobił import adresów w tym mieście, jednak do importowanych adresów świadomie nie dodał addr:city=Piastów. Efekt tego teraz jest taki, że robiąc ./merger.py --impa piastow, skrypt oznacza stare adresy jako fixme=Check address existance i chce importować nowe. Jednym słowem, wielki bałagan zupełnie nienadający się do wysłania na serwer. Pytanie brzmi czy nie dałoby się, żeby skrypt sprawdzał koordy + pozostałe tagi i w przypadku wystąpienia pewnej zgodności stary adres zostałby uzupełniony danymi z nowego adresu (czyli addr:city, addr:teryt:simc) + jakieś fixme?

wiktorn commented 9 years ago

To co można robić, co wydaje się całkiem bezpieczne, to zaciągnąć admin_level=8 dla obszaru, a następnie dla adresów które nie mają addr:city, uzupełniać je z name relacji, w ramach której się znajdują, a do tego przy okazji przykleić jakieś fixme.

Niestety, punkty które nie znajdą się w granicy jakiegoś miasta będą miały ten sam problem co obecnie.

To co jest w tej chwili zaimplementowane, to w przypadku gdy adresy są w odległości mniejszej niż dwa metry, mają ten sam addr:housenumber, oraz zgadzają się na poziomie nazwy miasta - to dane punktu są aktualizowane.

Co można dodać, to by w przypadku, gdy na punkcie obecnym w OSM nie ma nazwy miasta, natomiast zgadza się nazwa ulicy, to by aktualizować nazwę miasta, tak samo jak powyżej.

Dla Piastowa przy takim algorytmie generowane jest o 2000 mniej zmian.

zibik commented 9 years ago

Jest błąd po tej zmianie: WARNING:main.Merger:Changing street name from mjr Waleriana Łukasińskiego in import to Majora Waleriana Łukasińskiego as in OSM (way:196520744), distance=4.28m Traceback (most recent call last): File "./merger.py", line 781, in main() File "./merger.py", line 771, in main m.merge() File "./merger.py", line 274, in merge self._do_merge() File "./merger.py", line 331, in _do_merge self._parallel_process_func(self._do_merge_one, self.impdata) File "./merger.py", line 251, in def init(self, impdata, asis, terc, parallel_process_func=lambda func, elems: tuple(map(func, elems))): File "./merger.py", line 341, in _do_merge_one self._do_merge_create_point, File "./merger.py", line 335, in return any(map(lambda x: x(entry), File "./merger.py", line 422, in _do_merge_by_nearest self.addFixme("Node updated from nearest node") AttributeError: 'Merger' object has no attribute 'addFixme'