我有一个 PostgreSQL 数据库,其中表的一列中包含 KML 数据。我使用 postGIS 命令来查询它,查询如下:
SELECT ST_geomFromKML(geometry)
ST_Intersects(ST_SetSRID(ST_Buffer(ST_MakePoint(11.255492,43.779251),0.002), 4326), ST_GeomFromKML(geometry)) as intersect,
ST_SetSRID(ST_Buffer(ST_MakePoint(11.255492,43.779251),0.002), 4326)
FROM mydb
WHERE
ST_Intersects(ST_SetSRID(ST_Buffer( ST_MakePoint(11.255492,43.779251),0.002), 4326), ST_GeomFromKML(geometry))
LIMIT 1
在geometry
列中,数据存储为KML,如下所示:
<Polygon><outerBoundaryIs><LinearRing><coordinates>8.198905,40.667052 8.201007,40.667052 8.201007,40.665738 8.20127,40.665738 8.20127,40.664688 8.201532,40.664688 8.201532,40.663111 8.20127,40.663111 8.199956,40.663111 8.199956,40.663374 8.199693,40.663374 8.199693,40.664425 8.197591,40.664425 8.197591,40.665476 8.198905,40.665476 8.199168,40.665476 8.199168,40.666789 8.198905,40.666789 8.198905,40.667052</coordinates></LinearRing></outerBoundaryIs></Polygon>
因此,我使用 ST_geomFromKML
将数据转换为几何图形,然后搜索围绕该点创建的圆的交点。
我想将数据库迁移到 MySQL,并且想使用它的空间功能,但我找不到像使用 PostGIS 那样在 MySQL 中使用/转换 KML 数据的方法。
有办法吗?
最佳答案
我想尝试以 MySQL 可以读取的格式导出几何图形是值得的,例如WKT(众所周知的文本)。根据您的问题,我假设您确实将几何图形以 KML 形式存储在文本或 xml 列中,所以我相信这里的内容会对您有所帮助:
测试数据
CREATE TABLE t (kml TEXT);
INSERT INTO t VALUES ('<Point><coordinates>8.54,47.36</coordinates></Point>');
以 CSV 格式导出到标准输出(客户端)
COPY (SELECT ST_AsText(ST_geomFromKML(kml)) AS geom FROM t) TO STDOUT CSV;
query returned copy data:
POINT(8.54 47.36)
作为 CSV 导出到服务器中的文件中 - 请记住,系统用户 postgres
需要在给定目录中具有写入权限。
COPY (SELECT ST_AsText(ST_geomFromKML(kml)) AS geom FROM t) TO '/path/to/file.csv';
关于mysql - 将空间数据从 PostGIS 导入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59445256/