【PythonGIS】解决GIS属性表、矢量字段乱码,中文乱码

        我们平时在使用代码处理矢量数据时,可能会出现矢量字段出现乱码的情况。同样有什么打开别人发的矢量文件有可能也会出现这种情况。那么我们该如何解决这个问题,让我们属性表中的中文字符正常显示呢?今天就和大家一起分享一下。

1.原因

        ArcGIS10.2之前版本,Shapefile根据Locale进行编码,即注册表中的common—codepage—dbfDefault。而ArcGIS10.2之后版本(常用的10.6、10.7等),Shapefile一般是UTF-8编码,ArcGIS会先读取dbf头文件LDID中的编码,然后是cpg文件,最后是codepage。简单理解就是读取文件使用的编码类型和文件实际存储的编码类型不一致!

2.Shapefile文件的构成

  • 主文件(.shp)-----存储地理要素的几何图形
  • 索引文件(.shx)-----存储图形要素与属性信息索引
  • dBASE表文件(.dbf)-----存储要素信息属性的dBase表,包含各个实体的属性特征记录
  • 空间参考文件(.prj)-----存储投影信息
  • 仿射变换参数文件(.tfw)-----存储左上角的仿射地理变换参数
  • 几何体的空间索引文件(.sbn 和 .sbx)
  • 字符编码的描述文件(.cpg)-----存储字符编码类型的信息

3.解决方案

 1)修改cpg文件(不推荐)

        cpg文件中定义了字符编码的描述,即字符是使用什么类型进行编码的。在同目录下里创建同名的.cpg 文件,文本内容写oem或者936。内容具体的需要对照dbf的编码来,下面有可以查询编码类型的代码。结果需要去编码查询网站中找到对应的类型。

import structpath_dbf = 'B:/绿地.dbf'
dat = open(path_dbf, 'rb').read(30)[29:]
code = struct.unpack('B', dat)[0]
print(code, hex(code))

 2)增加定义编码的代码(推荐)

        这个方法首先你要会使用Python,如果你是存依赖于GIS工作学习的,就不用看这个方法了。我们只需要在代码中添加编码类型即可!二选一,都试一试。这行代码放在创建矢量图层之前即可,你可以放在最前面。

gdal.SetConfigOption("SHAPE_ENCODING", "UTF-8")
# gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES") 
# 中文路径问题

        有些博主分享的什么修改注册表啥的,我没搞成功过,所以这里就不分享给大家了。同时修改.cpg这个文件成功率也很低,因为ArcGIS好像读取并使用它的优先率低,如果shp的元数据里定义了类型,你修改cpg文件它也不读。所以还是推荐大家用代码搞定,目前为止,每次都能成功!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79592.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据中心液冷服务器详情说明

目录 前言 何为液冷服务器? 为什么需要液冷? 1.数据中心降低PUE的需求 2.政策导向 3.芯片热功率已经达到风冷散热极限 4.液冷比热远大于空气 液冷VS风冷,区别在哪? 1.液冷服务器跟风冷服务器的区别 2.液冷数据中心跟风冷…

MATLAB的输入与输出函数

标题 输入:input() 1. 输入单个数值2. 输入字符串3. 输入以空格隔开的一行数值4. 输入以空格与换行符隔开的多行数值输出 1. disp() (1)输出单个数值(2)输出一维数组(3)输出矩阵(4)输出字符串2. fprintf() (1)输出格式化的单个数值(2)输出格式化的一维数组(3)输出格…

postman导入json脚本文件(Collection v1.0、Collection v2.0)

1. 以postman v8.5.1 版本为例 2. 在postman v5.0.2 低版本中导出json脚本文件, 请选择Collection v2.0 Export - Collection v2 3. 在postman v8.5.1 版本 导入 json脚本文件 Import - Collection v2 - Export - Import

学习尚硅谷HTML+CSS总结

今天主要学习了颜色像素的四种表达方式,在没学习之前也只会一种RGB颜色的表达方式,虽然其他三种使用的比较少,但有些网页会用其他的表达方式写的我们学过之后就会看得懂,还有文本的设置,字体等等,这些都是后…

redis缓存穿透、击穿、雪崩介绍

缓存穿透 概念 缓存穿透指某一特定时间批量请求打进来并访问了缓存和数据库都没有的key,此时会直接穿透缓存直达数据库,从而造成数据库瞬时压力倍增导致响应速度下降甚至崩溃的风险; 解决方案 一、通过布隆过滤器解决 原理:将…

springboot(40) : 数据断流告警

检测逻辑 package com.alibaba.gts.flm.push.data.client.service;import com.alibaba.fastjson.JSONObject; import com.alibaba.gts.flm.push.data.client.common.util.DateUtil; import com.alibaba.gts.flm.push.data.client.service.model.FcoWarningKeyDTO; import com.…

React 全栈体系(七)

