这个方法可以加入到工具类中去使用.
注意:在使用 此方法在判断 经纬度时,一定要与使用地图一样的经纬度.
附上 :https://api.map.baidu.com/lbsapi/getpoint/index.html
百度地图的拾取坐标系统
/**
* 返回一个点是否在一个多边形区域内
* @param mPoints 多边形坐标点列表
* @param point 待判断点
* @return true 多边形包含这个点,false 多边形未包含这个点。
*/
public static boolean isPolygonContainsPoint(java.util.List<Point2D.Double> mPoints, Point2D.Double point) {
int nCross = 0;
for (int i = 0; i < mPoints.size(); i++) {
Point2D.Double p1 = mPoints.get(i);
Point2D.Double p2 = mPoints.get((i + 1) % mPoints.size());
// 取多边形任意一个边,做点point的水平延长线,求解与当前边的交点个数
// p1p2是水平线段,要么没有交点,要么有无限个交点
if (p1.getX() == p2.getX())
continue;
// point 在p1p2 底部 --> 无交点
if (point.getX() < Math.min(p1.getX(), p2.getX()))
continue;
// point 在p1p2 顶部 --> 无交点
if (point.getX() >= Math.max(p1.getX(), p2.getX()))
continue;
// 求解 point点水平线与当前p1p2边的交点的 X 坐标
double x = (point.getX() - p1.getX()) * (p2.getY() - p1.getY()) / (p2.getX() - p1.getX()) + p1.getY();
if (x > point.getY()) // 当x=point.x时,说明point在p1p2线段上
nCross++; // 只统计单边交点
}
// 单边交点为偶数,点在多边形之外 ---
return (nCross % 2 == 1);
}
标签:p2,判断,一个点,point,是否,mPoints,getX,p1,交点
From: https://blog.51cto.com/u_16206682/9284432