【问题标题】:Forward geocoding from the iPhone从 iPhone 转发地理编码
【发布时间】:2010-11-11 13:01:08
【问题描述】:

鉴于今天的 mapkit 不提供前向地理编码功能,任何人都可以提供有关我如何使用搜索栏从今天用户输入的地址返回纬度和经度坐标的帮助。如果有人可以提供示例代码,那就太好了。

【问题讨论】:

    标签: iphone ios geolocation geocoding


    【解决方案1】:

    我在 github 上的 iOS5 CoreLocation 框架中使用 CLGeocoder 进行了一些正向和反向地理编码的小工作,希望对您有所帮助。 https://github.com/Mangesh20/geocoding

    【讨论】:

      【解决方案2】:

      我为 Google 的地理编码服务器创建了转发地理编码 API。看看我的博文: http://blog.sallarp.com/ipad-iphone-forward-geocoding-api-google/

      【讨论】:

      • 需要更新到新的 Google Geocoding API(例如,现在不需要 API 密钥)。除此之外,做得很好。谢谢@Merrimack。 code.google.com/apis/maps/documentation/geocoding
      • 感谢 DenTheMan,但是 API 确实支持 V2 和 V3(最新版本没有 API 密钥)。从第一个版本开始就是这样。
      • 答案中的链接已失效 - 404 Not Found
      【解决方案3】:

      【讨论】:

      • 对于 iOS6,这可能是唯一可用的解决方案(可能是 Yahoo 除外),因为我怀疑 Google 是否会满意您在 Apple 地图上覆盖 Google 地理编码数据...
      • @KendallHelmstetterGelner 我认为谷歌会很好,但苹果?...也许不是。
      • 是 Google 的 TOS 阻止了它。 developers.google.com/maps/documentation/geocoding/#Limits(非谷歌地图上没有显示谷歌地理编码数据)。 Apple 不在乎您从哪里获取覆盖在地图上的事物的数据。既然 Apple 没有使用 Google 来获取地图数据,那么您如何使用 MapKit 就没有任何限制了。
      【解决方案4】:

      我创建了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;
      

      【讨论】:

      • 对用户的重要提示:如果您使用 Google Geocoding API,您必须在地图上显示结果。
      • 代码很棒,但为什么要在 SVGeocoder 中导入 AddressBook 框架?
      • @luyuan 因为 MKPlacemark 需要它作为地址组件(我认为 iOS 5 中的 CLPlacemark 不再是这种情况)
      • @samvermette 感谢您的回复:) 是的,我使用 IOS 5
      • 现在对 iOS 开发者完全没用:来自 Google TOS:“注意:Geocoding API 只能与 Google 地图一起使用”developers.google.com/maps/documentation/geocoding/#Limits
      【解决方案5】:

      这里还有一个框架:https://github.com/tylerhall/CoreGeoLocation

      来自文档的评论: Objective GeoCoder 和 Reverse Geocoder 主要围绕 Yahoo 的 Geocoding 服务或 Google 的 Geo API。

      【讨论】:

      • 对用户的重要提示:如果您使用 Google Geocoding API,您必须在地图上显示结果。雅虎似乎没有这个限制。
      • 您必须在 GOOGLE 地图上显示结果。重要区别。
      【解决方案6】:

      这是当前版本的 MapKit 的一个已知问题。提交错误报告并欺骗 #6628720,以便他们优先修复它。

      同时,有来自Google MapsYahoo PlacemakerCloudmade 的转发地理编码 API。

      【讨论】:

        【解决方案7】:

        MapKit 中没有这样的功能。您能做的最好的事情就是调用第三方网络服务。谷歌有一些 API 可以做到这一点,我认为雅虎也有。两者都有商业用途的限制,所以请阅读协议。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-12-20
          • 2012-08-11
          • 1970-01-01
          • 2012-11-02
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          相关资源
          最近更新 更多