MapsForge マップの zoomToSpan メソッドはありますか? 存在しない場合、どうすれば実装できますか? コードサンプルまたはアルゴリズムの説明はどこにありますか?
前もって感謝します
次の方法で MapView を拡張できます (MapsForge バージョン 0.3.1):
public synchronized void fitToBoundingBox(final BoundingBox pBoundingBox, final int pMaximumZoom) {
int width = this.getWidth();
int height = this.getHeight();
if (width <= 0 || height <= 0) {
this.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
MapView.this.getViewTreeObserver().removeGlobalOnLayoutListener(this);
fitToBoundingBox(pBoundingBox, pMaximumZoom);
}
});
} else {
Projection projection1 = this.getProjection();
GeoPoint pointSouthWest = new GeoPoint(pBoundingBox.minLatitude, pBoundingBox.minLongitude);
GeoPoint pointNorthEast = new GeoPoint(pBoundingBox.maxLatitude, pBoundingBox.maxLongitude);
Point pointSW = new Point();
Point pointNE = new Point();
byte maxLvl = (byte) Math.min(pMaximumZoom, this.getMapZoomControls().getZoomLevelMax());
byte zoomLevel = 0;
while (zoomLevel < maxLvl) {
byte tmpZoomLevel = (byte) (zoomLevel + 1);
projection1.toPoint(pointSouthWest, pointSW, tmpZoomLevel);
projection1.toPoint(pointNorthEast, pointNE, tmpZoomLevel);
if (pointNE.x - pointSW.x > width) {
break;
}
if (pointSW.y - pointNE.y > height) {
break;
}
zoomLevel = tmpZoomLevel;
}
this.getMapViewPosition().setMapPosition(new MapPosition(pBoundingBox.getCenterPoint(), zoomLevel));
}
}
ほとんどの場合、マップに表示するオーバーレイのセットを持っています。経度と緯度の「最小」値と「最大」値を見つけてから、上記のメソッドを呼び出す必要があります。
mapView.fitToBoundingBox(new BoundingBox(minLat, minLng, maxLat, maxLng), 20);
ここでこの解決策を見つけました
エミュレーターでマップを表示できたと仮定して、マップのズーム ビュー機能のサンプル コードを示します。お役に立てれば
Main.xml ファイルを次のように保持します。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true"
android:clickable="true"
android:apiKey="0l4sCTTyRmXTNo7k8DREHvEaLar2UmHGwnhZVHQ"
/>
<LinearLayout android:id="@+id/zoom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
および mapsActivity は次のとおりです。
package net.learn2develop.GoogleMaps;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapView.LayoutParams;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
public class MapsActivity extends MapActivity
{
MapView mapView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) findViewById(R.id.mapView);
LinearLayout zoomLayout = (LinearLayout)findViewById(R.id.zoom);
View zoomView = mapView.getZoomControls();
zoomLayout.addView(zoomView,
new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mapView.displayZoomControls(true);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}