我正在创建一个需要用户输入两个地方(邮政编码)的应用程序。我的应用程序将计算这两点之间的行驶距离和输出结果。用户可以选择添加Way-Points。 我想我必须使用谷歌地图API并获得带有结果的xml文件,然后解析xml文件。任何人都可以帮助我,因为我不知道该怎么做。 感谢所有帮助。
...例 开始:BR1 1LR
航点:BR2 0LH
Waypoint:BR3 4AY
目的地:BR1 1LR
答案 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。