第四章 React ajax 一、理解 1. 前置说明 React本身只关注于界面, 并不包含发送ajax请求的代码前端应用需要通过ajax请求与后台进行交互(json数据)react应用中需要集成第三方ajax库(或自己封装) 2. 常用的ajax请求库 jQuery: 比较重, 如果需要另外引入不建议使用axios: 轻…

vue 使用canvas 详细教程

Vue.js 中使用 Canvas Vue.js 是一个流行的 JavaScript 框架,用于构建用户界面。它提供了一种简洁的方式来管理和渲染数据,同时也支持与其他库和工具的集成。要在 Vue.js 中使用 Canvas,您可以按照以下步骤进行操作: 在 Vue.js …

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…

Drozer安装

Drozer安装包下载 https://labs.withsecure.com/tools/drozer Drozer需要的python包下载 pip install "pip<21.0" pyOpenSSL pip install "pip<21.0" service_identity pip install "pip<21.0" twisted pip install "pip<…

.netcore对传输类设置区分大小

.Net Core中内置了对Json的转化与解析 可将PropertyNameCaseInsensitive false 设置为区分大小写。

竞赛选题 基于机器视觉的行人口罩佩戴检测

简介 2020新冠爆发以来&#xff0c;疫情牵动着全国人民的心&#xff0c;一线医护工作者在最前线抗击疫情的同时&#xff0c;我们也可以看到很多科技行业和人工智能领域的从业者&#xff0c;也在贡献着他们的力量。近些天来&#xff0c;旷视、商汤、海康、百度都多家科技公司研…

国家网络安全周 | 保障智能网联汽车产业,护航汽车数据安全

9月13日上午&#xff0c;2023年国家网络安全宣传周汽车数据安全分论坛在福州海峡国际会展中心正式举办。本次分论坛主题是“护航汽车数据安全&#xff0c;共促产业健康发展”&#xff0c;聚焦汽车数据安全、个人信息保护、密码安全、车联网安全保险等主题。 与此同时&#xff…

Python requests爬虫豆瓣图片返回数据为空。

爬个豆瓣图片&#xff0c;记录个小问题&#xff0c;发现爬取豆瓣原图的时候拿不到数据&#xff0c;返回为空&#xff0c;爬小图可以&#xff0c;爬其他网站的也都正常&#xff0c;最后发现是header中If-Modified-Since这个参数的原因&#xff0c;加上了就拿不到数据&#xff0c…

辊轧机液压系统泵站比例阀放大器

液压系统主要由液压泵、电机、液压缸、油箱、高压软管等组成。 液压泵将机油从油箱吸入&#xff0c;通过高压软管送至液压缸中&#xff0c;完成动力转换。液压泵的驱动由电机通过皮带或轮齿传动完成。 液压折弯机的液压油流动路线主要分为液压油箱、吸油过滤器、液压泵、主控…

《C和指针》笔记23: 指针的指针

int a 12; int *b &a;现在有了第三个变量c c &b;c的类型是什么&#xff1f;显然它是一个指针&#xff0c;但它所指向的是什么&#xff1f;变量b是一个“指向整型的指针”&#xff0c;所以任何指向b的类型必须是指向“指向整型的指针”的指针&#xff0c;更通俗地说…

HarmonyOS学习路之方舟开发框架—学习ArkTS语言(状态管理 七)

PersistentStorage&#xff1a;持久化存储UI状态 前两个小节介绍的LocalStorage和AppStorage都是运行时的内存&#xff0c;但是在应用退出再次启动后&#xff0c;依然能保存选定的结果&#xff0c;是应用开发中十分常见的现象&#xff0c;这就需要用到PersistentStorage。 Pe…

ESP32-BOX的组件配置添加核心部分详细介绍

前言 &#xff08;1&#xff09;为了方便开发&#xff0c;ESP32提供了组件库方便用户进行二次开发。 github仓库&#xff1b;gitee仓库 &#xff08;2&#xff09;在学习本章之前最好有CMake或者Makefile的基础&#xff0c;如果没有也不要慌&#xff0c;有的话最好。 &#xff…

def和class的区别

fed浅谈Python内 def 与 class 的区别--知识点整理&#xff08;B站 - BV11g411w73x&#xff09;_pythonclass和def的区别_奋进的小咸鱼的博客-CSDN博客def 是用于函数的封装代码如下&#xff1a;def jianfa(a,b): print(a-b) jianfa(100,9)输出结果&#xff1a;91class可用于多…

驱动开发,udev机制创建设备节点的过程分析

1.创建设备文件的机制种类 mknod命令&#xff1a;手动创建设备节点的命令 devfs:可以用于创建设备节点&#xff0c;创建设备节点的逻辑在内核空间&#xff08;内核2.4版本之前使用&#xff09; udev:自动创建设备节点的机制&#xff0c;创建设备节点的逻辑在用户空间&#xf…