永发信息网

如何判断一个指定的经纬度点是否落在一个多边形区域内?

答案:2  悬赏:80  手机版
解决时间 2021-02-10 01:44
  • 提问者网友:爱了却不能说
  • 2021-02-09 14:25
如何判断一个指定的经纬度点是否落在一个多边形区域内?
最佳答案
  • 五星知识达人网友:孤独的牧羊人
  • 2021-02-09 14:33
判断指定的经纬度坐标点是否落在指定的多边形区域内
@paramALon指定点的经度
@paramALat指定点的纬度
@paramAPoints指定多边形区域各个节点坐标
@returnTrue落在范围内False不在范围内
------------------------------------------------------------------------------*}functionIsPtInPoly(ALon,ALat:double;APoints:arrayofTMyPoint):Boolean;variSum,iCount,iIndex:Integer;
dLon1,dLon2,dLat1,dLat2,dLon:double;beginResult:=False;if(Length(APoints)<3)thenbeginResult:=False;Exit;end;iSum:=0;iCount:=Length(APoints);foriIndex:=0toiCount-1dobeginif(iIndex=iCount-1)thenbegindLon1:=APoints[iIndex].X;dLat1:=APoints[iIndex].Y;dLon2:=APoints[0
].X;dLat2:=APoints[0
].Y;endelsebegindLon1:=APoints[iIndex].X;dLat1:=APoints[iIndex].Y;dLon2:=APoints[iIndex+1
全部回答
  • 1楼网友:酒安江南
  • 2021-02-09 15:54
在lbs开发中,可能要碰到这样的问题,如何判断一个指定的经纬度点是否落在一个多边形区域内,比如我在地图上画了一个多边形区域,然后给出一个经纬度点,怎样判断这个点是否在这个多边形范围之内,由于我用的是android平台上的高德地图,官网找了很久都没有找到,我用高德的api重写下,给大家提供个参考: [java] view plain copy // 功能:判断点是否在多边形内 // 方法:求解通过该点的水平线与多边形各边的交点 // 结论:单边交点为奇数,成立! //参数: // point p 指定的某个点 // lppoint ptpolygon 多边形的各个顶点坐标(首末点可以不一致) public static boolean ptinpolygon(latlng point, list apoints) { int ncross = 0; for (int i = 0; i < apoints.size(); i++) { latlng p1 = apoints.get(i); latlng p2 = apoints.get((i + 1) % apoints.size()); // 求解 y=p.y 与 p1p2 的交点 if ( p1.longitude == p2.longitude) // p1p2 与 y=p0.y平行 continue; if ( point.longitude < math.min(p1.longitude, p2.longitude)) // 交点在p1p2延长线上 continue; if ( point.longitude >= math.max(p1.longitude, p2.longitude)) // 交点在p1p2延长线上 continue; // 求交点的 x 坐标 -------------------------------------------------------------- double x = (double)(point.longitude - p1.longitude) * (double)(p2.latitude - p1.latitude) / (double)(p2.longitude - p1.longitude) + p1.latitude; if ( x > point.latitude ) ncross++; // 只统计单边交点 } // 单边交点为偶数,点在多边形之外 --- return (ncross % 2 == 1); } 注意,这个latlng类,是高德地图api提供的,代表经纬度,效果还好,亲测可用
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