Рассчитать расстояние между двумя точками в iphone - PullRequest
3 голосов
/ 23 апреля 2011

Я создаю приложение, которое требует от пользователя ввода двух мест (почтовых индексов). Мое приложение будет рассчитывать расстояние между этими двумя точками и выводить результат. У пользователя есть возможность добавлять Way-Points. Я думаю, что мне придется использовать API Google Maps и получить XML-файл с результатом, а затем проанализировать XML-файл. Может кто-нибудь помочь мне, потому что я не уверен, как это сделать. Цените всю помощь.

Пример ... Начало: BR1 1LR

Точка: BR2 0LH

Путевая точка: BR3 4AY

Назначение: BR1 1LR

Ответы [ 4 ]

3 голосов
/ 23 апреля 2011

Да, вы можете рассчитать расстояние, для этого вам нужно иметь широту и долготу, чтобы получить расстояние. Цель C предоставляет метод для вычисления расстояния между точками вот пример ......

float distance =[mUserCurrentLocation distanceFromLocation:location1]/1000;

Это даст вам расстояние в километрах.

2 голосов
/ 05 октября 2011

Я знаю, что это действительно поздно, но я публикую свое решение на этот случай, если кому-то это понадобится.

Во-первых, я объявил URL (тот, который вызывает google maps api)

#define DST_API @"http://maps.googleapis.com/maps/api/distancematrix/xml?origins=%@&destinations=%@&units=%@&sensor=false"

Далее я создал строку, содержащую этот URL:

NSString *URL = [NSString stringWithFormat:DST_API, source, destination, units];

Где источником, местом назначения являются строки, содержащие начальную и конечную точки.единицы могут быть @ "имперскими" или @ "метрическими".Теперь, когда у меня был URL, я бы вернул строку XML.Чтобы разобрать это, я использовал TBXML.Всегда идет большая дискуссия о том, какой XML Parser использовать.Я использовал TBXML , поскольку это было легко, и это самый быстрый .

TBXML *directionsParser = [[TBXML alloc] initWithURL:[NSURL URLWithString:URL]];

// Check if the Overall status is OK
TBXMLElement *root = directionsParser.rootXMLElement;
TBXMLElement *element = [TBXML childElementNamed:@"status" parentElement:root]; 
NSString *value = [TBXML textForElement:element];
if ([value caseInsensitiveCompare:@"OK"] != NSOrderedSame) {
    [directionsParser release];
    return result;
}

После проверки состояния root в порядке, затем получите результат для выражения XPath: // строка / элемент / расстояние / значение

element = [TBXML childElementNamed:@"row" parentElement:root];
element = [TBXML childElementNamed:@"element" parentElement:element];
element = [TBXML childElementNamed:@"status" parentElement:element];
value = [TBXML textForElement:element];

// Check if the Element status is OK
if ([value caseInsensitiveCompare:@"OK"] != NSOrderedSame) {
        [directionsParser release];
    return result;
}

element = element->parentElement;

element = [TBXML childElementNamed:@"distance" parentElement:element];

//Note if you want the result as text, replace 'value' with 'text'
element = [TBXML childElementNamed:@"value" parentElement:element];

NSString *result = [TBXML textForElement:element];

[directionsParser release];
//Do what ever you want with result

Если кто-то хочет, чтобы URL содержал путевые точки, то здесь это

#define DIR_API @"http://maps.googleapis.com/maps/api/directions/xml?origin=%@&destination=%@&waypoints=%@&units=%@&sensor=false"

Но для использования путевых точек,как указал Джано, все работает немного по-другому.

1 голос
/ 23 апреля 2011

Если вы хотите узнать расстояние до дороги, вам нужно спросить Google, а затем проанализировать получившийся XML , используя синтаксический анализатор XML и выражение XPath //leg/step/distance/value, которое даст вам все расстояние, которое вы получите. должен суммировать. См. this о разборе xml и использовании выражений XPath.

0 голосов
/ 23 апреля 2011

DistanceFromLocation: метод даст вам абсолютное расстояние между любыми двумя точками CLLocation, а не расстояние вождения.Для этого вы должны использовать API Карт Google, как и предполагали.

...