3

我需要获取服务器端边界框的谷歌地图缩放级别(用java编码)有什么想法吗?

4

2 回答 2

7

@Peter 实际上,您可以在服务器端使用 Java 做一些事情。您可以从边界框计算最小和最大纬度/经度值,然后使用以下代码:

int zoomLevel;
double latDiff = latMax - latMin;
double lngDiff = lngMax - lngMin;

double maxDiff = (lngDiff > latDiff) ? lngDiff : latDiff;
if (maxDiff < 360 / Math.pow(2, 20)) {
    zoomLevel = 21;
} else {
    zoomLevel = (int) (-1*( (Math.log(maxDiff)/Math.log(2)) - (Math.log(360)/Math.log(2))));
    if (zoomLevel < 1)
        zoomLevel = 1;
}

这适用于我的 320x320 像素方形 Google 地图,ZOOM_SCALING_FACTOR = 0.3838。这个公式应该适用于任何方形谷歌地图。您看到使用 log_2 的原因是每次缩放级别增加 1 时,Google 地图的大小都会翻倍。我还处理点几乎彼此重合的边缘情况(zoomLevel = 21),以及整个地球的位置是所需的缩放 (zoomLevel = 1)。

做这个服务器端的好处是你已经把你的 JavaScript 引擎从复杂的(并且可能是浪费的)数学中解放出来,这可能会减慢页面加载并恶化用户体验。

于 2013-05-21T09:45:34.293 回答
1

Google 地图通过在客户端(浏览器内部)运行的 javascript 库使用。在服务器端您无能为力。

但是,您可以查看 javascript(在客户端)中的边界框大小并相应地设置缩放级别。

我很好奇:你在服务器端使用谷歌地图做什么?

于 2010-11-24T13:21:44.473 回答