内容介绍
经常会有朋友问:为什么自己的shp数据,字段名只能放三个汉字;而别人的shp数据,字段名能取四五个汉字?
为什么呢?同样都是shp,怎么还长短不一了呢? 本篇推送,将讲一讲:短的为什么短?长的为什么长?以及怎么把短的变长?
shp是个啥?
shp是一种最常见的地理数据格式,大多数人对这种格式都不陌生。
关于shp的详细介绍,可以自行前往这个地址去看。 https://qa.nsidc.org/sites/nsidc.org/files/files/noaa/iicwg/1999/shapefile.pdf
看英文不习惯的话,也可以看翻译好的中文版。 https://blog.csdn.net/qq_35732147/article/details/82380610
shp文件组织
从上面俩网址的内容中,我总结一下:
shp格式不是一个文件,是一组文件。shp是由多个文件组成的(这几个是必须的):
- .shp – 主文件,存储几何实体;
- .shx – 索引文件,存储几何实体索引;
- .dbf – dBase数据库,存储属性信息。
除了以上三个文件,还可以有其它文件的支持(这些是可选的):
- .sbn 和 .sbx–;
- .cpg – 文件编码信息;
- .prj – 坐标信息;
- .shp.xml – 元数据;
- ……
一份完整的shp数据,必须要包含shp、shx、dbf三种类型的数据。如果在工作中收到了少于3这三个文件的shp数据,直接把本文发给对方就行。如果少了坐标定义信息,直接把本文发给对方就行(少了prj文件)。如果shp数据打开乱码,直接把本文发给对方就行(可能是少了cpg文件,默系统默认编码跟文件编码不一致)。而有些shp数据的字段能放五个汉字,有些只能放三个,问题的关键就在这个cpg(文件编码类型里)。
编码
在国内,经常会用到的编码类型有这么两种种:utf8、gbk。
在前面的内容中介绍过:shp数据的属性是存在.dbf文件中的。dbf类型的文件字段名长度最长只能有10个字节。
utf8编码的话,一个字母占一个字节,一个汉字要占3个字节; gbk编码(也就是gb2312、cp936)的话,一个字母占一个字节,一个汉字要占2个字节。
经过上面的介绍,相信大家基本上就能明白:为什么有些shp字段名是中文,可以放五个汉字(gbk,五个汉字恰好10字节);有些shp字段名是中文,却只能放三个汉字(utf8,三个汉字占9字节)。真正的原因就是:编码不一样啊!
实操
说了这么多,来看看怎么来创建吧。以QGIS为例,我创建了不同编码的两个图层,具体如下面视频所示:
友情提示,ArcGIS在创建shp的时候不支持设置编码。使用ArcGIS的话,可以百度下怎么修改默认编码(改注册表就行)。
总结
看到这里,相信聪明的你已经知道应该怎么做才能让shp的字段名变成五个汉字的长度。如果你觉得五个还不够,那可以用数据库,gdb的字段名可以很长很长,长到一定可以满足你的需求