检测是否基于纬度/经度的多边形点

我想在服务器端仅使用C#检测基于纬度/经度的坐标是否在由基于纬度/经度的点组成的区域(多边形)内。 我认为这样做的正确方法是光线投射,但也许已经有一个C#实现,因为它不是微不足道的?

此外,我知道SQL Server有一些几何function,如STIntersects但为了使用它,我需要运行SQL Server 2008,每次检查都涉及数据库连接,这是不可取的。

我在互联网上闲逛了一下,发现了这个链接 。

这个例子是用C语言编写的,但看起来很容易适应C#和Long / Lat坐标。 您需要记住交叉线(NS / EW),并添加代码以在必要时进行补偿,或者在运行函数之前对LatLong值进行十进制转换(West和South用值<0表示) )。

由于球体是平面的局部微分形态,因此您可以使用任何适用于笛卡尔平面的算法,例如此SO问题 。 如果多边形包含一个极点,您只需要翻译坐标。 根据您的使用情况,您可以拒绝这些输入。