`
linuxstuding
  • 浏览: 1259367 次
文章分类
社区版块
存档分类
最新评论

判断一个点是否落在多边形内

 
阅读更多

一、背景:

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

二、实现代码(delphi)


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

{*------------------------------------------------------------------------------
判断指定的经纬度坐标点是否落在指定的多边形区域内
@paramALon指定点的经度
@paramALat指定点的纬度
@paramAPoints指定多边形区域各个节点坐标
@returnTrue落在范围内False不在范围内
------------------------------------------------------------------------------*
}
functionIsPtInPoly(ALon,ALat:double;APoints:arrayofTMyPoint):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);
foriIndex:=0toiCount-1do
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(iSummod2<>0)then
Result:
=True;
end;
分享到:
评论

相关推荐

    Go-polygon-判断点是否在一个多边形区域内支持凸多边形与凹多边形

    在计算机图形学中,判断一个点是否位于一个多边形内部是一项基本任务,这对于游戏开发、地理信息系统、图像处理等领域都非常重要。本知识点将详细介绍如何在Go语言中实现这个功能,支持凸多边形和凹多边形。我们将...

    判断线段相交及点是否在多边形内

    判断一个点是否在多边形内通常采用射线法,也称为“穿过边缘”方法。这个方法的基本思想是从该点向任意方向画一条射线,然后统计这条射线与多边形边界的交点数量: 1. **选择射线**:选取点P和一个方向向量,例如向...

    判断指定的经纬度坐标点是否落在指定的多边形区域内

    在矢量多边形区域中,一个坐标点的位置是否在区域内 算法: C#代码,适用于任意多边形(凹凸多边形),但是没有考虑实际误差范围的情况(应用在实际问题解决中,接近区域一定范围是可以忽略的,这个误差范围考虑后算法的...

    点在多边形中判断程序(IDL版)

    点是否落在多边形中的判断,采用向上射线算法,在多边形中返回值为1,在边上为0,在多边形外返回-1

    判断点与多边形的位置关系

    2. **点在多边形边界上**:如果点P落在多边形的边界线上,那么该点属于多边形的边界。这通常通过比较点P的坐标与多边形顶点坐标或边的端点坐标来判断。 3. **点在多边形外部**:除了在内部和边界上的情况,其余所有...

    判断一系列坐标点是否在封闭图形内

    本篇将详细讲解如何利用Matlab来实现这个功能,特别是判断一个点是否在三角形内的算法。 首先,我们需要理解基本的几何概念。一个封闭图形是由多个顶点(坐标点)通过线段连接形成的,如三角形、四边形等。在二维...

    C#判断是否是简单多边形

    在实现过程中,可以使用各种优化策略,比如使用Winding Number算法,通过计算测试点到多边形的环绕数来快速判断点是否在多边形内,这同样能间接判断多边形是否自交。或者,可以利用Boyer-Moore算法,它在最坏情况下...

    判断点是是否在面中的JAVA代码

    判断点是是否在面中的JAVA代码 判断一个指定的经纬度点是否落在一个多边形区域内

    C 代码 应用蒙特卡罗方法来估计函数的积分 在 2D 多边形的内部.rar

    4. **计数器和循环**:一个计数器用来记录落在多边形内的点的数量,通常在循环结构中更新。循环次数决定了随机点的数量,这是影响结果准确性的关键因素。增加点的数量可以提高积分估计的精度,但也会增加计算时间。 ...

    turf-within:返回点的特征集合,表示落在多边形集合中的所有点

    草皮内 模块内的草皮turf.within(points, polygons) 获取一组 Point|points 和一组 Polygon|polygons 并返回落在多边形内的点。参数范围类型描述points FeatureCollection.&lt;点&gt; 输入点polygons FeatureCollection...

    点到多边形的距离:计算点到二维多边形的距离,以及多边形上离点最近的点-matlab开发

    这个距离可以是点到多边形任意边的垂线距离,如果该垂线落在多边形内部,则距离为该垂线长度;如果垂线落在多边形外部,那么距离是垂线与多边形最近边缘的实际距离。 Michael Yoshpe的函数解决了这个问题,它采用了...

    凸多边形闭包算法(相对投影法)

    3. **遍历边**: 继续检查后续边,直到找到一个使得投影点落在其延长线上的边。这表明找到了闭合的位置。 4. **闭合多边形**: 在找到的边的另一端添加一个新顶点,即当前顶点的投影点,这样就形成了闭合的凸多边形。 ...

    vc++进行多边形编辑

    当用户点击屏幕时,程序需要计算鼠标位置与多边形的关系,判断是否落在某个多边形内。这涉及到点到多边形的距离测试,可能需要使用射线与多边形的交点检测算法,如Ray-Casting。 4. **序列化保存**:序列化是将对象...

    Polygon 多边形UI

    这涉及到计算机图形学中的几何算法,如凸包算法(如Graham扫描或Jarvis步进法)和射线检测算法等,用来判断鼠标点击是否落在特定的多边形内。这些算法的实现对于确保用户能够准确地与多边形元素交互至关重要。 为了...

    查找点线不一与等高线内插

    以下是一段用于判断点是否在多边形内的VBA代码片段,它接收一个点对象Pobj和一个多边形实体Ent作为参数: ```vb Public Function isPtInPolyLines(ByVal Pobj As AcadEntity, ByVal Ent As AcadEntity) As Boolean ...

    从点到折线或多边形的距离:查找从点到折线或闭合多边形的最小距离-matlab开发

    点j到线段k的距离定义为当点j在这条线上的投影落在线段k的内部时,该点到通过顶点v(k)和v(k+1)的直线的距离; 当投影落在段 k 之外时,到最近的 v(k) 或 v(k+1) 个顶点。 从点 j 到多段线的距离定义为该点到所有...

    航天远景机试题

    - 在 `Poly` 函数中,首先排除了点正好落在多边形边界上的情况,这种情况下直接输出提示信息并返回。 - 对于每条边界线段,如果线段两端点的 y 坐标值一高一低,并且测试点的 x 值小于线段延长线上的 x 值,那么...

    LakeArea_c_随机区域_MonteCarlo_montecarlomatlab_

    对于几何问题,如求解多边形的面积,我们可以通过生成大量的随机点,然后判断这些点是否落在多边形内,从而估算出区域面积。这种方法的优势在于,即使面对非常复杂的形状,也能得到较为精确的结果。 二、随机多边形...

Global site tag (gtag.js) - Google Analytics