Веб-сервис для названия местоположения с использованием широты и долготы - PullRequest
1 голос
/ 13 мая 2010

У меня есть приложение для iPhone, где мне нужно узнать текущее местоположение (с точки зрения названия города или, возможно, адреса). Но я не смог этого сделать. Я могу узнать текущую широту и долготу. Существует ли какой-либо веб-сервис (желательно бесплатный), который может вернуть мне текущее название местоположения, если я предоставлю широту и долготу?

Ответы [ 3 ]

3 голосов
/ 13 мая 2010

Функция, которую вы ищете, называется Обратное геокодирование .

Здесь - это список веб-сервисов, которые предоставляют эту функцию.

Пара самых популярных: Geonames.org , API Google Maps Services и Batchgeo.com для пакетной обработки нескольких координат.

1 голос
/ 13 мая 2010

Если вы нацелены на iPhone OS 3.0 или выше, вы можете использовать MKReverseGeocoder, который является частью MapKit Framework. Документы для разработчиков включают пример проекта. Описание класса MKReverserGeocoder

0 голосов
/ 16 мая 2010

MKReverseGeocoder - отличный класс, но иногда может возвращать ошибку: Ошибка домена = PBRequesterErrorDomain Code = 6001 "Операция не может быть завершена. (PBRequesterErrorDomain Ошибка 6001.)

Предложение Лувьера, приведенное выше, - отличное место для начала. Именно это я и сделал в качестве примера, используя обратный геокодер Google HTTP. Вот моя реализация класса GoogleReverseGeocoder, который я написал. Полное объяснение того, как его использовать, можно найти ЗДЕСЬ .

// Send Google A Request
NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%lf,%lf&output=csv&sensor=false",self.locationToGeocode.coordinate.latitude,self.locationToGeocode.coordinate.longitude];
NSURL *urlFromString = [NSURL URLWithString:urlString];
NSStringEncoding encodingType = NSUTF8StringEncoding;
NSString *reverseGeoString = [NSString stringWithContentsOfURL:urlFromString encoding:encodingType error:nil];

// Parse Out Response
NSArray *listItems = [reverseGeoString componentsSeparatedByString:@","];
NSArray *tempAddressArray = [[listItems objectAtIndex:2] componentsSeparatedByString:@"\""];
NSArray *tempCountryArray = [[listItems objectAtIndex:[listItems count]-1] componentsSeparatedByString:@"\""];

// Did Google Find Address? 200 is yes
if ([[listItems objectAtIndex:0] intValue] == 200)
{
    // Set Class Member Variables
    [self setGoogleReturnDidFindAddress:YES];
    [self setGoogleReturnAddress:[tempAddressArray objectAtIndex:[tempAddressArray count]-1]];
    [self setGoogleReturnCountry:[tempCountryArray objectAtIndex:0]];
    [self setGoogleReturnCode:[[listItems objectAtIndex:0] intValue]];
    [self setGoogleReturnAccuracy:[[listItems objectAtIndex:1] intValue]];

} else if ([[listItems objectAtIndex:0] intValue] > 600)
{
    [self setGoogleReturnDidFindAddress:NO];
}
...