2012-10-02 6 views
0

MapView가 있으며 getController(). zoomToSpan()을 호출합니다. zoomToSpan()에서 내 문제는지도 핀 외부에서 일관된 (예 : 15dp) 패딩을 사용하여 사용자가 집어서 축소 할 필요없이 선택할 수 있도록하려는 것입니다. 현재지도 핀의 최소/최대 long/lat로 zoomToSpan()을 채우므로 가장자리에있는 것들이 즉시 보이지 않거나 선택할 수 없습니다.MapViewController.zoomToSpan()에 패딩 추가

필자는 고정 된 long/lat 패딩을 사용하는 것을 고려해 봤지만 맵 핀이 너무 가깝거나 멀리 떨어져 있지 않을 것이라고 보장하지 않습니다. 따라서 고정 된 long/lat 패딩이 대부분의 경우 작동 할 수 있지만 모든 경우에 작동하지는 않습니다. 나는 현재 zoomToPan()를 설정하고 방법

은 다음과 같습니다

mapView.getController().zoomToSpan(MapPoint.convertToGeoPoint(Math.abs(fMinLat - fMaxLat)), MapPoint.convertToGeoPoint(Math.abs(fMinLong - fMaxLong))); 

이 내가 그것을 설정하는 방법에 가지고 있던 생각입니다,하지만 나는 그것이 실제로 문제를 해결하거나이있는 경우 확실하지 않다 그것을 할 수있는 더 좋은 방법 :

mapView.getController().zoomToSpan(MapPoint.convertToGeoPoint((float) (Math.abs(fMinLat-fMaxLat) + (Math.abs(fMaxLat - fMaxLat)) * 0.5)), MapPoint.convertToGeoPoint((float) (Math.abs(fMinLong-fMaxLong) + (Math.abs(fMinLong - fMaxLong) * 0.5)))); 

나는이 질문을 이미 체크 아웃했다. 나는 광택을 내고 싶습니다 : zoomToSpan implementation problemCalculating zoomToSpan() degrees based on min/max lat/lng to be in the mapView.

답변

1

해결책이 제대로 작동해야합니다. "(Math.abs (fMaxLat - fMaxLat)) * 0.5)"에 오타가 있음을주의하십시오. 두 번 "fMaxLat"를 사용하고 있습니다.

당신은이 간단한 형태로 작성할 수

mapView.getController().zoomToSpan((int)(Math.abs(fMinLat-fMaxLat) * 1.5), (int)(Math.abs(fMinLong-fMaxLong) * 1.5)); 

그런 다음 당신은 더 나은 당신의 기대를 달성 상황을 확인하기 위해 1.0과 1.99 사이에 서로 다른 곱셈 값을 시도 할 수 있습니다.

확대/축소는 항상 2의 거듭 제곱의 단계 (단계적이 아닌)로 변경되므로 확대/축소가 두 배가되거나 절반으로 줄어 듭니다. 달성 된 최종 결과는지도의 다른 점에 따라 달라지며 줌 값에 밀접하게 맞을 수 있고 이전 값의 가장자리에서 매우 멀리 떨어질 수 있습니다.