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

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

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

5 ответов


последняя документация, касающаяся использования ключей API с Google Maps Geocoding service API.

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

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

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


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

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


используйте API геокодирования Apple для этого

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.
         }
}];

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

}

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