如何计算java中边界框的谷歌地图缩放级别

时间:2010-11-24 12:29:21

标签: java google-maps bounding-box

我需要为服务器端的边界框(用java编码)获取google地图缩放级别的任何想法吗?

2 个答案:

答案 0 :(得分:6)

@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。此公式应适用于任何方形Google地图。您看到使用log_2的原因是每次缩放级别增加1时Google地图的大小都会翻倍。我还会处理点几乎相互重合的边缘情况(zoomLevel = 21),以及整个地球的位置是所需的缩放(zoomLevel = 1)。

执行此服务器端的好处是,您已经释放了JavaScript引擎,无法执行复杂(并且可能浪费)的数学运算,这可能会减慢页面加载速度并恶化用户体验。

答案 1 :(得分:1)

Google地图通过在客户端(浏览器内)运行的javascript库使用。您无法在服务器端执行任何操作。

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

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