2011-04-15 50 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 
    } 
}]; 
相关问题