计算iphone中两点之间的距离

Posted

技术标签:

【中文标题】计算iphone中两点之间的距离【英文标题】:Calculate the distance between two points in iphone 【发布时间】:2011-04-23 03:34:33 【问题描述】:

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

示例... 开始:BR1 1LR

航路点:BR2 0LH

航点:BR3 4AY

目的地:BR1 1LR

【问题讨论】:

您需要什么类型的输入? 邮政编码将通过文本字段输入并计算它们之间的距离 【参考方案1】:

是的,你可以计算距离,因为你需要有纬度和经度才能得到距离。Objective C提供了计算点之间距离的方法 这是一个例子......

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

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

【讨论】:

【参考方案2】:

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

首先,我声明了 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];

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;

检查根状态OK后,获取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 指出的那样,事情的运作方式会有所不同。

【讨论】:

距离矩阵 API 仅限在从收到的数据中呈现 Google 地图时使用。所以在这种使用中,将禁止使用这种方法。 是的,你是对的。它确实需要应用程序显示谷歌地图。 developers.google.com/maps/documentation/distancematrix/#Limits【参考方案3】:

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

【讨论】:

如果我从这个 URL 获取 xml 文件,我认为它应该可以工作。只有我不确定哪个是行驶距离。是//腿/步数/距离/值吗?单位是公里还是英里? maps.googleapis.com/maps/api/directions/… 我应该使用哪种类型的 xml 解析?例如:NSXMLParser、libxml2 等 我会将 libxml2 与此一起用于 XPath:cocoawithlove.com/2008/10/…,因为它比 NSXMLParser 更快且内存使用量更少。测量单位在 //leg/step/distance/value 元素中指示,即行驶距离。【参考方案4】:

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

【讨论】:

以上是关于计算iphone中两点之间的距离的主要内容,如果未能解决你的问题,请参考以下文章

iPhone 应用程序:在 Google 地图中计算路径距离

计算由 lat,long 表示的两点之间的距离,精度高达 15 英尺

如何使用 iPhone 计算我们汽车的速度

如何在 iPhone 上查看车速?

使用 google maps API 计算 iphone 上两点之间的行驶时间

在iphone中使用谷歌地图计算两个位置之间的距离