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 回答