我想在一个具有纬度和经度的点内创建一个距离 10m 的缓冲区。所以我尝试了
SET @json = ST_GeomFromGeoJSON('{"type": "Point", "coordinates": [139.445699080589, 35.507941895691]}');
SELECT ST_AsText(ST_Buffer(@json,10));
但是我得到了错误:
[22001][3618] Data truncation: st_buffer(POINT, ...) has not been implemented for geographic spatial reference systems.
在这种情况下如何实现地理空间?
最佳答案
这不是您作为用户可以实现的。这个错误告诉你MySQL本身没有为地理SRS的情况实现ST_Buffer函数。
问题是 SRS 有两种类型 - 投影(平面 map ,也称为笛卡尔)和地理(椭球上)。在其他系统中,它们通常由单独的类型、几何(平面)和地理(椭球)表示。在 MySQL 中,它是一种具有投影或椭球 SRS 的类型。
椭圆体上的一些算法更复杂,因此 MySQL 空间中的某些功能尚未针对这种情况实现。
您的选择是
1) 如果可能,切换到适当的预计 SRS,
2) 切换到另一个平台,例如支持地理类型 ST_Buffer 的 PostgreSQL + PostGIS,
3)避免 ST_Buffer (当应该使用 ST_DWithin 时,它经常被误用来检查缓冲交集,尽管我不知道你的具体用例)
关于mysql - 如何在mysql中实现地理空间引用系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425399/