鉴于 mapkit 今天不提供前向地理编码功能,任何人都可以提供有关我如何使用搜索栏从今天用户输入的地址返回纬度和经度坐标的帮助。如果有人可以提供示例代码,那就太好了。
7 回答
iOS 5 现在允许转发地理编码:
我希望这有帮助!
我为 Google 的地理编码服务器创建了一个转发地理编码 API。查看我的博文:http: //blog.sallarp.com/ipad-iphone-forward-geocoding-api-google/
我创建了SVGeocoder ,这是一个用于 iOS的简单正向和反向地理编码器类。它也使用 Google Geocoding API 并返回一个MKPlacemark。
这是您对地址字符串进行地理编码的方式:
NSString *addressString = @"3245 St-Denis, Montreal"
SVGeocoder *geocodeRequest = [[SVGeocoder alloc] initWithAddress:addressString];
[geocodeRequest setDelegate:self];
[geocodeRequest startAsynchronous];
然后你反向地理编码一个 CLLocationCoordinate2D 对象,如下所示:
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(45.54181, -73.62928);
SVGeocoder *rGeocoderRequest = [[SVGeocoder alloc] initWithCoordinate:coordinate];
[rGeocoderRequest setDelegate:self];
[rGeocoderRequest startAsynchronous];
SVGeocoderDelegate 提供以下两种方法:
- (void)geocoder:(SVGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark;
- (void)geocoder:(SVGeocoder *)geocoder didFailWithError:(NSError *)error;
我在 github 上的 iOS5 CoreLocation 框架中使用 CLGeocoder 进行了一些关于正向和反向地理编码的小工作,希望对您有所帮助。 https://github.com/Mangesh20/geocoding
这是当前版本的 MapKit 的一个已知问题。提交错误报告并欺骗 #6628720,以便他们将修复它作为优先事项。
与此同时,还有来自Google Maps、Yahoo Placemaker或Cloudmade的转发地理编码 API 。
这里还有一个框架:https ://github.com/tylerhall/CoreGeoLocation
来自文档的评论: 一个 Objective GeoCoder 和 Reverse Geocoder 主要围绕 Yahoo 的 Geocoding 服务或 Google 的 Geo API。
MapKit 中没有这样的功能。您能做的最好的事情就是调用第三方网络服务。谷歌有一些 API 可以做到这一点,我认为雅虎也有。不过,两者都对商业用途有限制,因此请阅读协议。