地理编码API vs 地理编码器

5
在我的应用程序中,我需要使用地理编码,但我不太清楚要使用哪种方法。直到昨天,我将参数添加到URL maps.googleapis.com/maps/api/geocode/json?address=myparameter&sensor=false,但Google封锁了我的请求一天,导致应用程序崩溃,因为它没有返回地理编码请求的任何结果。
现在,我正在使用执行相同操作的Geocoder类,并且我已经看到您可以创建和使用Geocoding的API密钥。
您推荐使用哪种方法?除请求限制之外,这两种方法有什么区别?
4个回答

3
Geocoder是Android框架中内置的免费API。Geocoding API是一种付费的rest API。Geocoder在内部使用不同的搜索栈,这导致与Geocoding rest API相比产生不同的结果。通常情况下,Geocoding rest API的效果要优于Geocoder,但其使用有限制且实现较为复杂。

1
请注意,内置的API不一定可用,您需要有备选方案。 - Henry Twist

1
如果您需要在应用程序中使用地图,则应使用名为:Google Maps Android API v2 的API。
如果您需要管理地理编码数据(地址到纬度/经度或反之亦然),则启用地理编码API并开始使用Geocoder类。
例如(从纬度/经度到地址):
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
addresses = geocoder.getFromLocation(gps.getLatitude(),  gps.getLongitude(), 1); 

1
但是Geocoder类有一些限制?您如何将Geocoder类与Geocode API连接起来,必须像使用地图那样将密钥放在清单中吗? - itc.opra
@AndreaMontanari 如果我不指定API密钥,是否需要定义它? - Nigam Patro
@NigamPatro 基本上没有 API KEY,您将无法使用该服务。这是一种证书,让 Google 知道您正在使用特定的 API。 - Andrea Montanari
@AndreaMontanari 但是,如果我在没有API密钥的情况下在浏览器中执行该API,它仍然会给出结果。 - Nigam Patro
@NigamPatro 我们正在谈论一个 安卓 应用程序,这意味着如果没有 API 密钥,您的最终用户将无法在调试会话之外使用该服务。 - Andrea Montanari
显示剩余2条评论

1

Geocoder API已经集成到系统中,使用起来非常简单。根据我的经验,在大多数情况下它都能正常工作,但是:

  • 在某些情况下,它会失败并抛出grpc failed的IOException异常。
       Non-fatal Exception: java.io.IOException: grpc failed
       at android.location.Geocoder.getFromLocation(Geocoder.java:136)
  • 它可能在某些设备上甚至不可用(使用 isPresent() 方法来验证)。

基于以上,我认为 Geocoder API 不是非常可靠,所以如果地理编码是您的应用程序的关键部分,则可以考虑其他选项(比如 Google 的 Geocoding API,但这不是免费的)。


0

免费API用户有以下限制:

  • 每24小时最多2500个请求。
  • 每秒最多5个请求。

您也可以在Web请求中包含API密钥,例如:

https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=API_KEY

我不确定关于Android Geocoder类的事情,或许有其他人可以帮助你。但是我认为相同的限制也适用。


但是,基本上,在浏览器中访问API而不提供任何密钥时,它可以正常工作并给出结果。那么,是否总是需要提供密钥? - Nigam Patro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接