当前位置: 首页 > news >正文

使用命令行工具 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工具进行数据转换时如果所有的命令都写在一行,那么显示效果不仅不美观,也不具有可读性,所以可按照转换内容对其进行分行展示。在windowslinux系统中换行符略有差别。

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
http://www.rkmt.cn/news/117841.html

相关文章:

  • SciPy 安装指南
  • FreeModbus+STM32F407IGT6标准库项目代码
  • 9个AI论文工具,自考本科轻松搞定!
  • Java常见技术分享-09-模版方法模式
  • MongoDB Java
  • 2025 最新版 Kali Linux 教程:零基础小白入门到精通,工具使用全攻略一篇搞定!
  • 单页应用 (SPA):为什么现在的网页这么快?
  • 动态规划算法<1>为什么动态规划总让你头疼?看完这篇彻底入门
  • 8个AI论文工具,专科生轻松搞定毕业写作!
  • WebUploader如何配合Vue2实现百万文件上传的批量处理?
  • HTML 视频(Video)播放
  • Python 爬虫实战:解析 JSON 数据接口的爬虫开发
  • 彻底搞懂YOLOv1:R-CNN与YOLO架构的区别在哪里?
  • 个人学习25.12.17 hunsec ctf-web week4
  • 如何用Java25编译Java17的项目
  • 国密加密在JQuery大文件上传中的实现思路与代码?
  • Java 日期时间处理详解
  • 揭秘volatile关键字:让Java并发编程不再“卡壳”
  • 深入JVM(三):JVM执行引擎
  • 工业边缘节点应用:DeepSeek处理实时产线数据的低功耗配置方案
  • 【课程设计/毕业设计】基于Java+SpringBoot的公务员助学系统的微信小程序基于springboot+微信小程序的公务员助学系统小程序的设计与实现【附源码、数据库、万字文档】
  • 供应链区块链 App 开发:从溯源逻辑到智能合约编写的流程
  • 快速幂算法的基础和扩展
  • 35、Linux 常见问题解答与技术要点解析
  • 36、LPI认证计划与Linux基础技能解析
  • Flutter 跨平台开发深度指南:从入门到原理全解析
  • Github Copilot 实战: 使用 Copilot AI + Blazor 编一个五子棋游戏
  • 探索逆合成孔径雷达稀疏成像:短孔径与压缩感知的奇妙融合
  • 小程序毕设项目:基于springboot+微信小程序的公务员助学系统小程序的设计与实现(源码+文档,讲解、 调试运行,定制等)
  • 技术成果的价值量化方法