计算iphone中两点之间的距离

时间:2011-04-23 03:34:34

标签: iphone xcode google-maps distance

我正在创建一个需要用户输入两个地方(邮政编码)的应用程序。我的应用程序将计算这两点之间的行驶距离和输出结果。用户可以选择添加Way-Points。 我想我必须使用谷歌地图API并获得带有结果的xml文件,然后解析xml文件。任何人都可以帮助我,因为我不知道该怎么做。 感谢所有帮助。

...例 开始:BR1 1LR

航点:BR2 0LH

Waypoint:BR3 4AY

目的地:BR1 1LR

4 个答案:

答案 0 :(得分:3)

是的,您可以计算距离,因为您需要有纬度和经度来获得距离。目标C提供了计算点之间距离的方法 这是一个例子......

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

这将为您提供以公里为单位的距离。

答案 1 :(得分:2)

我知道这已经很晚了,但是如果有人需要,我会发布我的解决方案。

首先,我声明了URL(调用google maps api的URL)

#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];

其中source,destination是包含起点和终点的字符串。单位可以是@“imperial”或@“metric”。 现在我有了URL,我会找回一个xml字符串。为了解析这个问题,我使用了TBXML。关于使用哪种XML Parser总是存在很大争议。我使用TBXML因为它很容易,而且是fastest

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

检查根状态是否正常后,获取XPath表达式的结果:// row / element / distance / value

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"

但是,使用方式点,事情的工作方式有点不同,正如Jano指出的那样。

答案 2 :(得分:1)

如果您想要道路距离,您需要向Google询问,然后使用XML解析器和XPath表达式//leg/step/distance/value解析resulting XML,这将为您提供所有距离,您将拥有总结。请参阅this有关解析xml和使用XPath表达式的信息。

答案 3 :(得分:0)

distanceFromLocation:方法将为您提供任意两个CLLocation点之间的绝对距离,而不是行驶距离。为此,您必须使用您怀疑的Google Maps API。