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

系统 1408 0

一、背景:

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

二、实现代码(delphi)


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> Type
TMyPoint
= packed record
X:double;
Y:double;
end ;

{ *------------------------------------------------------------------------------
判断指定的经纬度坐标点是否落在指定的多边形区域内
@paramALon指定点的经度
@paramALat指定点的纬度
@paramAPoints指定多边形区域各个节点坐标
@returnTrue落在范围内False不在范围内
------------------------------------------------------------------------------*
}
function IsPtInPoly(ALon,ALat:double;APoints: array of TMyPoint):Boolean;
var
iSum,iCount,iIndex:Integer;
dLon1,dLon2,dLat1,dLat2,dLon:double;
begin
Result:
= False;
if (Length(APoints) < 3 ) then
begin
Result:
= False;
Exit;
end ;
iSum:
= 0 ;
iCount:
= Length(APoints);
for iIndex: = 0 to iCount - 1 do
begin
if (iIndex = iCount - 1 ) then
begin
dLon1:
= APoints[iIndex].X;
dLat1:
= APoints[iIndex].Y;
dLon2:
= APoints[ 0 ].X;
dLat2:
= APoints[ 0 ].Y;
end
else
begin
dLon1:
= APoints[iIndex].X;
dLat1:
= APoints[iIndex].Y;
dLon2:
= APoints[iIndex + 1 ].X;
dLat2:
= APoints[iIndex + 1 ].Y;
end ;
if ((ALat >= dLat1) and (ALat < dLat2)) or ((ALat >= dLat2) and (ALat < dLat1)) then
begin
if (abs(dLat1 - dLat2) > 0 ) then
begin
dLon:
= dLon1 - ((dLon1 - dLon2) * (dLat1 - ALat)) / (dLat1 - dLat2);
if (dLon < ALon) then
Inc(iSum);
end ;
end ;

end ;
if (iSum mod 2 <> 0 ) then
Result:
= True;
end ;

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论