2

我正在开发一个地图应用程序,该应用程序根据用户的查询在 MapView 上绘制图钉。我正在尝试缩放地图以适合所有结果图钉,但我遇到了一个看似奇怪的情况。

我设置了两个变量:

latSpan 是任意一个结果点的最大纬度和最小纬度之差

lonSpan 是任何结果点的最大经度和最小经度之间的差

这种方法

        while ((mapView.getLatitudeSpan()) < latSpan) || (mapView.getLongitudeSpan() < lonSpan)){
            mapController.zoomOut();
        }//end of while loop

应该缩小以确保所有图钉都适合可查看的地图屏幕。

但我正在经历一些相当奇怪的事情。mapView.getLatitudeSpan() 和 mapView.getLongitudeSpan() 的结果通常大于我的 latSpan 和 lonSpan 值,因此 MapController 没有足够缩小。

我的地图放大得很远——15级或更高。

例如,一组搜索结果给出了以下值:

纬度 = 17928

长跨度 = 11636

mapView.getLatitudeSpan() = 21933

mapView.getLongitudeSpan() = 20598

根据这些数字,您不会认为 MapController 需要缩小。然而,在屏幕顶部上方和底部下方都绘制了图钉。我将我的 WHILE 循环更改为阅读

while ((mapView.getLatitudeSpan() - 6000) < latSpan...

这会有所帮助,但正确的查询仍然会导致问题。

但真正的问题是,为什么会发生这种情况?

4

1 回答 1

1

我不确定为什么您的代码无法从提供的代码段中运行。您可能没有将 latSpan 和 lonSpan 转换为 microDegrees(如下所示),这会导致一些问题。

此外,如果您试图确保您的 mapView 显示所有结果,那么尝试确定它是否需要在缩放之前进行缩放并没有多大意义,只需每次都缩放它。如果事实证明它不需要缩放,那么似乎什么都不会发生,如果确实发生了,那么它会发生。

您可以设置地图以包含所有点并移动到点的质心,如下所示:

GeoPoint max = new GeoPoint(maxLatitude, maxLongitude);
GeoPoint min = new GeoPoint(minLatitude, minLongitude);

int maxLatMicro = max.getLatitudeE6();
int maxLonMicro = max.getLongitudeE6();
int minLatMicro = min.getLatitudeE6();
int minLonMicro = min.getLongitudeE6();

GeoPoint center = new GeoPoint((maxLatMicro+minLatMicro)/2,(maxLonMicro + minLonMicro)/2);

controller.zoomToSpan(maxLatMicro - minLatMicro, maxLonMicro - minLonMicro);
controller.animateTo(center);
于 2012-05-05T04:24:31.877 回答