Michał M.

Michał M. Dyrektor Centrum
Sprzedaży e-Zdrowie,
Comarch SA

Temat: Problemy z Google Maps API V3

Zapoznaję się właśnie z API Google Maps (V3) i natknąłem się na taką dziwną sprawę, czy może jest to jakaś awaria u nich, czy też ja mam taki problem - otóż geocoder zwraca mi kod pocztowy dla dowolnej ulicy z Gdańska 80-001, co jest absolutną nieprawdą:
Przykłady: Gdańsk, Grunwaldzka 471 lub Gdańsk, Wały Piastowskie 1 - to są kody odpowiednio: 80-471 i 80-255, a nie 80-001. Co ciekawe - standardowe Google Maps też podaje takie kody przy wyszukiwaniu. Czemu tak jest?

Druga sprawa - sposób wyciągnięcia tej informacji (dot. kodu pocztowego) jest dość skomplikowany, bo muszę stosować następujący kod:
for(var i=0; i < wyniki.length; i++){
for(var j=0;j < wyniki[i].address_components.length; j++){
for(var k=0; k < wyniki[i].address_components[j].types.length; k++){
if(wyniki[i].address_components[j].types[k] == "postal_code"){
kod_pocztowy = wyniki[i].address_components[j].long_name;
alert(wyniki[i].address_components[j].long_name);
}
}
}

(znalazłem ten kod na jakimś forum) - nie rozumiem dlaczego alert wyskakuje 3 razy (pierwszy raz jest 80-001 [patrz problem 1], drugi 80 i trzeci też 80.

Problem trzeci: dlaczego jeżeli damy do geokodowania adres budynku, który nie istnieje w ich bazie to geocoder nie wskazuje konkretnego budynku tylko ulicę i nie zwraca w result[0].formatted_address numeru budynku, tylko ulica, kod pocztowy, miasto a co najdziwniejsze gocoder zwraca google.maps.GeocoderStatus.OK, chociaż de facto nie znajduje tego budynku.

Ewidentnie ta mapa jest dość dziwnie aktualizowana, bo budynki te powstały dużo wcześniej niż autostrada A1, a jednak ona jest na mapie a budynku nie ma.Dodatkowo zastanawia mnie, czemu w tablicy address_components nie ma numeru budynku - w ogóle nie da się go sensownie wyciągnąć z wyników geokodowania po adresie - tylko cięcie stringu, a to nie zawsze jest dobra droga.

Będę wdzięczny za pomoc.Michał Mular edytował(a) ten post dnia 12.09.11 o godzinie 02:13

Temat: Problemy z Google Maps API V3

Temat kodów - Google Maps nie radzi sobie z nimi prawie wcale, a przynajmniej na terenie Polski. ok 3 tygodni temu robiłem aplikację opartą o Google Maps, kody pocztowe itp. spędziłem 3 dni na ogarnięciu tematu i w końcu zdecydowałem się na najprostsze i najtańsze rozwiązanie - płyta CD z kodami od poczty polskiej. Koszt 30 PLN, aktualna baza kodów w postaci xls, pdf + ich mini aplikacja do przeszukiwania.
Google czasami obsługuje kody, ale np. bez "-" czyli 02796 zamiast 02-796. W niektórych sytuacjach może też obsłużyć kod postaci xx-xxx, ale myślę, że to z Google Places, czyli jeżeli ktoś dodał firmę, lokal, miejsce pod danym kodem, w danej miejscowości, to Google to załapie przy późniejszym wyszukiwaniu. Dlatego też może w tym przypadku zwrócony kod był błędny. Znalazł najbliższy kod w swojej bazie dla wpisanej lokalizacji.

Ta pętla trochę dziwnie wygląda. Z jakiego serwisu Google Maps korzysta do wyciągania kodu, bo chyba nie z directions?...

Jeżeli chodzi o zwracanie nr ulicy, nie budynku, to może wynikać z rodzaju trasy, autem czy pieszo...

Z aktualizacjami Google Maps, to generalnie jest porażka. Brak tam wielu dróg, część jest zupełnie odmienna od tego co np. pokazuje teleatlas. Wspomniana autostrada A1, mało że jest niepełna, to jeszcze na podglądzie Satelitarnym leci przez pola, rzeki, lasy. W wielu miejscowościach brak jakiejkolwiek sieci ulic. Dla Google Maps są to wioski, do których dojeżdża się koniem przez pole.

Google Maps, daje duże możliwości, ma w miarę przystępne API i sporo tutoriali w sieci, ale gdybym miesiąc temu wiedział to, co wiem teraz wspomnianą aplikację oparłbym pewnie na innym systemie. Może Yahoo!...
Michał M.

Michał M. Dyrektor Centrum
Sprzedaży e-Zdrowie,
Comarch SA

Temat: Problemy z Google Maps API V3

Twoja propozycja z kodami od poczty polskiej jest niezbyt dobra, dlatego że to są mapy punktowe a nie obszary kodowe. Nie jesteś w stanie na tej podstawie precyzyjnie stwierdzić, czy dany obiekt znajduje się w kodzie nn-nnn.

Kod wygląda tak:

function skoczDoAdresu(adres)
{
wskaznik.setMap(null); // ukrywamy marker
geokoder.geocode({'address': adres}, function(wyniki, status)
{
if(status == google.maps.GeocoderStatus.OK)
{
var address = wyniki[0].address_components;
var kod_pocztowy ="xx-xxx";
for(var i=0; i < wyniki.length; i++){
for(var j=0;j < wyniki[i].address_components.length; j++){
for(var k=0; k < wyniki[i].address_components[j].types.length; k++){
if(wyniki[i].address_components[j].types[k] == "postal_code"){
kod_pocztowy = wyniki[i].address_components[j].long_name;
alert(wyniki[i].address_components[j].long_name);
}
}
}
} mapa.setCenter(wyniki[0].geometry.location);
wskaznik.setTitle(wyniki[0].formatted_address);
wskaznik.setPosition(wyniki[0].geometry.location);
wskaznik.setMap(mapa); // pokazujemy go ponownie
//dymek.open(mapa, wskaznik); // dymek ze znalezionym adresem
//dymek.setContent('<strong>Poszukiwany adres</strong><br />'+adres);
}
else
{
alert("Nie znalazłem podanego adresu!");
}
});
}


Nie pisałem o zwracaniu ulicy jako numeru, tylko samej nazwy ulicy bez numeru, jeżeli google nie znajdzie danego numeru (bo nie ma go u siebie). Wtedy wykonywana jest ta część kodu, która jest w warunku (status == google.maps.GeocoderStatus.OK), co oznacza, że ten status jest ok, pomimo, że nie znaleziono numeru budynku.

Yahoo ma jeszcze słabsze zasoby niż google niestety.
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: Problemy z Google Maps API V3

Dane Google są ok, ale nie wszędzie, jak zauwazyliście ;-)

Jednak wracając do tematu - nie tyle miałbym zastrzeżenia do samego API, ale do bazy danych właśnie.

Sam fallback do defaultowego centroida ulicy może być przydatny, jeżeli nie ma adresu z dokładnością do numeru - sugeruje, że jednak ulica jest, ale już numer 66xyz nie - geokoder stara się wyszukać coś, co spełnia kryteria, choćby częściowo.
Nie sprawdzałbym jedynie statusu geocodera, ponieważ on słusznie (dla przyjętego sposobu działania) zwrócił dane. Jeżeli chcesz podłubać dalej, to sprawdź sobie dokładności zwróconego geokodowanego punktu np. właściwość location_type, albo właściwość (tablica) types 'of type' Address Component Types

Więcej do poczytania o 'geocoding responses' tutaj: http://code.google.com/intl/pl-PL/apis/maps/documentat... i tutaj: http://code.google.com/intl/pl-PL/apis/maps/documentat...

Jeden z przykładów dla zwracanych obiektów poniżej. W sumie ma w sobie wszystko, co potrzeba razem z numerem budynku. I poraz kolejny nie samo api może być uciążliwe, ale raczej jakość danych.
Szczęśliwie, jeżeli jakość danych jest wymagana przy projekcie, można sobie te dane bez najmniejszego problemu kupić. Cena to inna bajka, ale same dane są dostępne ;-)

