/**
* 检查多边形是否包含了某点~多边形都是由点组成
* @param px 纬度
* @param py 经度
* @param xD 多边形所有纬度
* @param yD 多边形所有经度
* @return
*/
public boolean containsPoint(double px, double py,ArrayList xD,ArrayList yD) {
int verticesCount = xD.size();
int nCross = 0;
for (int i = 0; i
double ix = xD.get(i);
double iy = yD.get(i);
double i1x = xD.get((i + 1) % verticesCount);
double i1y = yD.get((i + 1) % verticesCount);
// 求解 y=p.y 与 p1 p2 的交点
if ( iy == i1y ) { // p1p2 与 y=p0.y平行
continue;
}
if ( py
continue;
}
if ( py >= Math.max(iy, i1y) ) { // 交点在p1p2延长线上
continue;
}
// 求交点的 X 坐标
float x = (float) ((py - iy) * (i1x - ix)
/ (i1y - iy) + ix);
if ( x > px ) { // 只统计单边交点
nCross++;
}
}
// 单边交点为偶数,点在多边形之外
return (nCross%2==1);
}