如何使用Google地理编码API?

时间:2018-06-14 14:12:51

标签: android google-maps geocoding

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

  

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

问题是,在Google的新定价发生变化之后,上述API是否会继续有效?'从2018年7月16日开始?根据此处的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

我尝试过使用建议的格式(创建项目,启用结算,启用Places和Maps API,创建API密钥,为密钥添加安全性,以便只有我的应用可以访问密钥)但是当我使用建议格式我收到错误,

  

此IP,网站或移动应用程序无权使用此API   键

在StackOverflow上阅读其他问题,我找到了以下建议,其中包括:

  1. 创建服务器密钥并使用它而不是API密钥
  2. 不对API密钥添加限制
  3. 使用API​​请求的第一种格式(不含API_KEY)
  4. 等待10分钟,直到新KEY激活
  5. 我尝试了所有这些,除了1,没有人工作。关于解决方案#1,根据文档,API需要API密钥,因此我无法理解为什么服务器密钥可以工作。

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

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

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

2 个答案:

答案 0 :(得分:0)

如果您只能使用Google地理编码API,则可以使用代理服务(解决方案#1)。

您的应用被拒绝,因为谷歌无法通过API密钥知道哪个应用正在发出请求。如果您查看可用的API,有人会说"对于Android"和"对于iOS和#34;,这些是你可以限制和原生使用的。

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

答案 1 :(得分:0)

根据您上面的评论,最快的方法是使用Geocoder反转地址编码地址:

var results = response
  .GroupBy(row => row.Name)
  .SelectMany(g => g
     .OrderByDescending(row => row.Id)
     .Take(1));