2009-02-16 14 views
14

Aktualizacja: iPhone SDk 3.0 już teraz odpowiada na to pytanie, jednak NDA nie pozwala na dogłębną dyskusję. Zaloguj się do iPhone Dev Center, jeśli potrzebujesz więcej informacji.Zintegruj Google Maps API z iPhone'ową aplikacją

Ok, muszę przyznać, że jestem trochę zagubiony.

Jestem dość wygodne z Cocoa, ale mam problem zebranie trochę javascript potrzebne do rozwiązania tego problemu.

Próbuję wysłać do Google prośbę o odwrócenie kodu geograficznego.

Szukałem nad dokumentacją Google Mam obejrzeć tu: http://code.google.com/apis/maps/documentation/index.html http://code.google.com/apis/maps/documentation/geocoding/

Nawet po ciężkim czytania, jestem brakujące podstawowe pojęcia:

Jak mogę porozmawiać z google? W niektórych przykładach pokazują one adres URL wysyłany do google (co wydaje się dość łatwe), ale w innych pokazują javascript. Wydaje się, że dla geokodowania wstecznego żądanie może być trudniejsze niż wysłanie adresu URL z pewnymi parametrami (ale mam nadzieję, że się mylę).

Czy ktoś może wskazać mi prawidłowy sposób złożenia wniosku? (W celu-C, więc mogę owinąć wokół niego głowę)

Odpowiedz

9

AKTUALIZACJA - iPhone 0.3 zawiera MapKit, który, miejmy nadzieję, będzie znacznie szybszy niż przy użyciu JS API. Blurb mówi, że będzie zawierał odwrotne geokodowanie.

Nie można przesłać żądania bezpośrednio w celu C, przynajmniej nie w ramach warunków interfejsu API Google. Interfejs API Google został napisany w języku JavaScript. Możesz użyć celu c do mostu JS, tak jak robi to Google Maps Component, ale to naprawdę nie rozwiązuje problemu - nadal wykonujesz połączenia JS!

Niestety, oznacza to, że a) trzeba użyć WebView b) trzeba użyć API JS, które jest powolne ... porównać z aplikacją Google Maps, który wykorzystuje zupełnie inny protokół OTA (spróbuj go pakiet wąchania).

Komponent Map Google to przydatny samouczek do wykonywania prostych połączeń z interfejsem API.

+0

Dzięki, wydawało się, że to było coś jak nudny, że. Potwierdza moje obawy, ponieważ chcę tylko cofnąć geokodowanie adresu Wydaje się, że to byłoby trywialne –

3

Najprostszym sposobem na uzyskanie mapy Google za pomocą kakao jest użycie "Statycznego interfejsu API Map Google". W praktyce musisz przygotować NSURL, którego używasz do kontaktowania się z Google. Odzyskasz swoją mapę jako NSData, którą przekształcasz w NSImage. Pamiętaj, że możesz wykonać geokodowanie i odwrotne geokodowanie. Możesz również umieszczać znaczniki na mapie. Jednak tracisz pełną kontrolę, do której masz dostęp, jeśli używasz ich JavaScript API.

Spójrz na ich poradnik tutaj:

http://code.google.com/apis/maps/documentation/staticmaps/

1

Dla twojej informacji: Odwrotne geokodowanie API od Google dla żądań przez XML nie jest publiczna, więc jest to niezgodne z prawem do korzystania. Jedynym legalnym sposobem jest przechodzenie przez ich JavaScript-API, który jak się okazało jest trudniejszy w Kakao, niż po prostu wysłać żądanie HTTP.

Alternatywy: Odwrotne geokodowanie za pomocą prostych żądań XML/JSON jest również dostępne pod numerem Geonames lub Yahoo.

0

Właściwie nie zamierzałem odwrócić geokodowania jako "tłumaczenie punktu na adres czytelny dla człowieka", ale raczej wizualizowanie punktu za pomocą Google Map (które może również, w zależności od poziomu dokładności, pokazywać czytelne dla człowieka adres). Jest to podstawowa funkcjonalność, która była wymagana.

W praktyce, po prostu chciałem się sugerować statycznego Maps API jako czystego i szybki sposób:

