本人接触比较多的是GIS软件包括ArcGIS和QGIS,同时利用postgres+postgis来管理空间数据。相信很多人都是采取相似的组合来处理空间数据,但是最近缺发现一个问题。当数据在三个软件内移动的的时候,由于三者的数据类型存在差别,会出现同一个数据表的字段数据类型发生改变

一般数据类型包括三大类:数字,文本和日期;对于后两者,一般不会出现转换问题,文本的表示方法比较简单,日期有标准化的格式,所以本文集中讨论三者的数字类型。

ArcGIS数字类型

ArcGis常用的数据类型及其大小如下表所示:

数据类型 可存储范围 大小(字节)
短整型 -32,768 至 32,767 2
长整形 -2,147,483,648 至 2,147,483,647 4
浮点型 约为 -3.4E38 到 1.2E38 4
双精度型 约为 -2.2E308 到 1.8E308 8

可以看到,长整形的大小为4个字节,大概就是10位数字;双精度能够存储15位数字的值,这是可存入 8 字节存储空间的最长数字。位于多于此值的数字将被四舍五入,然后以类似于科学记数法的格式进行存储,使它们仅为近似数字。例如,如果输入包含 20 位数的数字 12,345,678,901,234,567,890,则它会被四舍五入,然后存储为 15 位的数字 1.23456789012346E+19。结尾的编码值 E+19 可限定小数点的放置位置。

QGIS数字类型

QGIS本身支持的数据类型(只涉及数字类型)如下表所示:

数据类型 大小(字节) 长度范围length 精度范围precision
短整型 4 10  
长整型 8 20  
双精度型 8 20 15

有两点注意:

1.QGIS的整型都比ArcGIS大一倍。

2.双精度有长度length和精度precision,分别表示数值的长度(包括小数)和小数点后的位数;双精度型虽然能够存储20位的数字,但是一旦数字位超过15位,就会强制转换成科学记数法表示。

PostgreSQL数字类型

ArcGIS,QGIS和PostgreSQL的数据类型及关系

postgreSQL作为一个数据库软件,支持的数据类型很丰富, 除了固定长度的数字类型,还有支持变动的decimal和numeric两种类型。

数据类型对应关系

ArcGIS,QGIS和PostgreSQL的数据类型及关系

从数字类型的范围来说,我们可以看出,其实最大的是PostgreSQL,最小是ArcGIS,三者的数据最大存储范围是不完全对等的,主要体现在整型方面。PostgreSQL存在numeric类型,可以存储极大的数字,而QGIS最大能存储8个字节(20位)的整数,但ArcGIS最大只能存储4个字节(10位)的数字。

如果在postgreSQL用bigint类型的字段,存储一个18位的数字,在QGIS里面会自动转换成对应的integer64(长整)的类型,但是在ArcGIS中,其长整类型无法容纳18位的数字,怎么办呢?ArcGIS目前采取的机制是改变数字类型,用double类型的字段对该数字进行存储。所以用ArcGIS打开postgreSQL出来的数据,有时就会发现,数据类型发生改变了,原来整型变成双精度型了。

如果数字超过20位的该怎么办?就只能变成文本类型进行存储了。

当然三者也有一致的地方,就是对于双精度类型的数据是互通。

 

参考资料:

https://www.yiibai.com/postgresql/postgresql-datatypes.html

http://desktop.arcgis.com/zh-cn/arcmap/10.3/manage-data/geodatabases/arcgis-field-data-types.htm#GUID-70728949-2016-4DB5-A723-5493B4330AE0

https://blog.csdn.net/cleverysm/article/details/2114006

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
猜你喜欢
  • 2021-12-03
  • 2022-12-23
  • 2021-05-18
  • 2021-12-25
  • 2022-01-31
相关资源
相似解决方案