我需要在服务器端(用Java编码)的边界框上获取Google Maps缩放级别,有什么想法吗?
最佳答案
@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引擎摆脱了复杂的(可能浪费的)数学工作,这可能减慢页面加载速度并恶化用户体验。