Интеграция 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.
Ответ 7
Также попробуйте взглянуть на компонент Google Maps.
Ответ 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, по-видимому, является провайдером карт/местоположений с открытым исходным кодом. В приведенном выше сообщении в блоге перечислены подробности о том, как продвигать геокодирование.
Ответ 11
Если вы ищете геокодирование вперед, проверьте мой API-интерфейс будущего геокодирования для карт Google: http://blog.sallarp.com/ipad-iphone-forward-geocoding-api-google/