如何在 mysql 中实现地理空间参考系统
How to implemented for geographic spatial reference systems in mysql
我想在一个具有经纬度的点内从 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 - 投影(平面图,也称为笛卡尔)和地理(在椭球上)。在其他系统中,它们通常由不同的类型表示,几何(平面)和地理(椭圆体)。在 MySQL 中,它是一种具有投影或椭圆 SRS 的类型。
椭圆体上的某些算法更复杂,因此 MySQL 空间中的某些功能尚未针对这种情况实现。
你的选择是
1) 如果可能,切换到适当的预计 SRS,
2) 切换到另一个平台,例如支持 ST_Buffer 地理类型的 PostgreSQL + PostGIS,
3) 避免使用 ST_Buffer(当应该使用 ST_DWithin 时,它经常被误用于检查缓冲交叉点,尽管我不知道您的具体用例)
我想在一个具有经纬度的点内从 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 - 投影(平面图,也称为笛卡尔)和地理(在椭球上)。在其他系统中,它们通常由不同的类型表示,几何(平面)和地理(椭圆体)。在 MySQL 中,它是一种具有投影或椭圆 SRS 的类型。
椭圆体上的某些算法更复杂,因此 MySQL 空间中的某些功能尚未针对这种情况实现。
你的选择是
1) 如果可能,切换到适当的预计 SRS,
2) 切换到另一个平台,例如支持 ST_Buffer 地理类型的 PostgreSQL + PostGIS,
3) 避免使用 ST_Buffer(当应该使用 ST_DWithin 时,它经常被误用于检查缓冲交叉点,尽管我不知道您的具体用例)