地理编码结果而不在地图上显示

Posted

技术标签:

【中文标题】地理编码结果而不在地图上显示【英文标题】:Geocoding results without displaying them on a map 【发布时间】:2014-03-12 20:02:40 【问题描述】:

我正在开发一个让用户知道其位置的应用程序。我正在使用这个example

但我也看到here 说“地理编码 API 只能与谷歌地图一起使用;地理编码结果不显示在地图上是被禁止的”。所以我不能在地图上不显示结果的情况下使用 Geocoder?

【问题讨论】:

您确定限制不仅仅针对 REST API 吗?在Geocoder 的Javadoc 中我看不到这个限制。 这就是我要问的 看到这个***.com/questions/15711499/… 【参考方案1】:

Geocoder,您使用的类,对于 android,位于包下:android.location.Geocoder

这与 Google 地理编码 API 不同:https://developers.google.com/maps/documentation/geocoding/?hl=fr 我们将使用 url:http://maps.googleapis.com/maps/api/geocode/output?parameters

有一个用于 javascript 的 GeoCoder 类,它与 Google Geocoding API 相关,它是 Google Maps API v3 的 Geocoder 类。 (搜索将我们带到:https://developers.google.com/maps/documentation/javascript/services?hl=fr#Geocoding)

因此,当提到“Geocoding API 只能与 Google 地图一起使用时;禁止在不将其显示在地图上的情况下进行地理编码结果。”

它将用于 API 和 v3 API 的相关类,而不是 android.location.Geocoder

另外,我想让你知道:https://code.google.com/p/android/issues/detail?id=8816

我遇到过那个。

【讨论】:

【参考方案2】:

其实你可以使用Geocoding API,没有限制。看我最后的回答

Get current location using json

【讨论】:

【参考方案3】:

TLDR:你应该没问题。

您引用的内容确实适用于 Google 的 REST API 和状态:

Geocoding API 只能与 Google 地图一起使用;禁止在未在地图上显示的情况下对结果进行地理编码。有关允许使用的完整详细信息,请咨询Maps API Terms of Service License Restrictions。

据我所知,这不会影响 Android 的使用。引用this answer 似乎是:

因此对 Android GeoCode API 的使用没有硬性限制,更多的是每台设备(客户端)的公平使用政策

来自TOS:

(a) 免费访问(免费)。您的 Maps API 实施必须通常可供用户免费访问,并且不得要求付费订阅或其他基于费用的受限访问。此规则适用于您的内容和 Maps API 实施中的任何其他内容,无论您的内容或其他内容是现在存在还是以后添加。

但是:

(b) 移动应用程序。 (i) 如果您的 Maps API 实施用于通过在线商店收费出售的移动应用程序,并且可以下载到移动设备上,则第 9.1.1(a) 节(免费访问)中的规则不适用访问在线商店。

(ii) 第 9.1.1(b) 节(公共访问)中的规则不适用,如果 您的 Maps API 实现是一个 Android 应用程序,它使用 谷歌地图安卓 API。 (但是,第 9.1.1(b) 节中的规则 如果您的 Maps API 实施,(公共访问)将继续适用 是使用任何其他 Maps API 的 Android 应用程序,除非 Maps API 实现符合第 1 节中的例外情况 9.1.2(a)(与 Google 的企业协议)。)

我一直觉得 TOS 有点难以理解,因此最终联系了 Google。虽然他们一直非常友好,但有时需要一些时间才能做出回应。我希望这有助于为您和遇到它的任何其他人解决这个问题。

【讨论】:

【参考方案4】:

您可以使用Android Geocoder 而无需在地图上显示结果。

Android 的地理编码服务是从任何特定的服务器端实现中抽象出来的,并且依赖于在设备中实现此功能的 OEM。在上面的文档中,它说:

Geocoder 类需要一个不包含在核心 android 框架中的后端服务。如果平台中没有后端服务,Geocoder 查询方法将返回一个空列表。使用 isPresent() 方法确定是否存在 Geocoder 实现。

换句话说,Android 开源项目仅包含 a proxy class for the Geocoder service、a base abstract GeocoderProvider to be implemented 和 an interface for location providers implementing the Geocoder services - 不是实际的 Geocoder 服务实现。

因此,当您的应用在设备上运行时,它可能会在使用 Android Geocoder API 时访问任意数量的地理编码提供程序,具体取决于特定 OEM 在该特定设备上实现服务的方式。 Google 可能与某些 OEM 达成协议,通过他们自己的 web-based Geocoding API 提供这些服务,但该协议不涉及作为开发人员的您,也不会强制您执行基于 Web 的 Geocoding API 服务条款(因为您无法了解您的应用是否实际使用 Google 服务)。

【讨论】:

以上是关于地理编码结果而不在地图上显示的主要内容,如果未能解决你的问题,请参考以下文章

如何解析谷歌地图地理编码结果

谷歌地图地理编码器返回相同的结果

如何在信息窗口中显示我的地理编码地址?谷歌地图 API

iOS 6 中的本地化地理编码选项

Elasticsearch:使用反向地理编码在地图上显示自定义区域统计数据

Elasticsearch:使用反向地理编码在地图上显示自定义区域统计数据