1

MapsForge マップの zoomToSpan メソッドはありますか? 存在しない場合、どうすれば実装できますか? コードサンプルまたはアルゴリズムの説明はどこにありますか?

前もって感謝します

4

2 に答える 2

2

次の方法で 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);

ここでこの解決策を見つけました

于 2013-01-04T02:25:39.590 に答える
0

エミュレーターでマップを表示できたと仮定して、マップのズーム ビュー機能のサンプル コードを示します。お役に立てれば

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;
         }
     }
于 2012-12-30T22:33:05.973 に答える