Android:MapView.GetLatitudeSpan(),GetLongitudeSpan()异常?

时间:2012-05-05 03:27:27

标签: android android-mapview

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

我设置了两个变量:

latSpan是任何结果点的最大纬度和最小纬度之间的差值

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

此方法

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

应该缩小以确保所有引脚都适合可视地图屏幕。

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

我的地图放大了很远 - 等级15或更高。

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

latSpan = 17928

lonSpan = 11636

mapView.getLatitudeSpan()= 21933

mapView.getLongitudeSpan()= 20598

基于这些数字,您不会认为MapController需要缩小。然而,在屏幕的顶部和底部之上都绘制了针脚。我将WHILE循环更改为

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

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

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

1 个答案:

答案 0 :(得分: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);