使用命令行工具 ogr2ogr 将 CSV 转换为 Shp 数据(二)
前言
❝
ogr2ogr 是一个数据转换工具,可用于在文件格式之间转换简单要素数据。它还可以在转换过程中执行各种操作,如空间或属性选择、减少属性集、设置输出坐标系,甚至在转换过程中重新投影特征。
如有兴趣,可参阅文章:
GDAL 实现将 CSV 转换为 Shp 数据(一)[1]
ogr2ogr 作为 GDAL(Geospatial Data Abstraction Library)库中的一个命令行工具,用于转换和处理地理空间数据。它可以读取多种矢量数据格式(如Shapefile、GeoJSON、KML、GML、PostGIS等),并进行格式转换、坐标转换、属性过滤、几何操作等。
1. 用户环境
本文使用如下用户环境,以供参考。
时间:2025年
系统:Windows 11
Python:3.11.7
GDAL:3.11.1
ogr2ogr:3.9.2
2. 验证 ogr2ogr 工具信息
打开命令行终端,输入命令ogr2ogr --version查看版本信息。如果ogr2ogr正确安装并添加到环境变量,便会输出其版本号。
3. 将CSV转换为Shp数据
原始CSV数据内容显示如下,具有四个字段,分别为“名称”、“地址”、“LATQ”代表纬度,“LNGQ”代表经度。
在命令行终端输入以下命令进行数据转换。
ogr2ogr -f "ESRI Shapefile" E:datatest_dataogr_transform.shp E:datatest_data景点.csv -oo X_POSSIBLE_NAMES=LNGQ,longitude,x,X -oo Y_POSSIBLE_NAMES=LATQ,latitude,y,Y -a_srs EPSG:4326
以下是ogr2ogr工具常用参数解释:
| 选项 | 说明 |
|---|---|
-f "ESRI Shapefile" |
指定输出格式,如“ESRI Shapefile” |
-a_srs EPSG:4326 |
设置空间参考 |
-select "field1,field2" |
选择特定字段 |
-where "value > 100" |
过滤条件 |
-lco ENCODING=UTF-8 |
设置字符编码 |
-oo AUTODETECT_TYPE=YES |
自动检测字段类型 |
-oo SEPARATOR=TAB |
设置分隔符(TAB/COMMA/SEMICOLON) |
-oo X_POSSIBLE_NAMES |
指定经度字段,可书写多个可能值 |
-oo Y_POSSIBLE_NAMES |
指定纬度字段,可书写多个可能值 |
4. 中文转换错误解决办法
由于CSV文件中具有中文字段,直接进行转换工具会报错,无法创建中文字段。此时需要指定正确的字符编码。
在命令中添加-lco ENCODING=UTF-8选项以正确转换中文字符。
ogr2ogr -f "ESRI Shapefile" E:datatest_dataogr_transform.shp E:datatest_data景点.csv -oo X_POSSIBLE_NAMES=LNGQ,longitude,x,X -oo Y_POSSIBLE_NAMES=LATQ,latitude,y,Y -lco ENCODING=UTF-8 -a_srs EPSG:4326
将CSV转换为Shp数据在ArcGIS中的显示结果。
5. 常见字符编码
以下是一些常见编码格式。
# UTF-8(推荐)
-lco ENCODING=UTF-8
# 中文编码
-lco ENCODING=GBK # 简体中文
-lco ENCODING=BIG5 # 繁体中文
-lco ENCODING=GB2312 # 简体中文旧版
# 其他编码
-lco ENCODING=LATIN1
-lco ENCODING=ISO-8859-1
-lco ENCODING=CP1252
6. 数据转换事项
使用ogr2ogr工具进行数据转换时如果所有的命令都写在一行,那么显示效果不仅不美观,也不具有可读性,所以可按照转换内容对其进行分行展示。在windows和linux系统中换行符略有差别。
windows系统进行分行展示时使用符号"^"进行分隔:
ogr2ogr -f "ESRI Shapefile" "E:\datatest_data\ogr_transform5.shp" "E:\data\test_data\景点.csv" ^
-oo X_POSSIBLE_NAMES=LNGQ,longitude,x,X ^
-oo Y_POSSIBLE_NAMES=LATQ,latitude,y,Y ^
-lco ENCODING=UTF-8 ^
-a_srs EPSG:4326
linux系统进行分行展示时使用符号"``"进行分隔
ogr2ogr -f "ESRI Shapefile" "E:\datatest_data\ogr_transform5.shp" "E:\data\test_data\景点.csv" ^
-oo X_POSSIBLE_NAMES=LNGQ,longitude,x,X ^
-oo Y_POSSIBLE_NAMES=LATQ,latitude,y,Y ^
-lco ENCODING=UTF-8 ^
-a_srs EPSG:4326