SQL Server 空间类型和 ArcGIS

地理数据库支持在 Microsoft SQL Server 中使用 Microsoft 几何类型和地理类型存储矢量数据。 SQL Server 中自动提供这些类型;因此无需单独安装即可使用。 还可以使用 ArcGIS 访问包含几何或地理字段(列)的数据库表。

出现以下情形之一时,可将几何存储类型与 ArcGIS 一同使用:

  • 想要使用的坐标系不是地理坐标系或未在 SQL Server 数据字典中定义。
  • 您想要将 z 值或 m 值与形状一起存储。

出现以下情形之一时,可将地理存储类型与 ArcGIS 一同使用:

  • 您想要使用的坐标系已在 SQL Server 数据字典中定义。
  • 数据覆盖大型空间范围并且您需要使用 SQL 面积和长度计算。
  • 需要使用大椭圆弧插值进行 SQL 空间查询。

    使用大椭圆弧插值的 SQL 面积和长度计算与大型空间范围上的平面线插值明显不同。

使用配置关键字指定空间类型

默认情况下,SQL Server 中的地理数据库使用几何空间类型。 要使用地理类型在 SQL Server 的地理数据库中存储要素类,必须执行以下操作之一:

  • 如果大部分用户大多数时候使用地理类型存储其空间数据,则在 DEFAULTS 配置关键字下将 GEOMETRY_STORAGE 配置参数更改为 GEOGRAPHY。 在地理数据库中创建的所有要素类默认使用地理类型。 有关说明,请参阅更改配置关键字
  • 如果仅使用地理类型存储一部分数据,则指定的配置关键字需要在创建要素类时指定 GEOGRAPHYGEOMETRY_STORAGE 配置参数。 可使用所提供的关键字 GEOGRAPHY,也可以创建自定义关键字

SQL Server 数据库(而不是地理数据库)中创建要素类时选择几何或地理关键字。

将现有空间表注册到地理数据库

如果您在地理数据库存储位置使用第三方应用程序或 SQL 创建包含 SQL ServerSQL Server 空间类型字段的表,则可以将这些表注册到该地理数据库来利用地理数据库功能,例如关系类、拓扑、公共设施网络、宗地结构或者使地理数据库具有子类型、默认值、域或验证规则。 为此,这些表必须满足以下先决条件:

  • 表必须归对其进行注册的用户所有。
  • 表必须具有几何或地理类型的单一空间字段。
  • 字段中所有形状的空间类型必须相同,可以是点、线、面、多点、多字符串或多面。

    不支持在将表注册到地理数据库后使用 SQL 将不同类型的形状添加到字段,否则将导致不可预期的要素类行为。

  • 字段中的所有形状必须使用同一空间参考 ID (SRID)。
  • 注册时指定的 SRID 必须存在于 SDE_spatial_references 系统表中。 否则,必须在注册时定义投影。
  • 如果表包含主键,则必须对其进行聚类。
注:

在现有数据库中启用地理数据库不能将现有表自动注册到地理数据库中。 需要参与地理数据库的所有表或要素类必须单独注册到地理数据库

创建空间索引

SQL Server 要求表具有一个主键才能在表中创建空间索引。

在 ArcGIS 中

使用 ArcGIS 创建包含几何列或地理字段的要素类时,默认情况下,ArcGIS 会在业务表的对象 ID 字段上创建聚类主键。 然后 ArcGIS 使用 SQL Server 默认设置构建空间索引。 将要素类注册为传统版本化后,将在添加表的对象 ID 和状态 ID 字段上创建聚类主键,然后构建空间索引。

ArcGIS 会将含几何或地理空间字段的要素类的边界框计算为要建立索引的数据的范围。 将不会对位于此范围以外的任何要素创建索引,但仍然会将其在空间查询中返回。 如果未设置要素类范围,则会将该要素类的空间参考系统的最大坐标范围作为边界框。 您可以在要素类属性对话框中设置或重新计算要素类的范围。 如果要素类位于地理数据库中,只要将空间索引删除并重新创建,就会使用最新的范围对边界框进行调整。

ArcGIS 外部

对于在 ArcGIS 外部创建的空间表(如,那些使用 SQL 创建的表),必须为此类表创建主键并使用 SQL 创建空间索引。 有关说明和示例,请参阅 Microsoft SQL Server 文档。

ArcGIS 添加字段以存储额外的几何元素

几何类型和地理类型无法存储地理数据库必定支持的所有类型的几何元素。 因此,当您创建或注册将几何或地理存储类型与 SQL Server 中的地理数据库配合使用的要素类时,ArcGIS 会向业务表中添加字段,以存储这些额外的几何元素。 字段名称为 gdb_geomattr_data。 其他几何元素如下:

  • 通过高级编辑工具创建的参数对象,例如圆弧和贝塞尔曲线
  • PointID
  • 多面体要素
  • 来自 ArcGIS Spatial Analyst extension 的表面片

一旦 ArcGIS 检测到数据源具有这些额外的几何元素,则会将简单几何表达存储在 shape 字段中,并将未修改的数据(包括其他元素)存储在 gdb_geomattr_data 字段中。

如果您注册的表或视图包含名为 gdb_geomattr_data 的字段,则该字段中的数据必须为与对象相关的几何元素。

ArcGIS 中的 SQL Server 几何单位

通常,几何数据测量值以米为单位。 测量单位在 sys.spatial_ref_system 表中指明;确认欧洲石油测绘组 (EPSG) 值使用的单位与数据相关。