Интеграция API Карт Google в приложение для iPhone

Обновление: iPhone SDk 3.0 теперь рассматривает вопрос здесь, однако NDA предотвращает любое углубленное обсуждение. Войдите в iPhone Dev Center, если вам нужна дополнительная информация.

Хорошо, я должен признать, что я немного потерялся здесь.

Мне довольно удобно с Cocoa, но у меня проблемы с сбором бит javascript, необходимый для решения этой проблемы.

Я пытаюсь отправить запрос в Google для обратного геокода.

Я просмотрел документацию Google, которую я просмотрел здесь: http://code.google.com/apis/maps/documentation/index.html http://code.google.com/apis/maps/documentation/geocoding/

Даже после грубого чтения у меня отсутствует базовая концепция:

Как мне поговорить с Google? В некоторых примерах они показывают URL-адрес, отправляемый в google (что кажется достаточно простым), но в других они показывают javascript. Кажется, что для обратного геокодирования запрос может быть сложнее, чем отправить URL с некоторыми параметрами (но я надеюсь, что я ошибаюсь).

Может ли кто-нибудь указать мне правильный способ сделать запрос? (В objective-C, поэтому я могу обернуть вокруг него голову)

Ответы

Ответ 1

UPDATE - iPhone 0.3 включает MapKit, который, мы надеемся, будет значительно быстрее, чем использование JS API. В рекламном ролике говорится, что он будет включать обратное геокодирование.

Вы не можете сделать запрос непосредственно в objective-C, по крайней мере, не в соответствии с условиями API Google. API Google написан в Javascript. Вы можете использовать мост objective-c для JS, как это делает Компонент Google Maps, но это действительно не решает проблему - re все еще делает звонки JS!

К сожалению, это означает, что вы a) необходимо использовать веб-просмотр b) нужно использовать JS API, который медленный... сравните с приложением Google Maps, в котором используется совершенно другой протокол OTA (попробуйте пакет, обнюхивающий его).

Компонент Google Maps, однако, полезный учебник о том, как сделать простые вызовы API.

Ответ 2

Я создал SVGeocoder, простой передний и класс геокодирования для iOS. Он использует API геокодирования Google, возвращает объекты SVPlacemark (подкласс MKPlacemark с свойством coordinate) и использует блоки.

Вот как вы геокодируете адресную строку:

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

Вы также можете поменять геокод на координату следующим образом:

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

Ответ 3

Самый простой способ получить карту Google с помощью Cocoa - использовать "API статических карт". На практике вам необходимо подготовить NSURL, который вы используете для связи с Google. Вы возвращаете свою карту как NSData, которую вы преобразовываете в NSImage. Обратите внимание, что вы можете делать как геокодирование, так и обратное геокодирование. Вы также можете вставлять маркеры на карту. Однако вы потеряете все элементы управления, к которым у вас есть доступ, если вы используете их JavaScript API.

Взгляните на их справочник:

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

Ответ 4

Теперь, когда Apple выпустит API MapKit для ОС 3.0, я думаю, на ваш вопрос был дан ответ. Посмотрев документы API, я вижу большой потенциал! Мне все же хотелось бы видеть обратную геокодирование webservice от Google, но Yahoo сделает это тем временем.

Ответ 5

Для вашей информации: API обратного геокодирования от Google для запросов XML не является общедоступным, поэтому его использование запрещено. Единственный законный способ - это использовать JavaScript-API, который, как вам выяснили, сложнее сделать в Cocoa, чем просто отправить HTTP-запрос.

Альтернативы: обратное геокодирование с помощью простых запросов XML/JSON также доступно из Geonames или Yahoo.

Ответ 6

Поскольку iOS5 имеет следующие параметры, как указано в документе разработки: * "Объект геокодирования использует сетевую услугу для преобразования значений широты и долготы и удобной метки, которая представляет собой набор данных, таких как информация об улицах, городах, штатах и ​​стране. Обратное геокодирование - это процесс преобразования широта и долгота в метку. Переносное геокодирование - это процесс преобразования информации о названии места в значение широты и долготы. Обратное геокодирование поддерживается во всех версиях iOS, но прямое геокодирование поддерживается только в iOS 5.0 и более поздних версиях. *

Теперь вы можете использовать объект CLGeocoder.

Ответ 8

Фактически, я не имел в виду обратное геокодирование как "перевод точки в удобочитаемый для человека адрес", а скорее визуализацию точки с помощью Карты Google (которая также может, в зависимости от уровня точности, показывать удобочитаемый адрес). Это основная функциональность, которая требовалась.

На практике я просто хотел предложить API статических карт как чистый и быстрый способ:

1), учитывая координаты, полученные с помощью GPS-датчика iPhone, получить карту Google, отображающую точку

2), указав адрес, преобразуйте его в соответствующие географические координаты, а затем используйте координаты для извлечения Карты Google, отображающей адрес, указанный

Оба возможны с использованием простых NSURL, связанных с staticmap и geo-сервисами.

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

передача конечно необходимых параметров для обеспечения подходящей строки запроса.

С уважением

Ответ 9

Большая проблема, конечно же, в том, что лицензионное соглашение как в отношении google, так и yahoo вы не можете использовать этот API в "коммерческих приложениях". будет ненавидеть публиковать приложение в магазине приложений только для того, чтобы оно было снято и подано в суд на yahoo или google. При чтении карты iPhone 3.0 api и связанной лицензии это не упоминается, но если вы хотите, чтобы приложение запускалось на телефонах, которые не обновлялись....

Есть ли ответ на этот вопрос, который не станет проблемой?

Ответ 10

http://blog.cloudmade.com/2009/06/12/how-to-get-forward-geocoding-in-iphone-mapkit/

CloudMade, по-видимому, является провайдером карт/местоположений с открытым исходным кодом. В приведенном выше сообщении в блоге перечислены подробности о том, как продвигать геокодирование.