ArcGIS 和 Microsoft 空间类型
地理数据库支持使用 Microsoft 的几何类型和地理类型存储矢量数据。SQL Server 中提供这些类型;因此无需单独安装即可使用。如果要使用 SQL 访问空间数据,可以使用这些数据类型。
Microsoft 几何类型与现有 GIS 空间数据类型相似:使用任意平面(如已定义的投影)内的坐标。
Microsoft 地理类型用于椭球体上的数据,该数据与纬度和经度坐标一同存储。
这两种类型的空间计算方式有所不同。有关 Microsoft 空间类型的详细信息,请参阅 SQL Server 文档。
使用配置关键字指定 Microsoft 空间类型
默认情况下,SQL Server 中的地理数据库使用 Microsoft 几何类型。如果要在预置 SQL Server 数据库中的地理数据库中使用 Microsoft 几何类型进行存储,必须 (1) 将 SDE_dbtune 表中 DEFAULTS 配置关键字下的 GEOMETRY_STORAGE 参数更改为 GEOGRAPHY,或 (2) 指定在创建要素类时将 GEOMETRY_STORAGE 参数指定为 GEOGRAPHY 的配置关键字。
如果多数用户在多数时候都使用地理类型存储数据,则只应更改 DEFAULTS 关键字下的 GEOMETRY_STORAGE 参数。如果只有部分数据将以地理类型进行存储,则应在创建要素类时指定一个单独的关键字。系统提供的关键字为:GEOGRAPHY,或者您也可创建自己的自定义关键字。
将现有空间表注册到地理数据库
如果您使用第三方应用程序或 SQL 创建了包含 Microsoft 几何或地理列的表,则可以将这些表注册到该地理数据库来利用地理数据库功能,例如关系类、拓扑、几何网络、地籍结构、terrain 或方案,或者使地理数据库具有子类型、默认值、域或验证规则。为此,这些表必须满足某些先决条件:
- 表必须归对其进行注册的用户所有。
- 表必须具有几何或地理类型的单个空间列。
- 列中所有形状的空间类型必须相同,可以是点、线、面、多点、多字符串或多面。
此外,也不支持在将表注册到地理数据库后使用 SQL 将不同类型的形状添加到列中,这会导致要素类出现意外状况。
- 列中的所有形状都必须使用相同的空间参考 ID (SRID)。
- 注册时指定的 SRID 必须存在于 SDE_spatial_references 系统表中。否则,注册时必须定义投影。
- 如果表中包含主键,必须对其进行聚类。
有关如何通过 ArcGIS for Desktop 将表注册到地理数据库的说明,请参阅将表注册到地理数据库。
创建空间索引
SQL Server 要求表具有一个主键才可以在表中创建空间索引。
...在 ArcGIS 中
使用 ArcGIS 创建包含几何列或地理列的要素类时,默认情况下,ArcGIS 会针对业务表的行 ID (ObjectID) 列创建聚类主键,然后基于为创建要素类时使用的 SDE_dbtune 表中的配置关键字的 B_MS_SPINDEX 参数设置的值构建空间索引。将要素类注册为版本后,会在“添加”表的行 ID 和状态 ID 列上创建聚集主键,然后基于为创建要素类时使用的配置关键字中的 A_MS_SPINDEX 设置的值构建空间索引。这两个参数的默认值如下:
GRIDS = (MEDIUM, MEDIUM, MEDIUM, MEDIUM), CELLS_PER_OBJECT = 16
有关在 SDE_dbtune 表中设置值的详细信息,请参阅修改 DBTUNE 表的内容。
同样,通过 ArcGIS 使用几何或地理空间列创建要素类时,会将要素类的边界框计算为要建立索引的数据的范围。将不会对位于此范围以外的任何要素创建索引,但仍然会在空间查询中返回此类要素。如果未设置要素类范围,则会将该要素类的空间参考系统的最大坐标范围作为边界框。只要将图层从只加载 I/O 模式转换到正常 I/O 模式,就会使用最新的范围对边界框进行调整。或者,您也可以根据要素类属性 对话框的要素范围选项卡设置或重新计算要素类范围。
...ArcGIS 外部
对于在 ArcGIS 外部创建的空间表(如,那些使用 SQL 创建的表),必须为此类表创建主键并使用 SQL 创建空间索引。以下是用于对包含几何或地理类型列的表创建空间索引的 SQL 语法:
CREATE SPATIAL INDEX <index_name>
ON <table> (<spatial column>)
USING GEOMETRY_GRID
WITH (
BOUNDING_BOX = minx,miny,maxx,maxy),
GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high),
CELLS_PER_OBJECT = n,
<other regular btree index options like filegroups, fill factors, etc>
)
有关在企业级地理数据库中使用 SQL Server 地理的已知限制条件
以下是将 SQL Server 地理数据存储在企业级地理数据库中时所需牢记的注意事项的列表:
- 此版本的 ArcGIS 不能以地理数据类型存储 z 值或 m 值。因此,如果要将现有数据存储在地理数据库中(例如 shapefile 或其他地理数据库中的要素类),并且必须使用地理数据类型进行存储,那么导入的数据集不能具有 3D (z) 或测量 (m) 属性。
必须禁用 z 和 m 属性,才能导入该数据。此外,可将具有 3D 或测量属性的数据导入使用几何或压缩二进制存储类型的要素类。
- 大多数情况下,地理数据的测量值以米为单位。测量单位在 sys.spatial_ref_system 中指明;选中与数据关联的 EPSG 值使用的单位。
- 在此 ArcGIS 版本中,单独的各个要素和多部分要素的各部分必须适合单个半球。