Android选择长按半径内最近的点

标签 android maps points

我正在使用 Mapsforge 并且我有一个 MapView 我已经添加了一些点。有些点距离太近,用户无法单击它们并获得正确的弹出窗口,甚至无法一直放大。

我想要做的是让他们可以长按 map 的某个区域,然后会出现一个可滚动的对话框,列出他们长按位置的 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);
}

最佳答案

因为这已经被查看了几次,所以我想我应该发布我最终是如何让它工作的。我基本上遍历数据库,看看是否每个点都在我根据测试选择的某个选择区域内:

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 处理程序并在其中调用了上述方法。

关于Android选择长按半径内最近的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10636960/

相关文章:

android - 在android中禁用 Root View 的响应

r - GADM-Maps越野比较图

javascript - 在 Javascript 中将像素存储在椭圆形中的算法是什么?

algorithm - 给定点的最近点

android - 如何在android中添加多个按钮到scrollview

android - 寻找 OpenCV android 教程

javascript - 将 lat/lng 坐标转换为给定 map 上的像素(使用 JavaScript)

java - 如何计算移动应用分析中的活跃用户?

javascript - 我可以将 OpenLayers 用于简单的自定义图 block 网格系统吗?