Лучший сервис геокодирования для разработчиков iPhone
Я сделал приложение, которое получает массив адресов из веб-службы, и я хочу сопоставить их. Я знаю, что Apple оставила это в MapKit, включая только обратный геокодер. Мне было интересно, как лучше всего подойти к этой проблеме. Веб-Сервис? Google Maps API (как работают ключи API?)? От cloudmade?
каково Ваше мнение о том, какой сервис является самым быстрым, простым в использовании и дешевым (надеюсь,свободный)?
5 ответов
последняя документация, касающаяся использования ключей API с Google Maps Geocoding service 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 для этого
" класс 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 запросов в день).