Michał
M.
Dyrektor Centrum,
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
Daniel Goździk Freelancer
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.
Dyrektor Centrum,
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
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.
Dyrektor Centrum,
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
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.
Dyrektor Centrum,
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
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?
