2011-04-15 83 views
1

可以通過在iPhone中提供地點名稱來獲取座標嗎?我不想使用任何Web服務,因爲它們沒有什麼限制。我可以使用iPhone SDK嗎?通過在iphone中提供地點名稱獲取座標

在此先感謝。

+0

@NewTolphone:我覺得我們不能.. – SNR 2011-04-15 09:44:43

+0

是u能得到cordinates如果你這個地方的名字(基本上解決) – Gypsa 2011-04-15 10:52:40

回答

0

簡短的回答是否定的,你不能給一個地址並獲得經度/緯度位置。有幾個人編寫了使用不同Web服務的庫,請參閱此答案以獲取詳細信息:Forward geocoding from the iPhone

我知道你說過你不想使用各種網絡服務,但是,你無法免費獲得一切。有人的CPU週期將不得不進行搜索。他們中的大多數人似乎對大多數應用程序都有可接受的條款。

+0

謝謝您的回答。 :) – Nir 2011-04-15 10:01:00

+0

你可以,如果你包括應用程序的地方數據庫。 [GeoNames](http://download.geonames.org/export/dump/)提供了這些數據。 – 2011-04-15 10:29:22

+0

你是對的。我仍然認爲答案是否定的,因爲這個問題好像是在iPhone SDK中要求一個API。沒有這樣的API存在。您的解決方案不是SDK內的API,而是本地存儲該數據的大型項目。雖然有一些限制。例如,您僅限於搜索Geonames數據庫實際提供的內容。例如,沒有街道名稱。它也可以使應用程序的下載規模很大,除非應用程序具有目標區域。網絡解決方案在許多情況下會更好。 – 2011-04-15 13:13:43

0

是的,這是可能的,但你必須做一些工作。我目前正在將這項工作放在我的一個項目中。 GeoNames地理數據庫覆蓋所有國家和包含800多萬個地名,可免費下載。我將他們的cites with population over 1,0003.9M zip文件添加到我的項目中。它包含每個城市的長/緯度。我要將每個城市解析爲一個自定義NSObject並將它們加載到Core Data中。

在我的項目中,我沒有做城市名稱搜索,而是找到一個特定的緯度/經度座標的城市。 Haversine formula用於計算球體上兩點之間的距離。這裏是寫在Objective-CPerl的公式。 我目前解析該數據的進度可以找到here。我仍然有工作要完成。

+0

我想這在技術上是「使用iPhone SDK」,但我將問題解釋爲要求SDK中的API進行地理編碼。這似乎有點不同。但是它可能解決問題,如果「某個地方的名字」是一個相當小的可能性列表,那麼它將工作得很好。 – 2011-04-15 13:18:55

-1

您可以通過調用此方法來獲取座標。此方法需要地址(地點名稱)。

-(CLLocationCoordinate2D) addressLocation:(NSString *)addrss { 
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv", 
          [addrss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]]; 
    NSArray *listItems = [locationString componentsSeparatedByString:@","]; 

double latitude = 0.0; 
double longitude = 0.0; 

if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) { 
    latitude = [[listItems objectAtIndex:2] doubleValue]; 
    longitude = [[listItems objectAtIndex:3] doubleValue]; 
} 
else { 
    //Show error 
} 
CLLocationCoordinate2D location; 
location.latitude = latitude; 
location.longitude = longitude; 

return location; 

}

+0

他確實*不*想要使用任何互聯網來獲得答案。 – 2011-04-15 10:59:56

+0

嘿珍妮弗。你有沒有試過這段代碼?它工作嗎? – Nir 2011-04-15 12:04:26

+0

@黑色青蛙謝謝。我會試一試你的建議。 – Nir 2011-04-15 12:08:41

0
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
[geocoder geocodeAddressString:YOUR_LOCATION completionHandler:^(NSArray* placemarks, NSError* error)  
{ 
    NSLog(@"completed"); 
    if (error) 
    { 
     NSLog(@"error = %@", error); 
    } 
    else 
    { 
     //Here you get information about the place in placemarks array 
    } 
}];