找出位置是否在Google Maps v2上使用多边形绘制的形状内

时间:2015-07-26 22:10:58

标签: android google-maps google-maps-android-api-2

如果我在Google Maps v2上绘制一个带多边形的形状,有没有办法找出我当前的位置是否在形状内? 请给我一个明确的代码谢谢

4 个答案:

答案 0 :(得分:6)

  1. 在地图上绘制一个带有点的矩形:

    List<LatLng> points = new ArrayList<>();
    points.add(new LatLng(lat1, lng1));
    points.add(new LatLng(lat2, lng2));
    points.add(new LatLng(lat3, lng3));
    points.add(new LatLng(lat4, lng4));
    
    Polygon polygon = myMap.addPolygon(new PolygonOptions().addAll(points));
    
  2. 使用android-maps-utils库检查以查看包含当前位置点的多边形:

    boolean contain = PolyUtil.containsLocation(currentLocationLatLng, points, true);
    

答案 1 :(得分:1)

您可以根据矩形的规格创建LatLngBounds,然后使用contains方法检查当前位置是否位于其中。

答案 2 :(得分:0)

答案 3 :(得分:0)

刚刚尝试了Ray Casting算法,该算法识别多边形中的点。这很完美。

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