指向Polygon Android

时间:2014-03-13 13:15:32

标签: java android google-maps point-in-polygon

我正在开发一个Android应用程序。在应用程序中,我将地图与多边形集成。现在我想检查给定的标记是否在多边形内部。请帮帮我。

以下函数用于检查多边形中的lat long

pnpoly(no_of_vertex, lat, lng,(float) (point.latitude),(float) (point.longitude))

boolean pnpoly(int nvert, float vertx[], float verty[], float testx, float testy)
    {
      int i, j;
      boolean c = false;
      for (i = 0, j = nvert-1; i < nvert; j = i++) {
        if ( ((verty[i]>testy) != (verty[j]>testy)) &&
         (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
           c =true;
      }
      return c;
    }

我得到了我的问题的解决方案以下是代码

**private boolean isPointInPolygon(LatLng tap, ArrayList<LatLng> vertices) {
        int intersectCount = 0;
        for(int j=0; j<vertices.size()-1; j++) {
            if( LineIntersect(tap, vertices.get(j), vertices.get(j+1)) ) {
                intersectCount++;
            }
        }
        return (intersectCount%2) == 1; // odd = inside, even = outside;
    }
    private boolean LineIntersect(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; }
        double m = (aY-bY) / (aX-bX);               
        double bee = (-aX) * m + aY;                // y = mx + b
        double x = (pY - bee) / m;                 
        return x > pX;
    }**

0 个答案:

没有答案