我想在服务器端仅使用 C# 检测基于纬度/经度的坐标是否在由基于纬度/经度的点组成的区域(多边形)内。我相信正确的方法是光线投射,但也许已经有一个 C# 实现,因为它不是微不足道的?
此外,我了解 SQL Server 具有一些几何功能,STIntersects
但为了使用它,我需要同时运行 SQL Server 2008,并且每次检查都会涉及数据库连接,这是不受欢迎的。
我想在服务器端仅使用 C# 检测基于纬度/经度的坐标是否在由基于纬度/经度的点组成的区域(多边形)内。我相信正确的方法是光线投射,但也许已经有一个 C# 实现,因为它不是微不足道的?
此外,我了解 SQL Server 具有一些几何功能,STIntersects
但为了使用它,我需要同时运行 SQL Server 2008,并且每次检查都会涉及数据库连接,这是不受欢迎的。
由于球体是平面的局部微分同胚,因此您可以使用任何适用于笛卡尔平面的算法,例如这个 SO question。如果您的多边形包含一个极点,您只需要做平移坐标的工作。根据您的用例,也许您可以拒绝这些输入。
我在互联网上闲逛了一下,找到了这个链接。
该示例是用 C 编写的,但看起来很容易适应 C# 和 Long/Lat 坐标。您需要记住交叉线(NS/EW),并在必要时添加代码以进行补偿,或者在运行函数之前对 LatLong 值进行十进制转换(West 和 South 用 < 0 的值表示)。