Java 多边形中的点
我正在开发一个android应用程序。在应用程序中,我将地图与多边形集成在一起。现在我想检查给定的标记是否在多边形内。请帮帮我 以下函数用于检查多边形中的横向长度Java 多边形中的点,java,android,google-maps,point-in-polygon,Java,Android,Google Maps,Point In Polygon,我正在开发一个android应用程序。在应用程序中,我将地图与多边形集成在一起。现在我想检查给定的标记是否在多边形内。请帮帮我 以下函数用于检查多边形中的横向长度 pnpoly(顶点、纬度、液化天然气(浮点数)(点纬度)、(浮点数)(点经度))的编号 boolean pnpoly(int-nvert,float-vertx[],float-verty[],float-testx,float-testy) { int i,j; 布尔c=假; 对于(i=0,j=nvert-1;itesty)!=(v
pnpoly(顶点、纬度、液化天然气(浮点数)(点纬度)、(浮点数)(点经度))的编号
boolean pnpoly(int-nvert,float-vertx[],float-verty[],float-testx,float-testy)
{
int i,j;
布尔c=假;
对于(i=0,j=nvert-1;itesty)!=(verty[j]>testy))&&
(testx<(vertx[j]-vertx[i])*(testy-verty[i])/(verty[j]-verty[i])+vertx[i]))
c=正确;
}
返回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;
}**
**私有布尔isPointInPolygon(LatLng tap、ArrayList顶点){
int int intersectCount=0;
对于(int j=0;日元和日元>日元)|(A请提供更多详细信息,以及您尝试过的内容。此外,在StackOverflow上有许多类似的问题和答案。您是否查看了这些问题的解决方案?是的,我已检查了所有解决方案。感谢您的回复,我正在输入我的代码以及可能的副本,或者您可以查看此库谢谢大家…………但我得到了解决方案,而且它工作得很好。。。。。。。。。。。
**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;
}**