Лучший сервис геокодирования для разработчиков iPhone

Я сделал приложение, которое получает массив адресов из веб-службы, и я хочу их сопоставить. Я знаю, что Apple упустила это в MapKit, включая только обратный геокодер. Мне было интересно, как лучше всего подойти к этой проблеме. Веб-сервис? API Карт Google (как работают ключи API?)? CloudMade?

Как вы думаете, какой сервис самый быстрый, простой в использовании и дешевый (надеюсь, бесплатный)?


person conradev    schedule 05.03.2010    source источник


Ответы (5)


Последняя документация по использованию ключей API с API службы геокодирования Google Maps.

Получить ключ API

В нижней части страницы можно указать, что вы можете использовать общий неограниченный ключ API для тестирования на любой платформе.

Что касается iOS, я думаю, мы можем просто следовать документации Google Maps SDK для iOS.

person Jesse Armand    schedule 03.04.2010
comment
Спасибо большое! Никогда бы не узнал, что вышла новая версия. Наконец-то я нашел хорошее решение. - person conradev; 04.04.2010
comment
Есть ли способ геокодировать несколько адресов в одном запросе? У меня есть множество мест, которые мне нужно нанести на карту, и количество мест может достигать пятидесяти. Я продолжаю получать ошибку для слишком большого количества запросов после десятого - person conradev; 06.04.2010
comment
Я не уверен в этом. Я думаю, вам нужно изучить API Карт в отношении нескольких запросов. Я очень сомневаюсь, что они примут последующие запросы. Но у них может быть метод для приема нескольких адресов. Я предлагаю связаться с Google для вашей проблемы. - person Jesse Armand; 10.04.2010
comment
Обратите внимание, что в соответствии с соглашением с Google вам разрешено использовать API геокодирования только вместе с картой Google. Поскольку сейчас это Apple Maps, вы нарушите соглашение. - person www.jensolsson.se; 25.03.2013
comment
Этот ответ был написан в 2010 году. В тот день Apple Maps не было. - person Jesse Armand; 26.03.2013
comment
Так какой теперь ответ? Какой сервис геокодирования является жизнеспособным вариантом? MapQuest имеет аналогичное ограничение. - person samlandfried; 26.11.2018

IANAL, но если приложение, которое вы создаете, будет бесплатным, то я считаю, что вы можете бесплатно использовать Google Maps API. Он ограничен 15 000 запросов геокодирования в день, но, согласно документам, это связано с IP, а не с ключом API. Вы можете получить ключ API немедленно — одобрение не требуется. (Если ваше приложение не будет доступно бесплатно, вам придется подписаться на Google Maps Premier.)

GMaps теперь имеет основанный на REST API геокодирования через HTTP (он использовал чтобы быть, вам пришлось использовать их JavaScript API, что было проблемой для iPhone). Он может возвращаться в формате JSON, который легко анализировать с помощью TouchJSON, если вам нужно дополнительные данные или CSV, что будет еще проще, если все, что вам нужно, это широта/долгота. Итак, вы можете просто создать объект, соответствующий Протокол MKAnnotation, который извлечет JSON/CSV из API с помощью NSURLConnection или ASIHTTPRequest, проанализирует его и вернет переменную Point в качестве свойства coordinate, а также при необходимости создаст MapView.

person Brock Batsell    schedule 08.03.2010
comment
Это не совсем так с операторами мобильной связи, они часто используют шлюзы/прокси-серверы, которые в конечном итоге обеспечивают один и тот же IP-адрес для тысяч пользователей, что в густонаселенных городских районах, таких как мой город, Париж, Франция, превышает ограничения Google. ... и около 17:00 503 ошибки у многих пользователей... - person Vincent Guerci; 03.04.2011

Используйте Apple Geocoding API для этого

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/LocationAwarenessPG/UsingGeocoders/UsingGeocoders.html

«Класс CLGeocoder предоставляет услуги для преобразования между координатой (заданной как широта и долгота) и удобным для пользователя представлением этой координаты. Удобное для пользователя представление координат обычно состоит из информации об улице, городе, штате и стране. соответствует заданному местоположению, но может также содержать соответствующие достопримечательности, ориентиры или другую идентифицирующую информацию.Объект геокодировщика – это единичный объект, который работает с сетевым сервисом для поиска информации о метках для заданных координат. ценность.

Чтобы использовать объект геокодера, создайте его и вызовите один из его методов прямого или обратного геокодирования, чтобы начать запрос. Запросы обратного геокодирования принимают значение широты и долготы и находят читаемый пользователем адрес. Запросы прямого геокодирования принимают читаемый пользователем адрес и находят соответствующие значения широты и долготы. Запросы на прямое геокодирование также могут возвращать дополнительную информацию об указанном местоположении, например, достопримечательность или здание в этом местоположении. Для обоих типов запросов результаты возвращаются с помощью объекта CLPlacemark. В случае запросов прямого геокодирования могут быть возвращены несколько объектов меток, если предоставленная информация дает несколько возможных местоположений».

CLGeoCoder geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:@"1 Infinite Loop"
     completionHandler:^(NSArray* placemarks, NSError* error){
         for (CLPlacemark* aPlacemark in placemarks)
         {
             // Process the placemark.
         }
}];
person www.jensolsson.se    schedule 25.03.2013
comment
Спасибо за подсказку, мне гораздо удобнее использовать CLGeoCoder вместо стороннего подхода Google Maps! - person Raffael; 31.05.2013

Я использую «Restful WebService» для обратного геокодирования с использованием Google Maps, и как только я получаю координаты, я сохраняю их в SQLite для дальнейшего использования. Служба возвращает строку JSON, которую я позже анализирую в iPhone.

Что-то типа:

// Initialize call to REST Webservice
- (void) initCall
{
    // Service
    RESTClient *client = [[[RESTClient alloc] initWithDelegate:self] autorelease];
    NSString *serviceHost = @"http://www.site.com/service/maps";
    [client get:serviceHost];
    [serviceHost release];
}

- (void)RESTRequestDidSucceed:(RESTClient*)sender
{

        // Search
   NSString *data = [[[NSString alloc] init] autorelease];
   data = [[NSString alloc] initWithData:sender.receivedData encoding:NSUTF8StringEncoding];

   // Now you have the DATA in and NSString which you can pass as an argument to a method
   // something like

}
person Michael D. Irizarry    schedule 05.03.2010

По данным Google и Yahoo, их соответствующие службы геокодирования НЕ допускают «хранения для будущего использования». Если я не ошибаюсь, вы не можете хранить результаты запроса в любой форме базы данных. В противном случае было бы очень легко просто использовать Google (сейчас 50 000 запросов в день).

person ultrageek    schedule 23.09.2010