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

探讨ArcGIS、QGIS与PostgreSQL在处理数字类型数据时的差异,尤其关注数据类型转换问题,如整型与双精度型在不同软件间的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人接触比较多的是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.youkuaiyun.com/cleverysm/article/details/2114006

### QGIS 中浮点型字段类型的使用方法 #### 1. 浮点型字段的基础概念 在地理信息系统 (GIS) 软件中,如 QGIS ArcGIS,浮点数通常用于表示具有小数部分的数据。QGIS 支持两种主要的浮点类型:`float` `double`。其中,`float` 是单精度浮点数,而 `double` 则是双精度浮点数[^1]。 - **Float 类型**: 占用 4 字节内存空间,提供大约 7 位有效数字。 - **Double 类型**: 占用 8 字节内存空间,提供约 15 至 16 位有效数字。 对于高精度需求的应用场景(例如科学计算或金融领域),推荐使用 `double` 类型来减少舍入误差的影响。 #### 2. 创建管理浮点型字段 在 QGIS 的属性表编辑器中创建新字段时,可以通过指定字段名称、数据类型以及长度参数完成定义: ```sql -- SQL 示例语句 ALTER TABLE your_table ADD COLUMN new_field DOUBLE PRECISION; ``` 上述命令将在 PostgreSQL 数据库中的某张表格里新增一列名为 `new_field` 的双精度数值型字段[^2]。 #### 3. 设置精度与显示格式 尽管数据库内部能够精确保存 double 型变量的所有信息,但在可视化阶段可能需要调整其呈现方式以便于阅读理解。这一步骤可通过修改矢量图层的渲染规则实现——具体操作路径为右键目标图层 -> 属性对话框 -> 样式选项卡下的分类列表项配置界面。 另外值得注意的是,虽然理论上 double 可以容纳极大范围内的实数值,但由于计算机硬件架构限制实际应用过程中仍可能存在溢出风险或者因超出可分辨界限而导致近似处理的情况发生。 #### 4. 解决由不同软件间兼容性引发的问题 鉴于之前提到过ArcGISPostgreSQL bigint映射到本地double而非int64的做法, 如果希望维持原始整数量级而不受潜在的小数化影响,则建议考虑以下几种策略之一: - 将源端导出为 shapefile 或 geojson 文件后再导入目的平台; - 自定义脚本程序执行批量转换前后的验证工作流; - 在项目初期统一规划好各参与方使用的数据结构标准并严格执行之; 以上措施均有助于缓解跨平台协作期间可能出现的数据失真现象。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值