如何克服谷歌静态地图API 6小数位精度限制?

时间:2017-08-30 22:34:01

标签: android google-maps google-static-maps

Google Static Maps API Documentation州:

  

使用逗号分隔的文本字符串中的数字定义纬度和经度,精度为6位小数。例如," 40.714728,-73.998672"是一个有效的地理编码值。 忽略超出6位小数的精度。

但是,我注意到在许多情况下,这种精确度还不够。  (编辑:实际上,6个小数位允许精度约为2厘米,为323go comments。有关详细信息,请参阅底部的编辑)

例如:试图在艾菲尔铁塔上放置一个标记(Lat: 48.8583701,Lon: 2.2922926)会被截断(到Lat: 48.858370, Lon:2.292292)获得以下结果,该结果具有不可忽略的偏移量:

enter image description here

我使用静态地图是因为在我的应用程序中,我同时在RecyclerView的项目中显示多个地图。

我目前通过Picasso异步注入Google静态地图API返回的图片来实现这一目标。

这种当前的方法效果很好并且表现平稳,唯一的问题是地图缺乏精确度。

作为解决方法,我正在考虑在MapView中使用标准Lite Mode,但我担心它会导致性能问题,如this question中所述

有没有办法克服这个限制,即使它需要付费?



修改

我使用了错误的坐标。我将解释我是如何得到它们的,以防万一其他人犯同样的错误。

我正在使用加载https://google.com/maps/place/Tour+Eiffel后在网址中显示的坐标,在我的情况下是this URL

当Google地图的网络版左侧面板打开时(这是默认行为),该图钉似乎位于地图的中心。

然而, URL的坐标代表地图的中心,包括左侧面板下的部分。左侧面板折叠后很容易注意到这一点。

这是导致水平偏移的原因。

1 个答案:

答案 0 :(得分:3)

我试图解决这个问题,但在我身边,一切都工作得很好,很精确,我注意到你使用的是不同于我的坐标

对于我使用的艾菲尔铁塔:

  

48.858285,2.294388

这应该可以为您提供更好的结果,同时请记住您可以使用 Geocoder 放置带有地点名称或完整地址的标记,即:

  

Champ de Mars,5 Avenue Anatole France,75007 Paris,France

这样的事情应该有所帮助

Geocoder geocoder = new Geocoder(<your context>);  
List<Address> addresses;
addresses = geocoder.getFromLocationName(<String address>, 1);
if(addresses.size() > 0) {
    double latitude= addresses.get(0).getLatitude();
    double longitude= addresses.get(0).getLongitude();
}