mysql - 如何在mysql中实现地理空间引用系统

标签 mysql geometry buffer gis geojson

我想在一个具有纬度和经度的点内创建一个距离 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/

相关文章:

更改权限后 phpmyadmin 无法在 ubuntu xampp 中工作

mysql - 如何读取mysql binlog

mysql - VPS 服务器 LAMP - 建立数据库连接时出错

python - 查找一条线上距第一个点 X 轴特定距离的点

c++ - 是我还是Boost Track SVN(Boost Geometry Extension Dissolve)的一部分无法编译?

jquery - 使用缓冲区中的 drawImage 更新 Canvas 不要使用 drawImage 应用操作

mysql float 最小值列

java - 测试一个点是否位于三角形上

go - 我们如何在 golang 中停止 bufio 扫描?

java - 了解为什么 Java 模式与缓冲的 .java 文件中的不正确文本相匹配?