在坐标绑定数据数据库中搜索任意多边形区域

发布于 2024-07-14 21:28:01 字数 163 浏览 4 评论 0原文

我有一个关系数据库,其中每个条目都标记为带有纬度/经度坐标的点。 我使用户能够在地图上标记任意多边形,并希望返回多边形内的所有条目。

实现这一目标的最佳方法是什么?

另外,可能值得指出的是,小错误是可以的(即,如果有一种有效的方法将多边形变成一组矩形,那就没问题了)。

I have a relational database where each entry is marked as a dot with latitude/longitude coordinates. I give the user the ability to mark an arbitrary polygon on a map, and want to return all entries that are within the polygonal shape.

What would be the best way to achieve this?

Also, it might be worth to point out that small errors are ok (ie. if there is an effective way to turn the polygon into a set of rectangles, then that is fine).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ゃ人海孤独症 2024-07-21 21:28:01

使用空间扩展,大多数数据库都有这个。
在 MySql 中,您只能将它们与非事务性的 MyISAM 表一起使用。

http://dev.mysql.com/doc/refman/ 5.0/en/spatial-extensions.html

Use spatial extensions, most databases have this.
In MySql you can only use them with MyISAM tables which are not transactional.

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

听风吹 2024-07-21 21:28:01

快速减少要考虑的点数的一种方法是计算多边形的边界矩形(即,仅多边形中点的 min-x、min-y、max-x、max-y),然后选择边界矩形内的点(即 x 位于 min-x 和 max-x 之间,y 也相同)。

当然,并非所有这些点都必须位于多边形内部,但现在您可以使用代码对其进行磨练。

One way to quickly cut down on the number of points to consider is to compute the bounding rectangle for the polygon (i.e. just min-x, min-y, max-x, max-y of the points in the polygon), and then select for points within the bounding rectangle (i.e. where x is between min-x and max-x and same for y).

Of course not all these points are necessarily inside the polygon, but now you can hone it with code.

握住我的手 2024-07-21 21:28:01

一个古老的技巧:

计算连接 <远点><问题点> 穿过多边形任何边界线段的次数。

  • 偶数表示该点在多边形之外
  • 奇数表示该点在多边形内部

An old hack:

Count the number of times a line connecting <point far away> to <point in question> crosses any of the bounding segments of the polygon.

  • Even numbers mean the point is outside the polygon
  • Odd numbers mean it is inside the polygon
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文