【发布时间】:2013-10-27 17:02:47
【问题描述】:
我正在尝试编写一个 SQL 查询来确定给定点是否在多边形中。 (我使用的是 SQL Server 2008 R2)。
我在关注 this tutorial (只需复制/粘贴它并更改一些表名),它几乎可以工作,但它根本不精确。例如,让我们考虑一个坐标为 :P = 45.7664, 4.87383 的给定点。
如果你用 4 个顶点坐标在这个点周围画一个小多边形(一个近似正方形):S = 45.97215 4.693909, 45.687 4.674683, 45.73302 5.460205, 46.05227 5.366821, 45.97215 4.693909
下面链接中给出的过程回答了该点不在多边形中,而它是...
这是输出(带有我自己的格式文本):
(多边形 20 是上面的多边形)
但是,如果您将正方形放大(在我的测试中放大了 10 倍),则程序会回答我的观点在正方形中。
所以,我正在寻找另一种更精确的算法。
这是我的 VERTICE 表,包含我的数据库的每个多边形的所有顶点坐标
我需要检查所有多边形(有几千个),如果传入参数的给定点在多边形中(如果是,是哪一个)。我可以自己完成循环,但我错过了正确的 Point in polygon 算法。
有人可以帮我吗? 非常感谢。
摘要
对应的SQL提琴:http://sqlfiddle.com/#!3/0caa4/1
【问题讨论】:
-
如果数据库中有大量记录,它的性能很差,我尝试了超过 1600000 条记录的查询,平均需要 2 分钟才能完成。
-
嗨 Jitendra,这是一个老问题,但该项目仍在开发中(这是一个个人项目)。我用@Ben Thul 的解释实现了我的链接中给出的算法,它完美地工作,但我从来没有尝试过这么多的记录。您可以建议一个更好的算法作为答案,欢迎!
标签: sql-server algorithm sql-server-2008 polygons point-in-polygon