我正在开发一个地图应用程序,它根据用户的查询在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...
这有帮助,但正确的查询仍会导致问题。
但真正的问题是,为什么会发生这种情况?
答案 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);