Google과 SO에서이 점을 연구했지만 계속 빠져 나갔다. Most examples 내가 본 것은 임의의 mapWidth와 단일 점, 오버레이의 스팬을 다루지 않는 것입니다.Android : MapController.zoomToSpan : 거리와 중심점이 지정된 스팬 만들기
지도 지점 데이터베이스 인 MapView
과 Geocoder
이 있습니다. 내 앱에서 우편 번호를 검색 할 수 있으며 Address
이 내 Geocoder
으로 반환됩니다.
이 Address
을 사용하여 GeoPoint
을 구축하고 내 DB를 검색하여 주변 포인트 목록을 얻을 수 있습니다. 문제는 반환 된 Address
지점에서 생성 된 범위와 데이터베이스의 가장 가까운 지점까지의 거리를 사용하여 zoomToSpan을 시도 할 때 발생합니다.
해당 스팬에 가장 가까운 두 점 (가능한 경우) 만 포함하도록하겠습니다. 여기에 관련 코드입니다 :
Collections.sort(listingDisplay, mComparator);
listingDisplayAdapter.notifyDataSetChanged();
float spanWidth =0;
if (listingDisplay.size() > 1) {
spanWidth = (float) (2 * distanceFromPoint(listingDisplay.get(1),
current));
} else if (listingDisplay.size() == 1) {
spanWidth = (float) (2 * distanceFromPoint(listingDisplay.get(0),
current));
}
Log.v(TAG, "SpanWidth: " + spanWidth);
// Create span
int minLat = (int) (current.getLatitudeE6() - (spanWidth * 1E6)/2);
int maxLat = (int) (current.getLatitudeE6() + (spanWidth * 1E6)/2);
int minLong = (int) (current.getLongitudeE6() - (spanWidth * 1E6)/2);
int maxLong = (int) (current.getLongitudeE6() + (spanWidth * 1E6)/2);
// Zoom against span. This appears to create a very small region that doesn't encompass the points
mapController.setCenter(current);
mapController.zoomToSpan(Math.abs(minLat - maxLat), Math.abs(minLong - maxLong));
ListingDisplay
가장 가까운 지점의 목록이 포함은 비교기, mComparator
가 가장 가까운 위치에이 목록을 정렬로, 내 반환 Address
합니다 (GeoPoint
전화 : current
)를 목록의 맨 위에 .
그런 다음 가장 가까운 값을 기준으로 spanWidth
의 값을 설정하고이 범위를 계산해보십시오.
내 질문은 주어진 거리와 중심점에서 스팬을 구성하는 방법?