无法将GeoJSON几何数据导入PostGIS数据库(值为Null)
解决含Polygon/MultiPolygon的GeoJSON导入PostGIS后geometry字段为空的问题
问题场景
需要将包含Polygon与MultiPolygon类型的GeoJSON文件中的地理数据及区域名称,导入到已提前定义好表结构的PostGIS数据库中。执行ogr2ogr命令后,数据库成功创建38条记录,但geometry字段始终为Null。尝试移除命令中的SQL语句、添加-lco参数等操作均无法解决该问题。
解决方案
1. 修改ogr2ogr命令,指定geometry字段并使用SQLite方言
调整后的ogr2ogr命令需明确指定要导入的geometry字段,并通过-dialect SQLite参数启用SQLite方言,确保OGR能正确解析GeoJSON中的几何对象:
ogr2ogr -f "PostgreSQL" PG:"dbname=your_database user=your_user password=your_password host=your_host" your_data.geojson -sql "SELECT name, geometry FROM your_geojson_layer" -dialect SQLite
注:将命令中的
your_database、your_user、your_password、your_host、your_data.geojson、your_geojson_layer替换为实际的数据库信息、文件路径和GeoJSON图层名。
2. 重建带GIST索引的geometry字段
导入完成后,为geometry字段重建GIST索引,优化地理数据的查询性能:
CREATE INDEX idx_your_table_geometry ON your_target_table USING GIST(geometry);
注:将
your_target_table替换为实际的目标数据库表名。
原理说明
默认情况下OGR使用的SQL方言无法正确识别GeoJSON中的geometry字段映射关系,启用SQLite方言后,OGR可以正确解析GeoJSON中的Polygon/MultiPolygon类型,并将其映射到PostGIS的geometry字段;明确指定geometry字段则避免了字段匹配的歧义。
内容的提问来源于stack exchange,提问作者GeriX
相关产品推荐
相关产品推荐

