2

我有一个 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,并且想使用它的空间功能,但是我没有找到一种方法来使用/转换 MySQL 中的 KML 数据,就像我在 PostGIS 中所做的那样。

有没有办法做到这一点?

4

2 回答 2

2

我想尝试以 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';
于 2019-12-22T20:01:06.980 回答
0

是的,我也是这样做的(来自 postgres 的 geom -> wkt -> mysql -> 来自 mysql 的 geom)。

为了完成,我使用:

pg_dump --column-inserts --data-only

像在 Mysql 中一样获得 INSERT。在这里只剩下在 MySQL 中创建表,从 Postgres 中删除我的 INSERT 之前和之后的内容,删除“模式。 ”然后跳到 MySQL 中!

于 2021-10-21T09:43:34.233 回答