W związku z pracami nad wyszukiwarką adresów, przyglądam się też powoli kwestiom kompletności i walidacji kodów pocztowych. Niedługo do niektórych place=city (gł. tych większych) będę dodawał tag multi_postcode_city=yes, który będzie rozgraniczał miasta w których obowiązuje więcej niż jeden kod pocztowy - bardzo proszę o niekasowanie tego :). Będzie z tego tagu korzystał walidator.
Pozostaje kwestia uzgodnienia standardów tagowania kodów pocztowych - wg wiki kod pocztowy może być przypisany do punktu albo polygonu. Polygony u nas się nie sprawdzają, bo kody pocztowe nie są przypisane do obszaru jak np. w UK tylko:
całego miasta
ulicy
fragmentu ulicy (np. zakresu numeracji domów).
Z tego co widzę po danych OSM u nas, sporo osób przypisuje addr:postcode do ulic, co (wg. tagwatch jest całkiem popularne globalnie)
W związku z tym chciałbym rozpocząć dyskusję jak ustandaryzować tagowanie kodów pocztowych w Polsce dla miast w których obowiązuje więcej niż jeden kod (chyba 25 największych miast w PL ma tak):
— scenariusz 1 ----
w momencie, gdy jedna ulica ma kilka numerów kodów (np. Zielna numery parzyste ma kod 11-111 a Zielna numery nieparzyste ma 22-222) - wtedy każdy housenumber musi mieć przypisany kod pocztowy
w momencie, gdy cała ulica ma przypisany jeden kod pocztowy, dodać ten kod do ulicy)
— scenariusz 2 ----
w miastach z obowiązującym więcej niż jednym kodem pocztowym, każdy punkt adresowy musi mieć przypisany addr:postode
Miasta z jednym kodem pocztowym mają po staremu addr:postcode przypisany do place=*
Co Wy na to? Scenariusz 2 chyba łatwiej upilnować i może być kompatybilny z większą ilością oprogramowania.
ok, to czekamy na resztę komentarzy - a w międzyczasie mam pewną koncepcję :). Mianowicie uzupełnianie addr:postcode w punktach adresowych to będzie mordęga. Na podstawie danych o kodach pocztowych można by stworzyć reguły przypisujące kody do adresów oraz jakimś skryptem raz na jakiś czas uzupełniać brakujące. Np. mając w jakimś sensownym formacie zapisaną informację, że w mieście X, ulica Kościuszki, numery od 40 do 118 mają kod pocztowy 22-222 - cyklicznie można by te dane kontrolować i nanosić z automatu.
Obawiam się, że to nie jest dobry pomysł, ponieważ częste są sytuacje, że niektóre miejscowości posiadają kilka kodów pocztowych i mapowicze zaraz zaczną pchać na siłę te kody (zapewne również i błędne) tylko po to, by mrówka zniknęła.
W związku z powyższym uważam, że kody powinny być na każdym adresie, a na węźle miejscowości tylko wtedy, gdy w obrębie całej miejscowości jest jeden kod pocztowy.
Kolejna rzecz, że zieleń zaciemniła obraz
Ogólnie nie podoba mi się ta koncepcja w obecnej formie…
Jeśli już koniecznie chcecie mieć te mrówki, proponuję ograniczyć mrówki typu postcode tylko do place=village. To i tak nie jest idealne rozwiązanie, ale skala szkód będzie mniejsza.
W miastach i miasteczkach adresy w obrębie jednej miejscowości występują różne kody pocztowe. I nie wierzę, że rogal dodał do wszystkich takich miejscowości tag “multi_postcode_city” (BTW to bardziej poprawnie powinno być “multi_postcode_place=yes”).
Możesz wskazać konkretny przykład? Bo na wikipedii wskazanych jest te 20 miast, dla których są różne kody pocztowe. W pozostałych każdy adres raczej ma ten sam kod pocztowy.
Poważnie, tak mało? Coś mi się wierzyć nie chce, bo moje doświadczenie z importów adresów mówi co innego… niestety, w tym momencie nie przypomnę sobie konkretnych miejscowości, bo za dużo tego było.
Mnie też to zdziwiło. Możesz sobie popatrzeć na niekoszerną mapę pod http://mapa-kodow-pocztowych.pl/ gdzie widać, że tylko największe miasta są pociachane.
Zbigniew mówi prawdopodobnie o takich przypadkach jak np. w Iławie gdzie całe miasto teoretycznie ma kod 14-200. Ale kod ten jest rozkładany na podkody które ułatwiają pracę pocztowcom. I mamy coś takiego:
14-200; Poczta Iława 001, ul. Jagiellończyka 1; Iława; Województwo warmińsko-mazurskie; Powiat iławski
14-200; Skrytki Pocztowe Poczta Iława 001, ul. Jagiellończyka 1; Iława; Województwo warmińsko-mazurskie; Powiat iławski
14-202; Poczta Iława 003, ul. Okulickiego 1; Iława; Województwo warmińsko-mazurskie; Powiat iławski
14-202; Skrytki Pocztowe Poczta Iława 003, ul. Okulickiego 1; Iława; Województwo warmińsko-mazurskie; Powiat iławski
14-210; Poczta Iława 002, ul. Dworcowa 2; Iława; Województwo warmińsko-mazurskie; Powiat iławski
W Iławie rzeczywiście występują 2 kody pocztowe dla adresów, ciekawe.
Skoro mamy jeszcze osobne kody dla skrytek pocztowych i instytucji, to może kod pocztowy bez wyjątku powinien być przypisany do punktu adresowego, a nie do miejscowości?
Jak wygląda w praktyce wykorzystanie kodów instytucji? Np. całe miasto to kod 12-345 i tylko jeden budynek (adres) w nim to 12-456? W takiej sytuacji może po prostu przypisać 12-345 dla miasta i 12-456 dla tego jednego budynku?
Czy skrytka pocztowa (jako adres) w ogóle jest „fizycznym”, mapowalnym obiektem czy raczej funkcjonuje tylko „wirtualnie”?
już mówię jak to wygląda :). Miast w których dla adresów doręczeń jest więcej niż jeden kod pocztowy jest rzeczywiście około 20 - otagowałem je bazując na wikipedii. W tych miastach każda ulica albo zakres numerów domów może mieć inny pod pocztowy. Stąd nie powinny być uwzględniane w walidacji ogólnej.
Pozostałe miasta mają jeden kod pocztowy dla doręczeń - te o których wspominacie na przykładzie Iławy to są kody technicznie przypisane do konkretnego urzędu pocztowego (a nie dla doręczeń “na mieście”). Dodatkowo w większych miastach osobny kod pocztowy może mieć np. firma lub instytucja - np. własny kod ma TVP, trochę takich kodów jest.
Koncepcja jest taka - każde miasto, które ma jeden kod pocztowy, ma go wpisany w punkcie place=*. Dzięki temu cyklicznie będzie można dla każdego punktu adresowego przypisywać skryptem kod pocztowy “odziedziczony” po mieście w którym się znajduje. Dodatkowo można wyłapać błędy w których jakiś numer domu ma przypisany kod pocztowy inny niż wynikający z tego przypisanego dla miasta. Oczywiście wspomniane już wyjątki rozwiązuje się w bardzo prosty sposób - dodając indywidualnie addr:postcode + jakiś własny tag, który powie walidatorowi, żeby akurat tego nie uznawał za błąd.
Proste i eleganckie
Mogę zrobić import, pozostaje kwestia źródła danych - PDF z poczty polskiej jawnie zabrania przetwarzania dokumentu, ale np. na wikisource leży podobna baza danych, tak samo na mojepanstwo.pl (nawet API maja i chwalą się, że dane są otwarte). Dodatkowo z wielu stron różnych firm (np. banków) można ściągnąć dokument Excela ze wszystkimi kodami pocztowymi (bez jakiejkolwiek atrybucji lub danych o licencji).
//edit: czy zielone punkty na mapie mogą mieć ustawioną jakąś przeźroczystość? Może warto dać z 40-50%, żeby nie przytłaczały bardziej krytycznych błędów?