マーカーでプロットされたいくつかのポイントを持つmapViewがあり、それぞれが異なる緯度と経度を持ち、近くで互いに近くにある場合とない場合があります。画面上のすべてのポイントを一緒に中央に配置する最も深いズームレベルにMapViewを開く方法はありますか?
mapControllerにsetZoomプロパティとsetCenterプロパティがあることは知っていますが、これらのメソッドの値を決定するにはどうすればよいですか?または、これを達成するための別のより簡単な方法はありますか?
マーカーでプロットされたいくつかのポイントを持つmapViewがあり、それぞれが異なる緯度と経度を持ち、近くで互いに近くにある場合とない場合があります。画面上のすべてのポイントを一緒に中央に配置する最も深いズームレベルにMapViewを開く方法はありますか?
mapControllerにsetZoomプロパティとsetCenterプロパティがあることは知っていますが、これらのメソッドの値を決定するにはどうすればよいですか?または、これを達成するための別のより簡単な方法はありますか?
MapView で、ImtemizedOverlay に overlayItems を追加した後、次のようにします。
GeoPoint aGeoPoint = new GeoPoint((int)(latitude * 1E6), (int)(longitude * 1E6));
OverlayItem aOverlayItem = new OverlayItem(aGeoPoint, "Auto", "Auto");
locationsItemizedOverlay.addOverlay(aOverlayItem);
これを試して:
// Center map in geopoints
GeoPoint point = locationsItemizedOverlay.getCenterPoint();
int latSpan = locationsItemizedOverlay.getLatSpanE6();
int longSpan = locationsItemizedOverlay.getLonSpanE6();
mapView.getController().setCenter(point);
mapView.getController().zoomToSpan((int)(latSpan * Constants.MAP_ZOOM_FACTOR), (int)(longSpan * Constants.MAP_ZOOM_FACTOR));
オーバーライドされた ItemizedOverlay で:
public GeoPoint getCenterPoint() {
if(center == null) {
int northEdge = -90000000; // i.e., -90E6 microdegrees
int southEdge = 90000000;
int eastEdge = -180000000;
int westEdge = 180000000;
Iterator<OverlayItem> iterator = overlayItemsArrayList.iterator();
while(iterator.hasNext()) {
GeoPoint geoPoint = iterator.next().getPoint();
if(geoPoint.getLatitudeE6() > northEdge)
northEdge = geoPoint.getLatitudeE6();
if(geoPoint.getLatitudeE6() < southEdge)
southEdge = geoPoint.getLatitudeE6();
if(geoPoint.getLongitudeE6() > eastEdge)
eastEdge = geoPoint.getLongitudeE6();
if(geoPoint.getLongitudeE6() < westEdge)
westEdge = geoPoint.getLongitudeE6();
}
center = new GeoPoint((int)((northEdge + southEdge) / 2), (int)((westEdge + eastEdge) / 2));
}
return center;
}
お役に立てば幸いです。