0

マップ mbtiles を読み込むために、nutiteq SDK を使用しています。

ズーム/回転/チルト/ドラッグが発生したときに発生するイベントを取得しました。ただし、ドキュメントによると、これらはすべて 1 つのリスナーの下にあります。

サンプルコード:

public class MyMapEventListener extends MapEventListener {

    private final MapView mapView;
    private final LocalVectorDataSource vectorDataSource;

    public MyMapEventListener(MapView mapView, LocalVectorDataSource vectorDataSource) {
        this.mapView = mapView;
        this.vectorDataSource = vectorDataSource;
    }
    @Override
    public void onMapMoved() {
       // super.onMapMoved();

        Toast.makeText(mapView.getContext(),(int)mapView.getZoom()+"",Toast.LENGTH_SHORT).show();

    }

onMapMoved()メソッドが呼び出されたときに、どのイベント (回転/ズーム/チルト/ドラッグ) が発生しているかを知るにはどうすればよいですか?

4

1 に答える 1

1

最後の状態を取得して記憶MapViewし、新しい状態と比較することができます - ズームが変更された場合はズームなどです。1 つのジェスチャに複数のイベントを含めることができるように準備してください (たとえば、同じ動きでズームと回転を行うことができます)。

しかし、なぜこれらのイベントが正確に必要なのでしょうか? 通常、アプリはそれを必要としませんが、同じアプリケーション機能を実装するためのより良い方法があるかもしれません。

ズーム レベルに基づいて地図上にエリア ラベルを表示したい

わかりました、それは別の質問です。私が疑ったように:) マップイベントをリッスンせずにズームレベルベースのオブジェクトを表示する方法があるため、表示制御は自動的に行われます。マップ ビューが傾いていても、マップ エリア全体のズーム レベルが同じではなく、リスナー ベースのトリックのパフォーマンスがいずれにしても悪くなります。

したがって、適切な解決策は、異なるレイヤーを使用し、次のような方法でそれぞれのズームを制限することです。LocalVectorDataSource両方のレイヤーに同じデータソース (おそらくそこにある) を使用できることに注意してください。

    // 1. Initialize a local vector data source and layer
    LocalVectorDataSource vectorDataSource = new LocalVectorDataSource(proj);

    // Initialize a vector layer with the previous data source
    VectorLayer vectorLayer = new VectorLayer(vectorDataSource);

    // Add the previous vector layer to the map
    mapView.getLayers().add(vectorLayer);

    // Set visible zoom range for the vector layer
    vectorLayer.setVisibleZoomRange(new MapRange(10, 24));

    // Now add the text to the vectorDataSource:
    // Create text style
    TextStyleBuilder textStyleBuilder = new TextStyleBuilder();
    textStyleBuilder.setColor(new Color(0xFFFF0000));
    textStyleBuilder.setOrientationMode(BillboardOrientation.BILLBOARD_ORIENTATION_FACE_CAMERA);

    // Add text
    Text textpopup1 = new Text(proj.fromWgs84(new MapPos(24.653302, 59.422269)),
                                                  textStyleBuilder.buildStyle(),
                                                  "My text");
    vectorDataSource.add(textpopup1);
于 2015-10-07T13:14:17.847 に答える