{
"status": "OK",
"results": [ {
"types": [ "street_address" ],
"formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"address_components": [ {
"long_name": "1600",
"short_name": "1600",
"types": [ "street_number" ]
}, {
"long_name": "Amphitheatre Pkwy",
"short_name": "Amphitheatre Pkwy",
"types": [ "route" ]
}, {
"long_name": "Mountain View",
"short_name": "Mountain View",
"types": [ "locality", "political" ]
}, {
"long_name": "California",
"short_name": "CA",
"types": [ "administrative_area_level_1", "political" ]
}, {
"long_name": "United States",
"short_name": "US",
"types": [ "country", "political" ]
}, {
"long_name": "94043",
"short_name": "94043",
"types": [ "postal_code" ]
} ],
"geometry": {
"location": {
"lat": 37.4219720,
"lng": -122.0841430
},
"location_type": "ROOFTOP",
"viewport": {
"southwest": {
"lat": 37.4188244,
"lng": -122.0872906
},
"northeast": {
"lat": 37.4251196,
"lng": -122.0809954
}
}
}
} ]
}
Michał M.

Michał M. Dyrektor Centrum
Sprzedaży e-Zdrowie,
Comarch SA

Temat: Problemy z Google Maps API V3

Dominik,
Kody pocztowe działają np. dla Płocka a dla Warszawy i Gdańska już nie. Gdańsk ma wszędzie kod 80-001, a Warszawa 01-001.

