ArcSDE 和 Microsoft 空间类型
ArcSDE 地理数据库支持使用 Microsoft 的几何类型和地理类型存储矢量数据。SQL Server 2008 中提供这些类型,因此无需单独安装即可使用。如果要使用 SQL 访问空间数据,可以使用这些数据类型。
Microsoft 几何类型与现有 GIS 空间数据类型相似:使用任意平面(如已定义的投影)内的坐标。
Microsoft 地理类型用于椭球体上的数据,该数据与纬度和经度坐标一同存储。
这两种类型的空间计算方式有所不同。有关 Microsoft 空间类型的详细信息,请参阅 SQL Server 2008 文档。
使用配置关键字指定 Microsoft 空间类型
默认情况下,SQL Server 中的 ArcSDE 地理数据库使用 ArcSDE 压缩二进制类型,因此如果您要使用 Microsoft 几何或地理类型进行存储,必须 (1) 将 SDE_dbtune 表中 DEFAULTS 配置关键字下的 GEOMETRY_STORAGE 参数更改为 GEOMETRY 或 GEOGRAPHY,或 (2) 指定可在创建要素类时指定 GEOMETRY 或 GEOGRAPHY 的 GEOMETRY_STORAGE 参数的配置关键字。如果多数用户在多数时候都使用几何或地理类型存储数据,则只应更改 DEFAULTS 关键字下的 GEOMETRY_STORAGE 参数。如果只有部分数据将以几何或地理类型进行存储,则应在创建要素类时指定一个单独的关键字。为您提供了两个关键字:GEOMETRY 和 GEOGRAPHY,也可以创建自己的自定义关键字。
在地理数据库中使用 Microsoft 几何或地理的先决条件
如果您使用第三方应用程序或 SQL 创建了包含 Microsoft 几何列或地理列的表,则可以将这些表注册到 ArcSDE 和地理数据库,以便对地理数据库功能加以利用。为此,这些表必须满足某些先决条件:
- 表必须归对其进行注册的用户所有。
- 表必须具有几何或地理类型的单个空间列。
- 列中所有形状的空间类型必须相同,可以是点、线、面、多点、多字符串或多面。
此外,也不支持在将表注册到 ArcSDE 后使用 SQL 将不同类型的形状添加到列中,这会导致要素类出现意外状况。
- 列中的所有形状都必须使用相同的空间参考 ID (SRID)。
- 注册时指定的 ArcSDE SRID 必须存在于 SDE_spatial_references 系统表中。否则,注册时必须定义投影。注意:
ArcSDE SRID 和 Microsoft 几何或地理 SRID 有所不同。将坐标系添加到 SDE_spatial_references 系统表时,将由 ArcSDE 分配 ArcSDE SRID。
- 如果表中包含主键,必须对其进行聚类。
将现有几何或地理表注册到 ArcSDE 和地理数据库
要将表注册到 ArcSDE,请使用带有注册操作的 sdelayer 命令。
在以下示例中,将包含面几何 (–e a) 的名为 spdata 的表注册到名为要素的几何列中。该表包含一个名为 fid 的整型列,该列将用作唯一要素标识符列,并通过 ArcSDE (–C fid,SDE) 维护其值。用于注册图层的空间参考 ID (SRID) 是 5 (–R 5)。它是 SDE_spatial_references 表中的 SRID。
sdelayer –o register –l spdata,features –e a –C fid,SDE –t GEOMETRY –R 5 –i sde:sqlserver:tornado –D agency1 –u vijay –p open.septagenarian
如果 SDE_spatial_references 表中不存在所需空间参考,则可在 ArcCatalog 中创建一个使用所需空间参考的模板要素类,然后通过查询 SDE_spatial_references 表来查看为该表分配了哪个 SRID。
对于 sde 方案地理数据库
SELECT * FROM sde.SDE_spatial_references
对于 dbo 方案地理数据库
SELECT * FROM dbo.SDE_spatial_references
查找与模板要素类一起添加的空间参考,然后标识 SRID 编号。然后,在注册包含几何列且位于同一个坐标参考系中的其他表时,可以将该编号与 –R 选项一起使用。
也可以使用 –G 选项代替 –R 选项来指定投影 ID。注册包含几何列的表时,所使用的投影 ID 必须与 SQL Server sys.spatial_references_systems 表中存储的一个 SRID 相匹配。
sdelayer –o register –l spgeogdata,features –e a –C fid,SDE –t GEOGRAPHY –G 4326 –i sde:sqlserver:tornado –D agency1 –u vijay –p open.septagenarian
对于任一种拥有包含大量记录的空间数据存储类型(几何或地理)的表,如果将行 ID 列注册为用户维护,则注册时间会缩短。不过,ESRI 不建议您使用用户维护的行 ID。
sdelayer –o register –l polsamples,shape –e p –C fid,USER –t GEOMETRY –R 300 –i 6543 –D agency1 –u guadalupe –p overnout
请注意,如果将要素标识符列注册为用户维护,然后将要素类注册到地理数据库,则 ArcGIS 会再添加一个要素标识符列 object_ID。并且将由 ArcGIS 维护此列的值。如果此表包含大量记录,添加此 object_ID 列可能需要一些时间。
执行 sdelayer –o register 可将表注册到 ArcSDE。这样会向地理数据库中的 SDE_layers、SDE_geometry_columns、SDE_column_registry 和 SDE_table_registry 系统表添加一条记录。但并不会创建空间索引。您可以使用 SQL 为在 ArcGIS 外部创建的表创建空间索引,然后将这些表注册到 ArcSDE。或者,您可以在将表注册到 ArcSDE 之后通过 sdelayer 命令的 alter 操作来定义图层范围,使用 load_only_io 操作将表放置到只加载 I/O 模式,然后使用 normal_io 操作将该表置回正常 I/O 模式,这样便会自动构建空间索引。如果随后要将图层注册到地理数据库,则可以使用 ArcCatalog 创建空间索引。使用 sdelayer 或 ArcCatalog 创建空间索引时,将使用在 SDE_dbtune 表中指定的空间索引参数和图层的当前数据范围来创建空间索引。
有关使用 sdelayer 命令的详细信息,请参阅《ArcSDE 管理命令参考》。
如果需要要素类参与到地理数据库功能(如关系类、拓扑、几何网络、地籍结构、terrain 或方案)或要素类具有子类型、默认值、属性域或验证规则,则必须将要素类注册到地理数据库。
您可以按以下步骤在 ArcCatalog 中注册数据集:
- 启动 ArcCatalog。
- 连接到包含要注册的图层的地理数据库。请确保以图层所有者的身份进行连接。
- 右键单击要注册到地理数据库的图层。
- 单击注册到地理数据库(Geodatabase)。
创建空间索引
SQL Server 创建空间索引的先决条件是表必须具有主键。
对于在 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> )
当通过 ArcGIS 使用几何或地理空间列创建图层时,会将要素类的边界框计算为要建立索引的数据的范围。将不会对位于此范围以外的任何要素创建索引,但仍然会在空间查询中返回此类要素。如果未设置图层范围,则会将该图层的空间参考系统的最大坐标范围作为边界框。只要将图层从只加载 I/O 模式转换到正常 I/O 模式,就会使用最新的图层范围对边界框进行调整。
此外,使用 ArcGIS 创建包含几何或地理列的要素类时,默认情况下,ArcSDE 会针对业务表的行 ID 列创建聚集主键,然后基于为创建要素类时使用的 SDE_dbtune 表中的配置关键字的 B_MS_SPINDEX 参数设置的值构建空间索引。将要素类注册为版本后,会在“添加”表的行 ID 和状态 ID 列上创建聚集主键,然后基于为创建要素类时使用的配置关键字中的 A_MS_SPINDEX 设置的值构建空间索引。这两个参数的默认值如下:
GRIDS = (MEDIUM, MEDIUM, MEDIUM, MEDIUM), CELLS_PER_OBJECT = 16
有关在 SDE_dbtune 表中设置值的详细信息,请参阅创建 DBTUNE 表后更改其内容。
有关在 ArcSDE 地理数据库中使用 SQL Server 地理的已知限制条件
以下是将 SQL Server 地理数据存储在 ArcSDE 地理数据库中时所需牢记的注意事项的列表:
- 此版本的 ArcSDE 不能以地理数据类型存储 z 值或 m 值。因此,如果要将现有数据存储在地理数据库中(例如 shapefile 或其他地理数据库中的要素类),并且必须使用地理数据类型进行存储,那么导入的数据集不能具有 3D (z) 或测量 (m) 属性。
必须禁用 z 和 m 属性,才能导入该数据。此外,可将具有 3D 或测量属性的数据导入使用几何或默认压缩二进制存储类型的要素类。
- 大多数情况下,地理数据的测量值以米为单位。测量单位在 sys.spatial_ref_system 中指明;选中与数据关联的 EPSG 值使用的单位。
- 单独的各个要素和多部分要素的各部分必须适合单个半球。