gpt4 book ai didi

php - MySQL LineString 与 Linestring 或 Polygon 相交

转载 作者:行者123 更新时间:2023-11-29 02:04:04 25 4
gpt4 key购买 nike

我对 mySQL 空间函数有疑问。我的目标是查明 LINESTRING 对象是否穿过 POLYGON 对象。为了确定我已经尝试用两个 LINESTRING 对象进行试验以确定它们是否交叉。

SET @ls='LINESTRING (0 0, 1 1, 2 2, 3 3)'; -- original linestring
SET @lp='LINESTRING (0 1, 1 2, 2 3, 3 4)'; -- parallel linestring
SET @lx='LINESTRING (0 3, 1 2, 2 1, 3 0)'; -- crossed linestring

我已经尝试了几个函数来实现我的目标:

SELECT crosses(GeomFromText(@ls), GeomFromText(@lx)); -- crossing linestrings
returns 0;

SELECT intersects(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings
returns 1;

SELECT overlaps(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings
returns 1;

我明白这是边界比较或某事的问题,但有没有办法(或功能,或简单的解决方案)如何达到我的目标?其他可能性是检查 LINESTRING 中的 POINT 是否在 POLYGON 内,但我想知道是否有另一种方法可以做到这一点?

MySQL Great Circle intersection (do two roads cross?) 中提供的解决方案不幸的是对我没有帮助..

最佳答案

来自 的 MySQL 文档 'Functions That Test Spatial Relationships Between Geometries' 在 5.6.1 中:

MySQL originally implemented these functions such that they used object bounding rectangles and returned the same result as the corresponding MBR-based functions. As of MySQL 5.6.1, corresponding versions are available that use precise object shapes. These versions are named with an ST_ prefix. For example, Contains() uses object bounding rectangles, whereas ST_Contains() uses object shapes.

As of MySQL 5.6.1, there are also ST_ aliases for existing spatial functions that were already exact. For example, ST_IsEmpty() is an alias for IsEmpty()

例如,您的 intersects 函数返回 true,因为两个形状的最小外接矩形 (MBR) 确实 相交。如果您改用 ST_Intersects(假设您有 MySQL 5.6.1 或更高版本),那么它将按预期返回 false。这些函数可用于点、线和多边形 - 因此也应该解决您的“线相交多边形”查询(如果需要, ST_Crosses 也存在)。

关于php - MySQL LineString 与 Linestring 或 Polygon 相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9617531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com