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

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

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

ArcGIS数字类型

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

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

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

QGIS数字类型

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

数据类型大小(字节)长度范围length精度范围precision
短整型410 
长整型820 
双精度型82015

有两点注意:

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

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

PostgreSQL数字类型

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

数据类型对应关系

从数字类型的范围来说,我们可以看出,其实最大的是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

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值