0

I am finding a lot on how to find all POINTS that are contained in a circle drawn around a location (using the Haversine formula) in MySQL.

My function should return all polygons that are at least partially intersecting with the circle.

  1. How do I create that circle?

  2. How do I check if a polygon intersects with that circle?

4

2 回答 2

2

您忽略了您是否在 2D 或 3D 中工作。鉴于您说circle的不是sphere,我假设您的意思是 2D。

要查找与圆相交的所有多边形,您需要知道:

a) 每个多边形的原点(更具体地说,多边形的中心)。

b) 圆的原点。

c) 圆的直径(或半径)。

使用这些值,您可以确定圆心与每个多边形的中心之间的距离。如果圆心与多边形中心之间的距离的大小小于圆的半径,则多边形相交。

我不太确定如何将其插入 SQL 查询,因为您首先需要计算每个多边形相对于圆的大小,然后根据圆的半径评估它们。自从我编写 SQL 以来已经有一段时间了,但我想它会类似于以下内容:

  • 收集多边形中心和圆心之间的距离大于半径的所有项目。

请参阅此方便的图像以获取更多说明:

圆形交叉口

这只会提供一种非常粗略和基本的方法来确定交叉点,因为这没有考虑复杂的形状。从本质上讲,这更多地沿着球体与球体相交的线,其中边界球体将包含您的多边形。在某些情况下它可能会提供误报,但您可以轻松地将这些结果传递给更细粒度的碰撞检测,以根据需要过滤掉结果。

希望有帮助!

于 2012-09-20T13:34:46.390 回答
1

这是旧的,但它仍然是搜索此问题时最热门的 Google 搜索结果之一。现有的答案没有用,因为它不能合理地在 MySQL 中使用 - 至少不能以任何具有远程可接受性能的方式实现。

解决方案是将 ST_Buffer 与您的点/半径一起使用:

ST_Buffer(point, radius)

一个示例查询,对于包含包含多边形数据的列“polygon”的表,返回以 mypoint 为中心、半径为 9 的圆相交的行:

SELECT * FROM mytable WHERE ST_Intersects(polygon, ST_Buffer(mypoint, 9))
于 2017-05-13T21:30:48.063 回答