1) podanych współrzędnych uzyskanych z czujnika iPhone GPS, pobierać Map Google pokazujący punktu

2) dany adres, przekształcić go w odpowiednich współrzędnych geograficznych, a następnie użyj coords aby pobrać Google Map pokazujący adres podany

Oba są możliwe przy użyciu prostych NSURLs obejmujące Staticmap i usług geo

http://maps.google.com/staticmap? http://maps.google.com/maps/geo?

przekazanie oczywiście potrzebnych parametrów w celu zapewnienia odpowiedniego ciągu zapytania.

poważaniem

2

teraz, że Apple ma zwolnić API MapKit dla OS 3.0, myślę, że pytanie zostało odebrane. Po obejrzeniu dokumentów API, widzę ogromny potencjał! Nadal chciałbym skorzystać z usług Google w odwrotnym geokodowaniu, ale Yahoo zrobi to w międzyczasie.

0

Najważniejszym problemem jest to, że umowa licencyjna zarówno Google, jak i Yahoo mówią, że nie można używać tych API w "aplikacjach komercyjnych". nie chciałbym opublikować aplikacji w sklepie z aplikacjami tylko po to, by została usunięta i pozwana przez Yahoo lub Google. Czytając api interfejsu iPhone 3.0 i powiązaną z nim licencję, nie jest to wspomniane, ale jeśli chcesz, aby aplikacja działała na telefonach, które nie zostały uaktualnione ...

Czy istnieje odpowiedź na to pytanie, które nie spowoduje problemów?

4

stworzyłem SVGeocoder, prosty przód i odwrotnej klasa geocoder dla iOS. Korzysta z Google Geocoding API, zwraca obiekty SVPlacemark (podklasa MKPlacemark z właściwością coordinate) i używa bloków.

ten sposób można Geokodując ciąg Adres:

[SVGeocoder geocode:addressString 
     completion:^(NSArray *placemarks, NSError *error) { 
      // do something with placemarks, handle errors 
     }]; 

Można też odwrócić Geokodując współrzędnych tak:

[SVGeocoder reverseGeocode:CLLocationCoordinate2DMake(45.53264, -73.60518) 
       completion:^(NSArray *placemarks, NSError *error) { 
        // do something with placemarks, handle errors 
       }]; 
+0

Doceniam stworzony przez ciebie "SVGeocoder" Działa dobrze oprócz sześciu niebieskich ostrzeżeń po analizie Trzy niebieskie ostrzeżenia w "SVGeocoder.m ": 1) Potencjalny wyciek obiektu przydzielonego w linii 135: self.request = ... 2) Potencjalny przeciek obiektu przydzielony w linii 211: self.responseData = ... 3) Potencjalny wyciek obiektu przydzielonego on-line 214: self.connection = ... I Trzy niebieskie ostrzeżenia w "JSONKit.m", 1) Martwy kod na linii 744: anObject = [an Zatrzymanie obiektu]; 2) Martwy kod w linii 791: anObject = [anObject retain]; 3) Błąd logiczny w linii 865: encodeState-> serializeOptionFlags = optionFlags; –

+0

Moja wersja kodu Xcode to 4.2 –

+0

Powinieneś pisać takie rzeczy na GitHub, a nie w komentarzu do SO. – samvermette

1

Od iOS5 mamy następujące opcje jak stwierdzono w dokumencie rozwoju : * "Obiekt geokodera używa usługi sieciowej do konwersji między wartością szerokości i długości geograficznej oraz przyjaznym dla użytkownika oznaczeniem miejsca, czyli zbiorem danych, takich jak ulica, miasto, stan i kraj.Odwrotne geokodowanie to proces przekształcania szerokości i długości geograficznej w oznaczenie miejsca. Geokodowanie forward to proces przekształcania informacji o nazwie miejsca na wartość szerokości i długości geograficznej. Odwróć geokodowanie jest dostępna we wszystkich wersjach iOS ale naprzód geokodowanie jest obsługiwana tylko w iOS 5.0 i nowszych. "*

Teraz można użyć obiektu CLGeocoder.