Xcode iOS 4.2.1 - >提供地图查看地址以显示引脚?

时间:2011-01-24 01:02:33

标签: iphone ios mkmapview

  

可能重复:
  Forward Geocode Example using CLGeocoder

我有一个充满名字和地址的pl ..我希望我的iOS应用程序在地图上显示一个带有他所选人员地址的图钉。我可以将地址导入地图视图并获取引脚吗?如何??谢谢。

3 个答案:

答案 0 :(得分:0)

使用CLGeocoder类将地址转换为纬度/经度坐标:

Forward Geocode Example using CLGeocoder

您拥有的地址越准确,结果就越好,因此使用精确的地址,您应该获得非常准确的地址。

答案 1 :(得分:0)

另一种选择是使用Google的地理编码网络服务,只需将地址字符串传递给此功能,您将获得一个包含纬度和范围的CLLocationCoordinate2D。经度。

现在它抓住第0个索引处的位置,这是最接近的匹配结果。注销结果以查看Google的JSON响应。

- (CLLocationCoordinate2D) geoCodeUsingAddress:(NSString *)address
{
    NSString *esc_addr =  [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=true&address=%@", esc_addr];
    CLLocationCoordinate2D center;


    NSString *result = [NSString stringWithContentsOfURL:[NSURL URLWithString:req] encoding:NSUTF8StringEncoding error:NULL];
    if (result)
    {
        //NSLog(@"LOC RESULT: %@", result);
        NSError *e;
        NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData: [result dataUsingEncoding:NSUTF8StringEncoding]
                                                                   options: NSJSONReadingMutableContainers
                                                                     error: &e];
        NSArray *resultsArray = [resultDict objectForKey:@"results"];

        if(resultsArray.count > 0)
        {
            resultDict = [[resultsArray objectAtIndex:0] objectForKey:@"geometry"];
            resultDict = [resultDict objectForKey:@"location"];
            center.latitude = [[resultDict objectForKey:@"lat"] floatValue];
            center.longitude = [[resultDict objectForKey:@"lng"] floatValue];
        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"No Results Found" message:@"No locations were found using, please try again." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
            [alert show];
        }

        //goes through each result
        /*for(NSDictionary *dict in resultsArray)
        {
            resultDict = [dict objectForKey:@"geometry"];
            resultDict = [resultDict objectForKey:@"location"];
        }*/
    }
    return center;
}

答案 2 :(得分:-1)

这就是所谓的前向地理编码,并没有内置的API来为您执行此操作。您需要使用外部服务,您使用的服务实际上取决于您的应用程序。

我已经使用了Google的服务。 http://code.google.com/apis/maps/documentation/geocoding/

这是一个非常简单的API,但根据您的应用许可证有限制。我知道还有其他一些服务,但我会将其作为练习留给你。