2011-04-23 131 views
4

我正在創建一個需要用戶輸入兩個地方(郵政編碼)的應用程序。我的應用程序將計算這兩個點之間的駕駛距離並輸出結果。用戶可以選擇添加Way-Points。 我想我將不得不使用谷歌地圖API並獲取結果的XML文件,然後解析XML文件。任何人都可以幫助我,因爲我不知道如何做到這一點。 感謝所有幫助。計算兩個點之間的距離iphone

例... 開始:BR1 1LR

航點:BR2 0LH

航點:BR3 4AY

目的地:BR1 1LR

+0

你需要什麼類型的輸入? – Jaba 2011-04-23 03:59:25

+0

郵政編碼將通過文本字段輸入mand將會計算它們之間的距離 – SEG 2011-04-23 13:17:21

回答

3

我知道這真的很晚,但我發佈我的解決方案,以防萬一需要它。

首先,我聲明瞭URL(調用谷歌地圖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]; 

凡來源,目的地是包含字符串起點和終點。單位可以是@「英制」或@「公制」。 現在,我有了網址,我會找回一個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表達式的結果://行/元件/距離/值

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指出。

+0

距離矩陣API僅限於從收到的數據中呈現Google地圖時才使用。所以在這個使用中,將禁止使用這種方法。 – 2015-03-28 02:56:05

+0

是的,你是對的。它確實需要應用程序顯示谷歌地圖。 https://developers.google.com/maps/documentation/distancematrix/#Limits – SEG 2015-05-07 09:45:00

3

是的,你可以計算出距離,對於你需要有經緯度來得到距離。目標C提供了計算點間距的方法 這裏是例子......

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

這將爲您提供以公里爲單位的距離。

+0

那麼這將是兩個位置點之間親愛的..... – Sabby 2011-04-25 04:34:02

0

distanceFromLocation:方法將爲您提供任意兩個CLLocation點之間的絕對距離,而不是駕駛距離。爲此,您必須按照您的懷疑使用Google Maps API。

1

如果您想要道路距離,您需要詢問Google,然後使用XML解析器和XPath表達式//leg/step/distance/value解析resulting XML,這將爲您提供所有距離,您將必須求和。有關解析xml和使用XPath表達式,請參閱this

+0

如果我從這個URL得到xml文件,我認爲它應該工作。只有我不確定哪個是駕駛距離。是/腿/步/距離/價值?它會以千米或英里爲單位嗎? http://maps.googleapis.com/maps/api/directions/xml?origin=Br11LR&destination=BR20LH&waypoints=BR34AY&sensor=false 我應該使用哪種類型的XML解析?例如:NSXMLParser,libxml2等 – SEG 2011-04-25 04:30:12

+0

我會用這個XPath的libxml2:http://cocoawithlove.com/2008/10/using-libxml2-for-parsing-and-xpath.html,因爲它更快速和更低的內存使用NSXMLParser測量單位在行程/行程/距離/數值元素中指示,即行駛距離。 – Jano 2011-04-26 07:11:07

相關問題