通过在iPhone中给出地名来获取坐标

时间:2011-04-15 09:41:08

标签: iphone cocoa-touch coordinates cllocationmanager

是否可以通过在iPhone中提供地点名称来获取坐标?我不想使用任何Web服务,因为它们没有什么限制。我可以使用iPhone SDK吗?

提前致谢。

5 个答案:

答案 0 :(得分:0)

正如 @ raj2raaz 所提到的,我们无法通过指定地点的名称来获取坐标,您必须在iPhone中使用Web服务来获取坐标。

http://iphonesdksnippets.com/post/2010/02/15/Get-Coordinates-from-Address.aspx

答案 1 :(得分:0)

简短的回答是否定的,你不能给出一个地址并获得经度/纬度位置。有些人编写了使用不同Web服务的库,有关详细信息,请参阅此答案:Forward geocoding from the iPhone

我知道你说你不想使用各种网络服务,但是,你不能免费获得所有东西。有人的CPU周期将不得不进行搜索。在我看来,大多数人都有适合大多数应用程序的条款。

答案 2 :(得分:0)

是的,这是可能的,但你必须做一些工作。我目前正在将这项工作投入到我的一个项目中。 GeoNames地理数据库涵盖所有国家/地区,包含800多万个可免费下载的地名。我正在将cites with population over 1,000 3.9M压缩文件添加到我的项目中。它包含每个城市的长/纬。我将把每个城市解析成一个自定义的NSObject并将它们加载到Core Data

在我的项目中,我将找到一个特定纬度/经度坐标的壁橱城市,而不是进行城市名称搜索。 Haversine formula用于计算球体上两点之间的距离。以下是Objective-CPerl中的公式。 我可以找到解析该数据的当前进度here。我还有工作要做。

答案 3 :(得分: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
    }
}];

答案 4 :(得分:-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;

}