创建要素类和表时,请为各字段选择数据类型。可用的类型包括多种数字类型、文本类型、日期类型、二进制大对象 (BLOB) 或全局唯一标识符 (GUID)。选择正确的数据类型可以正确存储数据,并且便于分析、数据管理和满足业务需求。
本主题中介绍的数据类型包括在 ArcGIS 中创建要素类或表时可用的数据类型。如果在数据库中存储数据或在数据库管理系统 (DBMS) 中存储地理数据库,ArcGIS 数据类型和 DBMS 的数据类型可能无法直接匹配。这些类型将与可在 DBMS 中获得的最接近的数据类型进行匹配。此过程称为数据类型映射。在此过程中,这些值可能会作为另一种类型存储在 DBMS 中,并且数据属性也将应用其他条件。因此,表中的数据类型或 ArcGIS Pro 中的要素类属性可能与您最初定义的有所不同。
其他数据存储格式,例如 shapefile 或 dbf 表具有不同的数据类型限制。当您在各种数据存储类型之间移动数据时,一定要了解目标存储格式的数据类型和大小限制。
数值
数字可存储为以下四种数值数据类型中的一种类型:
- 短整型
- 长整型
- 浮点型(单精度浮点数)
- 双精度型(双精度浮点数)
选择数据类型时,应考虑需要存储整数还是小数。如果仅需存储整数(如 12 或 12,345,678),可指定短整型或长整型。如果需要存储含有小数位的数(如 0.23 或 1234.5678),可指定浮点型或双精度型。
如果需要在短整型与长整型之间或者浮点型与双精度型之间做出选择,请选择存储空间占用最小的数据类型。这不仅会使所需存储量降至最低,而且还会提高性能。如果仅需存储介于 -32,768 和 32,767 之间的整数,则可指定短整型数据类型,因为它仅占用 2 个字节,而长整型数据类型却占用 4 个字节。如果仅需存储介于 -3.4E38 和 1.2E38 之间的小数,则可指定浮点数据类型,因为它仅占用 4 个字节,而双精度型数据类型却占用 8 个字节。下表列出了数据类型、范围和存储要求。此处列出的数值范围适用于文件地理数据库和个人地理数据库。数据库和企业级、工作组级及桌面地理数据库的范围略有不同。
数据类型 | 可存储的范围 | 大小(字节) | 应用程序 |
短整型 | -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、小数位数为 2 的浮点型,则字段将接受 12.34。如果要在字段中输入 12.345,则会显示错误消息,因为这超出了所允许的最大位数和小数位数。但是,如果您指定精度为 5、小数位数为 3 的浮点型,则字段允许您输入 12.345。
下表中列出了数据类型及其可能的精度值和范围值。使用此表有助于选择数据类型、精度和范围:
数据类型 | 精度(字段长度) | 范围(小数位数) |
---|---|---|
短整型* | 1-5(Oracle、Microsoft SQL Server);5 (IBM Db2);1-4 (PostgreSQL) | 0 |
长整型 | 6-10 (Oracle);6-9(Db2、SQL Server); 5-9 (PostgreSQL) | 0 |
浮点型 | 1-6 | 1-6 |
双精度型 | 7+ | 0+ |
*默认情况下,在 ArcGIS Pro 中创建的短整型精度为 5。但是,短整型列只可存储介于 -32,768 和 32,767 之间的值。因此,即便将精度设置为 5,也无法在短整型字段中存储大于 32,767 或小于 -32,768 的值。无需在 Oracle 以外的任何数据库中为在 ArcGIS Pro 中创建的短整型列指定精度。也无需在 SQL Server 或 PostgreSQL 数据库中为在 ArcGIS Pro 中创建的长整型列指定精度。
下表提供了一些数字范围及其如何存储在数据库或企业级地理数据库中的示例:
范围 | 数据类型 | 精度(字段长度) | 范围(小数位数) |
---|---|---|---|
0 至 99 | 短整型 | 2 | 0 |
-99 到 99* | 短整型 | 3 | 0 |
0 到 32,767* | 短整型 | 5 | 0 |
32,768 至 99,999 | 长整型 | 5 | 0 |
0.001 至 0.999 | 浮点型 | 4 | 3 |
1,000.00 至 9,999.99 | 浮点型 | 6 | 2 |
-123,456.78 到 0* | 双精度型 | 9 | 2 |
0 至 1,234.56789 | 双精度型 | 9 | 5 |
*负数需要额外的精度存储负号。
计算机仅能存储有限的位数,具体情况取决于分配的存储空间。数据库和地理数据库中双精度型数据的字段可精确地存储最多仅包含 15 位数的数字,因为这是可存入 8 字节存储空间的最长数字。位于多于此值的数字将被四舍五入,然后以类似于科学记数法的格式进行存储,使它们仅为近似数字。例如,如果输入包含 20 位数的数字 12,345,678,901,234,567,890,则它会被四舍五入,然后存储为 15 位的数字 1.23456789012346E+19。结尾的编码值 E+19 可限定小数点的放置位置。
文件地理数据库中的浮点型可精确地存储最多仅包含 6 位的数字。例如,无法将数字 123,456.7 精确地存储到浮点型字段中,因为此数字包含的位数多于六个。此数字仍可输入到文件地理数据库的浮点型字段中,但将四舍五入为包含允许的 6 位数的数字 123,457。如果需要精确地存储此数字,可将其存储在双精度字段中。企业级地理数据库和数据库中的浮点型字段严格禁止输入超过该字段精度位数的数字,因此并不会进行四舍五入。
文本
文本字段表示一系列字母数字符号。其中可包括街道名称、特性属性或其他文本描述。在地理数据库中重复使用文本属性的替代方法是建立编码值。文本描述可通过数值进行编码。例如,您可以通过数值对道路类型进行编码:将 1 指定给铺好的改良路面、将 2 指定给碎石路面等等。这样做的好处是减少地理数据库中占用的存储空间;但是,这些编码值必须为数据用户所了解。如果在地理数据库的编码值域中定义编码值并将该域与存储编码的整型字段相关联,则在 ArcGIS Pro 中查看该表时,地理数据库将显示文本描述。
文本中所用字符视语言而定。为了在各种语言之间更方便地转换文本,ArcGIS 将使用 Unicode 对字符进行编码。
日期
日期数据类型可存储日期、时间或同时存储日期和时间。显示信息的默认格式为 mm/dd/yyyy hh:mm:ss,同时还将指定 AM 或 PM。通过 ArcGIS 在表中输入日期字段时,输入的数据将转换为此格式。
BLOB
BLOB 是一种存储为长度较长的一系列二进制数的数据。ArcGIS 会将注记和尺寸存储为 BLOB,图像、多媒体或编码的位等项也可存储在此类型的字段中。您需要通过自定义的加载器、查看器或第三方应用程序将这些项加载到 BLOB 字段中或者查看 BLOB 字段的内容。
对象标识符
对象 ID 字段由 ArcGIS 维护并保证表中每行具有唯一 ID。查看某个表或某个图层的属性表时,您通常会发现,对象 ID 字段以别名 OID 或 ObjectID(表)或 FID(图层)列出。主要功能(如滚动和显示选择集)将取决于此字段的显示情况。
需要注意的是,大多数 ArcGIS Pro 功能(如使用“识别”工具)均要求对象 ID 唯一。因此,在 ArcGIS 之外直接处理数据库时须谨慎,避免出现重复的对象 ID。例如,按照一对多的关系创建视图时,便可能会造成对象 ID 重复。从而导致 ArcGIS Pro 功能的表现不一致。
当您向地图中添加数据库表时,需要使用对象标识符。如果 ArcGIS 无法找到非空整型字段作为对象标识符,则系统将提示您选择要用作对象标识符的字段。有关详细信息,请参阅为查询图层选择唯一标识符字段。
全局标识符
全局 ID 和 GUID 数据类型可存储注册表样式的字符串,该字符串包含用大括号括起来的 36 个字符。这些字符串用于唯一识别单个地理数据库中和跨多个地理数据库的要素或表行。这就是在单向和双向地理数据库复制操作中跟踪要素的方法。开发人员可在关系中或者在需要全局唯一标识符的任何应用程序中使用这些字符串。在某关系中,如果全局 ID 字段是原始键,则 GUID 字段必须为目标键。可以使用添加全局 ID 地理处理工具将全局 ID 添加到地理数据库的数据集中。然后,地理数据库将自动保留这些值。也可以创建 GUID 字段,但是必须自行保留该字段的值。
包含本地 GUID 数据类型的数据库(如 SQL Server)会将全局 ID 和 GUID 存储为 16 个字节的值。不含有本地 GUID 数据类型的数据库会将它们存储为 38 个字节的值。
有关全局 ID 的一些注意事项
- 使用字段视图或表窗口中的新字段命令可将 GUID 字段添加到地理数据库数据集中。
- 可以为地理数据库中的独立要素类、表和具有属性的关系类添加全局 ID。不允许对要素数据集中的单个数据集执行此命令,仅可针对整个要素数据集运行此命令。也不能针对数据库中的表运行此命令。
- 如果已存在全局 ID 列,则此工具将保留原有列;它不会删除现有全局 ID 列并添加新的全局 ID 列。
- 如果在地理数据库中将某个要素类添加到要素数据集中并要向其中添加一个全局 ID 列,则需要针对该要素数据集运行添加全局 ID 工具。此操作将为新要素类以及尚未创建全局 ID 列的所有其他要素类添加全局 ID 列。已经含有全局 ID 列的要素类将保持不变。
- 对于复制与粘贴、数据提取和 XML 工作空间导出及导入操作,会在输出地理数据库中保留全局 ID 值。对于其他数据导出及导入方法,这些值将不会保留。
字段类型栅格
与仅将要素的字段链接到某图像的超链接不同,字段类型栅格实际上可在地理数据库中存储栅格数据或者将该数据与地理数据库一同存储。要了解详细信息,请参阅将栅格数据集作为要素类的属性添加。
几何
在 ArcGIS 中,几何数据类型用于指示表中所存储几何的类型(点、线、面、多点或多面体)。通过 ArcGIS 创建的存储为几何类型的字段称为 SHAPE。
几何类型属于 ArcGIS 使用的数据类型。例如,如果为新要素类选择面要素,则默认添加的 SHAPE 字段的 ArcGIS 数据类型将设为“几何”。
对于创建要素类工具的几何类型属性,其几何类型将被列为“面”。
如果创建过其他要素类型的要素类,如线、点、多点、多面体、尺寸或注记,则 SHAPE 字段的几何类型也将相应地变为线、点、多点、多面体或者面(尺寸和注记)。
在数据库或企业级地理数据库的要素类中创建几何字段时,需要考虑另外一种数据类型:数据库数据类型。在 DBMS 中存储 SHAPE 字段值的方式将取决于 DBMS 使用的几何存储类型。在企业级地理数据库中创建要素类时,使用的几何存储类型由您指定的配置关键字中的 GEOMETRY_STORAGE 参数设置来确定。当在数据库中创建要素类时,您可在创建要素类工具地理数据库设置部分的配置关键字参数中定义字段的空间类型。