android - 确定点是否在多边形中

标签 android google-maps geolocation android-maps-v2 polygons

根据我的要求,我正在谷歌地图上绘制多边形,如下图所示。(使用 map v2)enter image description here

现在我需要在用户输入特定多边形时显示警报。

如何确定我当前的位置是否在多边形中。 (需要优化方式而不耗尽电池)

提前致谢。

最佳答案

刚刚尝试了识别多边形中的点的光线转换算法。这很完美。

请参阅 http://en.wikipedia.org/wiki/Point_in_polygon用于光线转换的论文

private boolean isPointInPolygon(LatLng tap, ArrayList<LatLng> vertices) {
        int intersectCount = 0;
        for (int j = 0; j < vertices.size() - 1; j++) {
            if (rayCastIntersect(tap, vertices.get(j), vertices.get(j + 1))) {
                intersectCount++;
            }
        }

        return ((intersectCount % 2) == 1); // odd = inside, even = outside;
    }

    private boolean rayCastIntersect(LatLng tap, LatLng vertA, LatLng vertB) {

        double aY = vertA.latitude;
        double bY = vertB.latitude;
        double aX = vertA.longitude;
        double bX = vertB.longitude;
        double pY = tap.latitude;
        double pX = tap.longitude;

        if ((aY > pY && bY > pY) || (aY < pY && bY < pY)
                || (aX < pX && bX < pX)) {
            return false; // a and b can't both be above or below pt.y, and a or
                            // b must be east of pt.x
        }

        double m = (aY - bY) / (aX - bX); // Rise over run
        double bee = (-aX) * m + aY; // y = mx + b
        double x = (pY - bee) / m; // algebra is neat!

        return x > pX;
    }

关于android - 确定点是否在多边形中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26014312/

相关文章:

android - 在命令行过滤 Logcat 日志

android - 提交后 fragment 未附加到 Activity

javascript - 如何将 jquery 调整大小功能添加到 WP 谷歌地图插件?

php - 根据IP地址将位置保存到数据库

android - 如何在数据库中插入地理点值?

android - 在 Google Play 服务 9.6.1 中使用最新的 Smooch 版本 (4.0.5) 时,应用程序崩溃

java - Android 中的随机数错误

Javascript 和 Jquery : Adding markers for Google Maps when clicking a button

用于打开 Waze 和 Google map 的 Android Intent

javascript - 无法从地理位置获取城市名称