如何使用 Google 地理编码 API?

How to use Google geocoding API?

我有一个 Android 应用程序,我正在使用 Google 地理编码 API 获取地址的 GPS 坐标。目前我正在使用以下 URL 可以正常工作:

http://maps.googleapis.com/maps/api/geocode/json?sensor=false&address=1600+Amphitheatre+Parkway,+Mountain+View,+CA

问题是,从 2018 年 7 月 16 日开始,Google 的 'new pricing changes' 之后,上面的 API 会继续工作吗?根据此处的 Google API 文档 https://developers.google.com/maps/documentation/geocoding/intro#GeocodingResponses,执行地理编码的正确方法是使用以下格式:

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

我已经尝试使用建议的格式(创建了一个项目,启用了计费,启用了地点和地图 APIs,创建了一个 API 密钥,增加了密钥的安全性,这样只有我的应用程序可以访问密钥)但是当我使用建议的格式时出现错误,

This IP, site or mobile application is not authorized to use this API key

阅读 Whosebug 上的其他问题,除其他外,我发现了以下建议:

  1. 创建服务器密钥并使用它代替 API 密钥
  2. 不对 API 键添加限制
  3. 使用 API 请求的第一种格式(没有 API_KEY)
  4. 等待 10 分钟,直到新 KEY 生效

除了 1 和 none 有效之外,我尝试了所有方法。关于解决方案 #1,根据文档,API 需要一个 API 密钥,所以我不明白为什么服务器密钥会起作用。

解决方案 2 有风险,解决方案 3 不确定它是否会继续使用定价更改,解决方案 4 也不起作用(我等了几个小时没有成功)。

我什至创建了一个新的 API KEY 并且没有添加任何限制,但我收到了超出限制的错误。

任何人都可以提供任何帮助吗?

如果您只能使用 google 地理编码 API.

,则使用代理服务(解决方案 #1)是可行的方法

您的应用被拒绝,因为 google 无法仅通过 API 键知道哪个应用正在发出请求。如果您查看可用的 API,有些人会说 "for Android" 和 "for iOS",这些是您可以在本机限制和使用的。

使用代理会起作用(您的假设不会错)因为您可以将 API 密钥限制为服务的 IP,然后需要您的应用授权才能使用代理端点.这将保护您的 API 密钥免遭窃取和滥用。

根据您上面的评论,最快的方法是使用 Geocoder 对地址进行反向地理编码:

    if(Geocoder.isPresentt()){
        Geocoder geocoder = new Geocoder(this, Locale.getDefault());
        List<Address> addresses;


        addresses = geocoder.getFromLocationName(addressName, 3);
        for(Address address : addresses){
            Log.d(TAG,"Lat:" + address.getLatitude() +", Lng: " + address.getLongitude());
        }
    }