检查Latlng是否在多边形内

用户名

我正在城市上绘制多边形以检查当前位置是否在此多边形内,并且正在使用以下代码进行此操作:

 ArrayList<LatLng> polyLoc = new ArrayList<LatLng>();
polyLoc.add(new LatLng(24.643932, 46.297718));
    polyLoc.add(new LatLng(24.695098, 46.555897));
    polyLoc.add(new LatLng(24.921971, 46.476246));
    polyLoc.add(new LatLng(25.147185, 46.366383));
    polyLoc.add(new LatLng(25.155886, 47.249409));
    polyLoc.add(new LatLng(24.929444, 47.346913));
    polyLoc.add(new LatLng(24.691355, 47.106587));
    polyLoc.add(new LatLng(24.449060, 47.219197));
    polyLoc.add(new LatLng(24.293947, 46.973377));
    polyLoc.add(new LatLng(24.641436, 46.299092));

我通过这种方式检查当前位置是否在此多边形内:-

if (hasPermission() && gpsTracker.canGetLocation()) {
        if (isPointInPolygon(new LatLng(gpsTracker.getLatitude(), gpsTracker.getLongitude()), polyLoc)) {
            cash.setVisibility(View.VISIBLE);
            cashIcon.setVisibility(View.VISIBLE);
        } else {
            cash.setVisibility(View.GONE);
            cashIcon.setVisibility(View.GONE);
        }
        Log.d(TAG, "reservationDialog: " + gpsTracker.getLatitude() + gpsTracker.getLongitude());
    }

这是我的isPointInPolygon方法:

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;
}

我不知道为什么它不起作用,我在这里错过了什么?

用户名

我不知道为什么您的代码不起作用。

但是你可以使用 PolyUtil.containsLocation (new LatLng (latitude, longitude), polyLoc, true)

如果该位置在多边形之外,则将返回false。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查坐标是否在KML多边形内

检查位置(纬度经度)是否在 KML 多边形内

OSMBonusPack:检查我的GeoPoint是否在多边形内

检查点坐标是否在多边形内

检查点是否在本机地图的多边形内?

检查多边形内的点(加速)

多边形内的检查点

检查一个多边形是否在PHP中的另一个多边形内

查找坐标是否在多边形内

是否有CGAL函数检查点是否在带孔的线性多边形内?

如何检查点是否在 MySQL 表中的多边形内?

谷歌地图扑检查多边形内是否有点

Java-如何检查经/纬度坐标是否在多边形内

检查点是否在python中的多边形内的最快方法是什么

检查多边形点是否在传单中的另一个点内

检查点是否在OpenLayers 3中的多边形内

从文本文件获取坐标行并检查点是否在多边形内

使用google_maps_flutter检查坐标是否在抖动中的多边形内

检查多边形是否为Shapely中的多边形

从多边形的路径获取latLng失败

PostGIS 和坐标,确定点是否在多边形/多多边形 (kml) 内

如何检查多边形是否包含点?

检查多边形是否在 R 中相交

mongodb检查点是否在多边形中

检查坐标是否位于多边形中

如何检查栅格和多边形是否重叠?

从PHP检查Google Map Point是否在多边形中

检查多边形是否与每个群集中的其他多边形相交

是否有R函数用于检查指定的GeoJSON对象(多边形或多多边形)是否包含指定点?