计算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 英尺