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 和地理数据库

要将表注册到 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 中注册数据集:

  1. 启动 ArcCatalog。
  2. 连接到包含要注册的图层的地理数据库。请确保以图层所有者的身份进行连接。
  3. 右键单击要注册到地理数据库的图层。
  4. 单击注册到地理数据库(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 地理数据库中时所需牢记的注意事项的列表:


7/10/2012