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