W pewnym hobbystycznym projekcie geokoduję nazwy miejscowości używając do tego celu usługi Google. Potencjalnym źródłem błędnych wyników mogą być miejscowości, które mają identyczne nazwy. Jaka jest skala zjawiska?
Według obwieszczenie Ministra Administracji i Cyfryzacji z dnia 4 sierpnia 2015 r. w wykazie urzędowych nazw miejscowości i ich części (Dziennik Ustaw 19 10. 2015 r., poz. 1636) znajduje się: 103086 nazw, w tym 915 nazw miast, 6710 nazw części miast, 43068 nazw wsi, 36263 nazwy części wsi, 5132 nazwy osad. Z czego wynika, że wsi + miast jest 43068 + 915 = 43,983 nazw. (Na podstawie KSNG/Urzędowe nazwy miejscowości)
Po ściągnięciu arkusza z powyższej strony, zamieniam go na format CSV używając jako separatora pola średnika (bo lubię). Następnie za pomocą poniższego skryptu agregują dane:
#!/usr/bin/perl # zamiana listy nazw na listę: # nazwa;województwo;liczba-wystąpień-w-województwie while (<>) { chomp(); @tmp = split /;/, $_; if ($tmp[1] eq 'wieś' || $tmp[1] eq 'miasto' ) { $NW{"$tmp[4]"}{"$tmp[0]"}++; } } for $w (sort keys %NW ) { for $m (sort { $NW{$w}{$b} <=> $NW{$w}{$a} } keys %{$NW{$w} }) { print "$m;$w;$NW{$w}{$m}\n"; } }
Teraz z kolei używając R grupuję dane w podziale na następujące cztery klasy: 1 wystąpienie, 2 wystąpienia 3--4 oraz 5 i więcej wystąpień. Rezultaty zestawiono w poniższej tabeli (kolumny 2--5 to liczebności a 6--10 udziały; przykładowo zapis [1,2) oznacza, że klasa zawiera 1 a nie zawiera 2):
Województwo [1,2) [2,3) [3,5) [5,30) [1,2) [2,3) [3,5) [5,30) --------------------------------------------------------------------- dolnośląskie 2082 117 37 3 92,99 5,23 1,65 0,13 kuj.-pomorskie 2257 183 52 10 90,20 7,30 2,10 0,40 lubelskie 2698 154 65 26 91,68 5,23 2,21 0,88 lubuskie 965 57 5 0 93,96 5,55 0,49 0,00 łódzkie 3276 275 99 45 88,70 7,40 2,70 1,20 małopolskie 1594 105 21 4 92,46 6,09 1,22 0,23 mazowieckie 5780 466 177 79 88,90 7,20 2,70 1,20 opolskie 941 39 9 1 95,05 3,94 0,91 0,10 podkarpackie 1429 49 17 2 95,46 3,27 1,14 0,13 podlaskie 2852 136 42 9 93,80 4,50 1,40 0,30 pomorskie 1579 58 13 2 95,58 3,51 0,79 0,12 śląskie 1033 48 7 2 94,77 4,40 0,64 0,18 świętokrzyskie 1844 111 51 12 91,38 5,50 2,53 0,59 war.-mazurskie 2060 128 34 3 92,58 5,75 1,53 0,13 wielkopolskie 3378 310 99 19 88,80 8,10 2,60 0,50 zachodniopomorskie 1504 117 19 1 91,65 7,13 1,15 0,06
Lista najczęściej powtarzających się (więcej niż 4 powtórzenia) nazw w poszczególnych województwach:
dolnośląskie: Księginice (5) Nowy Dwór (5) Piotrowice (5)
kujawsko-pomorskie: Nowa Wieś (14) Dąbrówka (9) Nowy Dwór (8) Janowo (7) Zalesie (7) Ostrowo (6) Zakrzewo (6) Józefowo (6) Białe Błota (5) Brzeźno (5)
lubelskie: Marysin (9) Brzeziny (8) Zalesie (8) Dąbrowa (7) Stara Wieś (7) Władysławów (6) Antoniówka (6) Nowiny (6) Józefów (6) Ludwinów (6) Dębina (6) Natalin (5) Zastawie (5) Nowosiółki (5) Stanisławów (5) Ruda (5) Kąty (5) Michałówka (5) Janówka (5) Ostrów (5) Zabłocie (5) Huta (5) Wysokie (5) Nowa Wieś (5) Wojciechów (5) Siedliska (5)
mazowieckie: Nowa Wieś (28) Zalesie (23) Dąbrowa (21) Helenów (16) Władysławów (16) Józefów (15) Aleksandrów (15) Dąbrówka (14) Zawady (14) Stanisławów (13) Ruda (11) Marianów (11) Janów (11) Ludwików (10) Kamionka (10) Górki (10) Borki (9) Ostrówek (9) Lipiny (9) Grabina (9) Janówek (9) Marysin (8) Józefowo (8) Stara Wieś (8) Majdan (8) Łazy (8) Michałów (8) Wygoda (7) Bronisławów (7) Julianów (7) Sewerynów (7) Adamowo (7) Grądy (7) Trzcianka (7) Osiny (7) Adamów (7) Kąty (7) Emilianów (6) Żuków (6) Wymysłów (6) Pieńki (6) Lipniki (6) Grabowo (6) Franciszków (6) Mościska (6) Dębówka (6) Mała Wieś (6) Natolin (6) Piaski (6) Anielin (6) Bieliny (6) Lipa (6) Wincentów (6) Kazimierzów (6) Pogorzel (5) Aleksandrówka (5) Józefin (5) Laski (5) Huta (5) Kałęczyn (5) Łaziska (5) Marianka (5) Pawłowice (5) Karolew (5) Osiek (5) Zakrzew (5) Zamość (5) Chmielewo (5) Ostrów (5) Rososz (5) Białobrzegi (5) Romanów (5) Pawłowo (5) Wyczółki (5) Kozłów (5) Podgórze (5) Dąbrówki (5) Ignaców (5) Jakubów (5)
małopolskie: Przybysławice (6) Zawadka (5) Siedliska (5) Biskupice (5)
opolskie: Jakubowice (5)
podkarpackie: Nowa Wieś (7) Zalesie (5)
podlaskie: Zalesie (9) Olszanka (8) Ogrodniki (8) Wólka (7) Janowo (5) Rybaki (5) Nowinka (5) Nowosady (5) Jałówka (5)
pomorskie: Dąbrówka (8) Ostrowite (5)
warmińsko-mazurskie: Zalesie (7) Nowa Wieś (5) Olszewo (5)
wielkopolskie: Dąbrowa (15) Nowa Wieś (13) Bielawy (9) Zalesie (8) Biskupice (7) Zakrzewo (7) Marianowo (6) Józefowo (6) Józefów (6) Ruda (5) Zawady (5) Piaski (5) Brzezie (5) Chrustowo (5) Góra (5) Drzewce (5) Kamień (5) Nowy Dwór (5) Kamionka (5)
zachodniopomorskie: Grabowo (5)
łódzkie: Józefów (20) Dąbrowa (17) Janów (17) Dąbrówka (14) Stanisławów (14) Nowa Wieś (11) Zalesie (11) Piaski (11) Adamów (11) Zawady (10) Marianów (10) Ostrów (9) Władysławów (9) Stefanów (9) Helenów (8) Dębina (8) Aleksandrów (8) Julianów (7) Bronisławów (7) Marianka (7) Borki (7) Stara Wieś (7) Brzeziny (7) Gaj (7) Michałów (7) Ludwików (6) Witów (6) Wygoda (6) Kazimierzów (6) Kuźnica (6) Anielin (6) Karolew (6) Ruda (6) Antoniew (5) Jeziorko (5) Konstantynów (5) Zakrzew (5) Emilianów (5) Osiny (5) Poręby (5) Feliksów (5) Borowa (5) Zagórze (5) Teodorów (5) Wymysłów (5)
śląskie: Zawada (6) Nowa Wieś (6)
świętokrzyskie: Wolica (9) Wymysłów (8) Podlesie (8) Hucisko (6) Zagórze (5) Nowa Wieś (5) Brzeście (5) Zakrzów (5) Janów (5) Bugaj (5) Ludwinów (5) Górki (5)
W skali całego kraju jest 5080 miejscowości, których nazwa nie jest unikatowa, w tym, w przypadku 868 miejscowości nazwy powtarzają się 5 i więcej razy. Pierwsza dziesiątka wygląda następująco: Nowa Wieś (113 powtórzeń), Dąbrowa (92), Zalesie (86), Dąbrówka (65), Józefów (49), Kamionka (41), Ruda (39), Janów (39), Zawady (39) Stanisławów (38).
W pierwszym akapicie napisałem, że problem może być potencjalny ponieważ wydaje się, że geokoder Google działa całkiem sprytnie. Przykładowo
Nowa Wieś -> 07-416 Nowa Wieś (powiat oświęcim) Nowa Wieś, ul. Dworcowa -> 64-234 Nowa Wieś (Powiat wolsztyński)
Po wpisaniu po prostu Nowa Wieś
geocoder, z jakiś
powodów, decyduje się na
Nową Wieś w powiecie oświęcimskim, ale już
podanie dodatkowo ul. Dworcowa
zmienia wynik na Nową Wieś
w powiecie wolsztyńskim; faktycznie w tej wsi jest ul. Dworcowa
(pytanie czy tylko w tej). Można uściślić o co nam chodzi podając też:
Nowa Wieś, powiat wolsztyński Nowa Wieś, województwo wielkopolskie
Podanie powiatu powinno rozwiązać problem duplikatów, zaś drugi sposób wydaje jednak mniej pewny biorąc pod uwagę liczbę powtórzeń nazw na poziomie województwa...
Skrypty i dane są tutaj.
Kupiłem to cudo w celu używania na wyjazdach. W domu działam na PCie (bezwiatrakowy Intel NUC, opisany tutaj).
Z tego co piszą w Internetach Linuksa nie da się zainstalować (przed zakupem wydawało mi się, że się da, ale okazuje się, że są tylko jakieś alfa wersje, nie do końca działające). Z 32Gb dostępnej pamięci, 10Gb zajęte jest przez recovery partition, której nie da się usunąć/przenieść na przykład na pamięć USB. Po zainstalowaniu kilku aplikacji zostało 10Gb wolnego miejsca.
Teraz plusy
Na plus tego komputera bez wątpienia należy zaliczyć: 1. waży tylko 0,9kg (1,1kg z ładowarką); 2. potrafi ponad 10 godzin pracować na baterii; 3. jest całkiem szybki i wygodny (klawiatura).
Pewnie airBook byłby lepszy ale nie za 780 PLN no i trochę byłby cięższy (ten airBook).
Problem z pamięcią rozwiązałem (mam nadzieję -- na ile skutecznie, to wyjdzie w praniu) w taki sposób, że kupiłem kartę mikroSD 32Gb z przeznaczeniem na dane. Wsadziłem ją ,,na stałe'' do czytnika po sformatowaniu do NTFS. Gdzieś coś wyczytałem, że Windows10 pozwala na przeniesienie recovery partition, ale ja się boję tego Win10 i zostaję na razie z Win8.1 (być może niesłusznie). Zresztą przy instalowaniu byłem brutalnie zachęcany do zmiany domyślnego Win8.1 na Win10, co tylko pogłębiło moje obawy czy warto...
W nawiązaniu do narzekań z poprzedniego wpisu spróbowałem alternatywy pn. umap.fr.
Na umap.fr można wyświetlać zawartość plików KML równie prosto
jak na mymaps google. Jedyne co trzeba zmienić, to zawartość
elementu description
, który ma zawierać zamiast
HTMLa podzbiór/wariant markdowna.
Konkretnie ma być:
<description> {{URL-do-miniatury-zdjęcia}} [[URL-do-strony-zdjęcia|enlarge/powiększ]] </description>
zamiast:
<description><![CDATA[ <a href='URL-do-strony-zdjęcia' target='_blank'> <img src='URL-do-miniatury-zdjęcia' />enlarge/powiększ </a>]]> </description>
Tak zmieniony plik importujemy, zapisujemy, a osiągnięty rezultat jest do obejrzenia w ramce obok.
Wkurzające są ciągłe udoskonalenia usług Google, których obocznym skutkiem jest niekompatybilność i/lub konieczność zmiany narzędzi, które działały kiedyś i nagle przestały działać. Taka przykrość spotkała mnie wczoraj i dotyczyła importu plików KML do myMaps/Mojemapy google.
Otóż kiedyś działało coś takiego (opisującego miejsce zrobienia zdjęcia):
<Placemark><name>epl316_2135207.jpg</name> <description><![CDATA[ <a href='https://www.flickr.com/photos/tprzechlewski/24967425626/' target='_blank'> <img src='https://farm2.staticflickr.com/1508/24967425626_2166aceb85_m.jpg' />epl316_2135207.jpg </a>]]> </description> <Point><coordinates>9.20398056,45.48436667</coordinates> </Point> </Placemark>
dziś przestało. Po kliknięciu w pinezkę, otwiera się okienko z informacją o zdjęciu, ale miniaturka zdjęcia nie jest wyświetlana.
Za pomocą reverse-engineering ustaliłem (być może nie jest to rozwiązanie optymalne), że działa poniższe:
... jak poprzednio ... </description> <ExtendedData><Data name='gx_media_links'> <value>https://farm2.staticflickr.com/1508/24967425626_2166aceb85_m.jpg</value> </Data></ExtendedData> <Point> ...itd...
tzn po elemencie description
trzeba wstawić ExtendedData
,
z zawartością jak wyżej.
Por także: Importowanie i wyświetlanie plików KML w Google Maps oraz Keyhole Markup Language/Adding Custom Data.
W promocji (w ramce po prawej) mapka wycieczki do Mediolanu/Bergamo zaimportowana w opisany wyżej sposób.