如何克服google静态地图API小数点后6位精度限制?

How to overcome google static maps API 6 decimal places precision limit?

Google Static Maps API Documentation 状态:

Latitudes and longitudes are defined using numerals within a comma-separated text string that have a precision to 6 decimal places. For example, "40.714728,-73.998672" is a valid geocode value. Precision beyond the 6 decimal places is ignored.

但是,我注意到在很多情况下,这种精度是不够的。编辑:实际上,小数点后 6 位允许的精度约为 2 厘米,如 。请参阅底部的编辑以获取更多信息)

例如:尝试在埃菲尔铁塔上放置标记 (Lat: 48.8583701,Lon: 2.2922926) 会被截断(至 Lat: 48.858370, Lon:2.292292),得到以下结果,其偏移量不可忽略:

我使用静态地图是因为在我的应用程序中我在 RecyclerView.

的项目中同时显示多个地图

我目前通过 Picasso.

异步注入 Google 静态地图 API 返回的图像来实现这一点

当前的这种方法运行良好且执行流畅,唯一的问题是地图精度不够。

作为解决方法,我正在考虑使用标准 MapView in Lite Mode, but I am concerned that it could lead to performance issues, as stated in this question

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



编辑

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

我使用的是加载后 URL 中出现的坐标 https://google.com/maps/place/Tour+Eiffel, which in my case is this URL

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

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

这就是造成水平偏移的原因。

我正在尝试解决这个问题,但在我这边,一切都运行良好且精确,我注意到您使用的坐标与我的坐标不同

我使用的埃菲尔铁塔:

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();
}