回答
由於@ raj2raaz已經提到,我們不能通過指定地點的名稱來獲取座標,您必須使用iPhone中的web服務來獲取座標。
http://iphonesdksnippets.com/post/2010/02/15/Get-Coordinates-from-Address.aspx
簡短的回答是否定的,你不能給一個地址並獲得經度/緯度位置。有幾個人編寫了使用不同Web服務的庫,請參閱此答案以獲取詳細信息:Forward geocoding from the iPhone。
我知道你說過你不想使用各種網絡服務,但是,你無法免費獲得一切。有人的CPU週期將不得不進行搜索。他們中的大多數人似乎對大多數應用程序都有可接受的條款。
謝謝您的回答。 :) – Nir 2011-04-15 10:01:00
你可以,如果你包括應用程序的地方數據庫。 [GeoNames](http://download.geonames.org/export/dump/)提供了這些數據。 – 2011-04-15 10:29:22
你是對的。我仍然認爲答案是否定的,因爲這個問題好像是在iPhone SDK中要求一個API。沒有這樣的API存在。您的解決方案不是SDK內的API,而是本地存儲該數據的大型項目。雖然有一些限制。例如,您僅限於搜索Geonames數據庫實際提供的內容。例如,沒有街道名稱。它也可以使應用程序的下載規模很大,除非應用程序具有目標區域。網絡解決方案在許多情況下會更好。 – 2011-04-15 13:13:43
是的,這是可能的,但你必須做一些工作。我目前正在將這項工作放在我的一個項目中。 GeoNames地理數據庫覆蓋所有國家和包含800多萬個地名,可免費下載。我將他們的cites with population over 1,0003.9M zip文件添加到我的項目中。它包含每個城市的長/緯度。我要將每個城市解析爲一個自定義NSObject並將它們加載到Core Data中。
在我的項目中,我沒有做城市名稱搜索,而是找到一個特定的緯度/經度座標的城市。 Haversine formula用於計算球體上兩點之間的距離。這裏是寫在Objective-C和Perl的公式。 我目前解析該數據的進度可以找到here。我仍然有工作要完成。
我想這在技術上是「使用iPhone SDK」,但我將問題解釋爲要求SDK中的API進行地理編碼。這似乎有點不同。但是它可能解決問題,如果「某個地方的名字」是一個相當小的可能性列表,那麼它將工作得很好。 – 2011-04-15 13:18:55
您可以通過調用此方法來獲取座標。此方法需要地址(地點名稱)。
-(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;
}
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
}
}];
@NewTolphone:我覺得我們不能.. – SNR 2011-04-15 09:44:43
是u能得到cordinates如果你這個地方的名字(基本上解決) – Gypsa 2011-04-15 10:52:40