【发布时间】:2011-08-29 00:24:17
【问题描述】:
我有一组纬度和经度点。我用它们在地图上做标记。我该怎么做才能同时显示地图上的所有标记。例如,很好地拟合,如果标记在城市内,我将其放大以仅显示城市而不是整个州、国家等...
谢谢
【问题讨论】:
标签: android google-maps zooming
我有一组纬度和经度点。我用它们在地图上做标记。我该怎么做才能同时显示地图上的所有标记。例如,很好地拟合,如果标记在城市内,我将其放大以仅显示城市而不是整个州、国家等...
谢谢
【问题讨论】:
标签: android google-maps zooming
这样的事情可能会有所帮助
private void centerGroup(int groupId){
if(groupId>0){
int minLat = Integer.MAX_VALUE;
int maxLat = Integer.MIN_VALUE;
int minLon = Integer.MAX_VALUE;
int maxLon = Integer.MIN_VALUE;
Cursor cursor = getYourLantLongs(groupId);
if (cursor.moveToFirst()){
final int LAT_INDEX = cursor.getColumnIndex(T.Waypoints.LATITUDE);
final int LON_INDEX = cursor.getColumnIndex(T.Waypoints.LONGITUDE);
do {
final int lat = (int) (cursor.getFloat(LAT_INDEX)*1E6);
final int lon = (int) (cursor.getFloat(LON_INDEX)*1E6);
maxLat = Math.max(lat, maxLat);
minLat = Math.min(lat, minLat);
maxLon = Math.max(lon, maxLon);
minLon = Math.min(lon, minLon);
} while(cursor.moveToNext());
mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon));
mapController.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLon + minLon)/2 ));
/*
final int cLat = (int)((maxLat*1E6 + minLat*1E6)/2);
final int cLon = (int)((maxLon*1E6 + minLon*1E6)/2);
final int zLat = (int)Math.abs(maxLat - minLat);
final int zLon = (int)Math.abs(maxLon - minLon);
//mapController.zoomToSpan(zLat, zLon);
mapController.animateTo(new GeoPoint(cLat, cLon));
*/
}
}
}
简而言之,您可以制作一个正方形并放大。
【讨论】:
遍历您的数组并保存纬度和经度的最小值和最大值。 然后使用
mMapController.zoomToSpan((maxLatitude - minLatitude), (maxLongitude - minLongitude));
以获得正确的缩放级别。还有
mMapController.animateTo(new GeoPoint(
(maxLatitude + minLatitude)/2 ,
(maxLongitude + minLongitude)/2 ));
将地图移动到标记的中心。
玩得开心!
【讨论】: