首页 > 解决方案 > 将多边形坐标转换为 PostgreSQL 可以理解的格式

问题描述

我将 Django 与 PostGIS 一起使用,并尝试在我的 Postgres SQL 中导入一些数据。我的数据库中有一个 geometry(Polygon, 4326) 列:

poly            | geometry(Polygon,4326) | not null

现在我想将一些 CSV 数据导入我的数据库:这是我的数据:

poly, district_number
"((51.356568, 35.765461), (51.356589, 35.765382), (51.356461, 35.76536), (51.356441, 35.765429), (51.356436, 35.765446), (51.356408, 35.765561), (51.356537, 35.765582), (51.356566, 35.76547), (51.356568, 35.765461))", 2
"((51.356568, 35.765461), (51.356589, 35.765382), (51.356461, 35.76536), (51.356441, 35.765429), (51.356436, 35.765446), (51.356408, 35.765561), (51.356537, 35.765582), (51.356566, 35.76547), (51.356568, 35.765461))", 3
....

我正在使用这个命令:

COPY get_house_info_house(poly, district_number)
FROM '/tmp/data.csv' DELIMITER ',' CSV HEADER;

我得到这个错误:

ERROR:  parse error - invalid geometry
HINT:  "((" <-- parse error at position 2 within geometry
CONTEXT:  COPY get_house_info_house, line 2, column poly: " 
((51.356568, 35.765461), (51.356589, 35.765382), (51.356461, 
35.76536), (51.356441, 35.765429), (51...."

我认为 Postgres 无法识别多列格式。我可以将我的数据传输到任何格式,例如 GeoJson 或任何其他格式,但问题是如何将其传输到 Postgres 可以理解的格式。

同样在类似的问题中,我找到了“ST_GeomFromGeoJSON”,但我不知道如何在 CSV 导入中使用它。

标签: databasepostgresqlcsvimportpostgis

解决方案


在 COPY 数据中,您可以使用EWKT格式的几何值,SRID 在开头。

示例(逐字记录;在 CSV 文件的上下文中,该字段将用双引号括起来):

SRID=4326;POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))

请参阅https://postgis.net/docs/UpdateGeometrySRID.html或带有 SRID 的PostGISCOPY几何? 更多。


推荐阅读