2

Mapsforgeを使用していて、いくつかのポイントを追加したMapViewがあります。一部のポイントは、ユーザーがそれらをクリックして適切なポップアップを表示するには近すぎて、完全にズームインした場合でも表示されません。

私がやりたいのは、マップの領域を長押しできるようにすることです。スクロール可能なダイアログが表示され、長押しした場所のxピクセルなどのポイントが一覧表示されます。ダイアログや長押しを理解することはできますが、アプリのデータベースを調べて、そこに保存したすべてのポイントで計算を実行せずに、「クリックした場所からxピクセル以内のポイント」をキャプチャする方法を誰かが知っているかどうか知りたいですか?呼び出したり使用したりできるmapsforgeメソッドがいくつかあるはずです。

編集:私は最近これに戻って、長押しイベントをキャッチするために次のコードを追加しました、私は今周囲のポイントをつかむ方法を見つけようとしています。データベースからの緯度と経度に基づいて行うと、ズームレベルごとに異なる距離値が必要になるため、画面上のポイントの位置に基づく必要があると思います。

boolean ACTION_MOVED = false;
long beginTime;
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN: {
            beginTime = System.currentTimeMillis();
            ACTION_MOVED = false;
            break;
        }
        case MotionEvent.ACTION_MOVE: {
            ACTION_MOVED = true;
            break;
        }
        case MotionEvent.ACTION_UP: {
            if (System.currentTimeMillis() - beginTime >= ViewConfiguration.getLongPressTimeout())
                if (!ACTION_MOVED) {
                    Toast.makeText(mapActivity, "long Press", Toast.LENGTH_SHORT).show();
                    ACTION_MOVED = false;
                    return true;
                }
            break;
        }
    }

    return view.onTouchEvent(motionEvent);
}
4

1 に答える 1

0

これは数回見られたので、これがどのように機能するようになったかを投稿する必要があると考えました. 私は基本的にデータベースを調べて、テストに基づいて選択した選択領域内にすべてのポイントがあるかどうかを確認します。

public static boolean withinSelectionArea(GeoPoint myPointG, GeoPoint dbPointG, Context context) {
    Point myPoint = projection.toPixels(myPointG, null);
    Point dbPoint = projection.toPixels(dbPointG, null);
    float a = dbPoint.x - myPoint.x;
    float b = dbPoint.y - myPoint.y;
    double distance = Math.sqrt(a * a + b * b);
    return distance < context.getResources().getDisplayMetrics().densityDpi / 4;
}

また、onLongPress ハンドラーをオーバーライドし、その中で上記のメソッドを呼び出しました。

于 2012-11-20T20:08:33.980 に答える