Лучший сервис геокодирования для разработчиков iPhone - PullRequest
10 голосов
/ 05 марта 2010

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

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

Ответы [ 5 ]

5 голосов
/ 09 марта 2010

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

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

5 голосов
/ 04 апреля 2010

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

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

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

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

4 голосов
/ 25 марта 2013

Используйте 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.
         }
}];
1 голос
/ 05 марта 2010

Я использую «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

}
0 голосов
/ 24 сентября 2010

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

...