代码之家  ›  专栏  ›  技术社区  ›  a.p.

如何使用google地理编码api?

  •  0
  • a.p.  · 技术社区  · 6 年前

    我有一个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日开始进行“新的定价调整”后,上述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

    我试过使用建议的格式(创建项目、启用计费、启用地点和地图API、创建API密钥、为密钥添加安全性,以便只有我的应用程序可以访问密钥),但是当我使用建议的格式时,我得到了错误,

    此IP、站点或移动应用程序无权使用此API 钥匙

    在阅读StackOverflow的其他问题时,我发现了以下建议:

    1. 创建服务器密钥并使用它而不是api密钥
    2. 不向api密钥添加限制
    3. 使用api请求的第一种格式(不带api_密钥)
    4. 等待10分钟,直到新钥匙激活

    我都试过了,只有一个没用。关于解决方案1,根据文档,api需要一个api密钥,所以我看不出为什么服务器密钥可以工作。

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

    我甚至创建了一个新的api密钥,并且没有添加任何限制,我得到了一个超过限制的错误。

    有人能帮忙吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   randomuser    6 年前

    根据您上面的评论,最快的方法是使用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());
            }
        }
    
        2
  •  0
  •   Clint    6 年前

    如果您被限制使用google地理编码api,那么使用代理服务(solution 1)是一种方法。

    你的应用程序被拒绝,因为谷歌无法知道什么应用程序只使用api密钥发出请求。如果你看看可用的api,有人说“用于android”和“用于ios”,这些api是你可以限制和使用的。

    使用代理将起作用(您的假设不会出错),因为您可以将api密钥限制为服务的ip,然后需要应用程序授权才能使用代理终结点。这将保护您的api密钥不被窃取和滥用。