将空间数据从 PostGIS 导入 MySQL
Import spatial data from PostGIS into MySQL
我有一个 PostgreSQL 数据库,它在 table 的一列中包含 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 并且我想使用它的空间函数,但是我找不到 use/convert MySQL 中的 KML 数据的方法我使用 PostGIS。
有办法吗?
我想尝试以 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';
是的,我也这样做了(来自 postgres 的 geom -> wkt -> mysql -> 来自 mysql 的 geom)。
为了完成,我使用:
pg_dump --column-inserts --data-only
如 Mysql 中那样只插入 INSERT。这里只需要在 MySQL 中创建 table,从 Postgres 中删除我的 INSERT 之前和之后的内容,删除“schema." 然后跳进去 MySQL!
我有一个 PostgreSQL 数据库,它在 table 的一列中包含 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 并且我想使用它的空间函数,但是我找不到 use/convert MySQL 中的 KML 数据的方法我使用 PostGIS。
有办法吗?
我想尝试以 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';
是的,我也这样做了(来自 postgres 的 geom -> wkt -> mysql -> 来自 mysql 的 geom)。
为了完成,我使用:
pg_dump --column-inserts --data-only
如 Mysql 中那样只插入 INSERT。这里只需要在 MySQL 中创建 table,从 Postgres 中删除我的 INSERT 之前和之后的内容,删除“schema." 然后跳进去 MySQL!