Zastosuję się do Twoich wskazówek i przeanalizuję te właściwości punktu.
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: Problemy z Google Maps API V3

Ja się nie upieram, że dane są poprawne. Sporo się z gmaps trykałem i tego aspektu bronić nie będę. Zdecydowanie.
To tylko API != dane. Samo api jest według mnie całkiem przyjemne ;-)
Jeżeli zależy Ci na dobrych danych, to sprawdź dostawców komercyjnych. Są w Pl firmy, które mają w ofercie fajne dane. Niestety dość kosztowne, ale to w sumie kwestia raczej relatywna. Samo api maps nie jest tanie, chociaż paradkosalnie w stosunku do ceny jest według mnie jedną z lepszych opcji w pl.
Michał M.

Michał M. Dyrektor Centrum
Sprzedaży e-Zdrowie,
Comarch SA

Temat: Problemy z Google Maps API V3

Domninik, zgadzam się z Tobą, API od Googla są naprawdę dobre. Już wcześniej miałem z nim styczność przy YT (tam akurat jest dodatkowo udostępniony framework Zend_Gdata_YouTube).

Sprawa wygląda tak, że mam dane, które są od dostawcy komercyjnego, jednak i tam występuje problem braku niektórych budynków (za szybko nam się kraj buduje). W związku z tym chciałem napisać aplikację, która umożliwia dodawanie adresów z poziomu klienta serwisu www. Mam KML, który określa zakres dostaw, jeżeli twój adres nie jest na liście, to podajesz w formularzu adres i na tej podstawie aplikacja stwierdza, czy znajduje się on w zasięgu KML, to umożliwia Ci zgłoszenie do rejestracji adresu dostawy. Oczywiście warunkiem jest to, że również w Google Maps adres danej lokalizacji występuje - stąd wcześniejsze wątpliwości co do sprawdzenia, co zwrócił geocoder (czy znalazł adres).
Dodatkowo z uwagi na spore braki, rozważam w chwili obecnej wskazanie lokalizacji myszką, podanie jej adresu i przesłanie do zatwierdzenia do administratora systemu.

Etap na jakim jestem obecnie znajduje się tutaj:
http://www.pepepizza.eu/mapa.php

PS. Czy polecasz jakichś dostawców danych? Ja pracowałem obecnie na danych od MapInfo
Dominik Mikiewicz

Dominik Mikiewicz maps made easy,
www.cartomatic.pl ||
cartoninjas.net

Temat: Problemy z Google Maps API V3

Fakt, dane adresowe ewoluują dość dynamicznie.

Jeżeli jesteś gotowy płacić za dane obadaj sobie np. emapę z Łodzi. Kiedyś z nimi rozmawiałem, mają dane o dobrej jakości. Takich dostawców jest więcej - i mniejszych i większych pokroju Teleatlas, czy Navteq. Kwestia dobrania jakości do ceny ;-)

Z innej beczki i na przekór grupie nieco - sprawdzałeś co oferuje bing maps w temacie jakości danych dla obszaru, który Cię interesuje?



Wyślij zaproszenie do