ArcGIS Desktop

  • 文档
  • 支持

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS for Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

ArcMap

  • 主页
  • 入门
  • 地图
  • 分析
  • 管理数据
  • 工具
  • 扩展模块

几何验证

  • 针对点形状的验证规则
  • 针对简单线或线串的验证规则
  • 针对线或管 (spaghetti) 状线串的验证规则
  • 针对区域形状的验证规则和操作
  • 空间参考 ID

在 PostgreSQL、IBM DB2 和 Informix 中,几何验证由 ST_Geometry 类型通过 st_shapelib (Oracle) 和 st_geometry 库提供。创建表之后,插入或更新记录时会对数据进行验证。

将数据插入到空间表的方法主要有两种:

  • 使用构造函数以及由这些函数构建的应用程序
  • 使用 ArcGIS API 以及由这些 API 构建的应用程序

构造函数针对不同的空间类型实现不同的定义,并且使用不同的方法验证几何数据。创建要素时,Esri 和 IBM ST_Geometry 构造函数以及 ArcGIS API 使用 Esri 形状库验证几何数据。其他空间类型(例如 SDO_Geometry、PostGIS 几何和 Microsoft SQL Server 几何或地理)具有自己的构造函数,所以使用自己的形状验证规则。因此,在将要素插入或更新到 ArcGIS 以外的这些类型时,应针对适用的验证规则分别读取 Oracle、PostGIS 或 SQL Server 文档。

ArcGIS 还会在读取数据时验证几何。无法在 ArcGIS 中对无效几何进行渲染。

ArcGIS 读取几何时,以下几何验证规则适用于 Esri API、ST_Geometry 构造函数:

针对点形状的验证规则

  • 点的面积和长度为 0.0。

  • 单个点的包络矩形等于该点的 x,y 值。

  • 多部件 (multipart) 点形状的包络矩形是最小边界框。

针对简单线或线串的验证规则

  • 删除连续重复点。
  • 各部件必须至少具有两个不同的点。
  • 各部件不可以与自身相交。起始点和终止点可以相同,但是不会将生成的环视为区域形状。
  • 各部件可彼此相接于端点。
  • 长度是所有部件的长度的总和。

针对线或管 (spaghetti) 状线串的验证规则

  • 线可以与自身相交。
  • 各部件必须至少具有两个不同的点。
  • 删除连续重复点。
  • 长度是所有部件的长度的总和。

针对区域形状的验证规则和操作

  • 删除重复的连续坐标点。
  • 删除悬挂点/线。
  • 确认线段闭合(起点和终点的 z 坐标也必须相同)且不交叉。
  • 对于带有孔洞的区域形状,孔洞必须整体位于外边界以内。ArcGIS 会消除位于外边界以外的所有孔洞。
  • 与外边界相接于单个公共点的孔洞会转换为反转的区域形状。
  • 相接于多个公共点的多个孔洞会合并为一个孔洞。
  • 多部件 (Multipart) 区域形状之间不能发生叠置。不过,两个部件可以相接于一点。
  • 多部件 (Multipart) 区域形状之间不能共享公共边界。公共边界会融合。
  • 如果两个环拥有一个公共边界,它们会合并为一个环。
  • 将计算总的几何体周长(包括圆环面中所有孔洞的边界)并存储为几何体的长度。
  • 将计算面积。
  • 将计算包络矩形。
  • 尽管 ArcGIS 客户端可返回按顺时针或逆时针方向排列的点,但是对于区域形状的点,会按照逆时针方向存储。如果生成含有顺时针坐标的区域形状,ArcGIS 会更改旋转方向,以确保坐标列表遵循逆时针方向。

    区域形状中的折点按逆时针方向存储。

    在该示例中,起始点为 a,正确的坐标描述为 a,b,c,d,a。

  • 区域形状可以包含反转区域,即区域形状内与外部边界接触的空白区域。

    带有反转区域形状的区域的折点方向

  • 反转的区域形状包含与外边界接触的内部环。这些区域形状并不会视为圆环面。
  • 区域形状包含圆环孔洞时,会首先列出外边界。孔洞的各点以与外边界相反的方向进行存储。

    在下图中,将外边界描述为 a,b,c,d,a,将孔洞描述为 e,f,g,h,e。在坐标列表中,区域形状就存储为 a,b,c,d,a,e,f,g,h,e。

    带有孔洞的区域的折点方向

  • 如果两个孔洞相接于某一点,它们会被视为一个孔洞,而不是两个。

    带有共享同一公共点的两个孔洞的区域的折点方向

    在该示例中,这两个内部区域被视为一个孔洞,因为它们共享一个公共点 g。

  • 区域形状和带有孔洞区域形状的组合可能变得相当复杂,如下图所示。外边界是一个带有岛的湖。在岛上有一个小湖。

    嵌套面

    可以将这些要素表示为一个、两个或三个形状。您可分别存储每个要素。较大的湖是一个圆环面。大湖的边界是外边界,而岛是单个圆环孔洞的边界。该岛也是一个圆环面。相对于小湖,岛的边界是外边界,而小湖是孔洞。小湖是单个区域形状。

    如果这些湖是重要的要素,则可用一个带有孔洞的形状表示大湖,而另一个形状表示小湖。还可使用多部件 (multipart) 区域形状表示该要素。第一个形状部件是带有表示岛的圆环孔洞的大湖。第二个部件是小湖。

  • Nil 形状起到占位符的作用;一种使某一属性行不含有相应几何的方法。例如,在请求两个不相交区域的相交部分时就会得到 nil 形状。

    不相交形状产生一个 nil 几何。

    因为区域 A 和 B 不接触,所以相交查询的结果会产生空几何。

  • 形状具有维度。仅具有 x,y 坐标的形状被视为是二维的。具有 z 坐标或测量值的形状是三维的。形状还可能拥有 nil 测量值。

空间参考 ID

就使用 ST_Geometry 类型的要素类而言,对于所提供的、创建表时使用的空间参考 ID (SRID) 的边界以外的坐标,如果尝试插入具有这些坐标的值,则 INSERT 语句会失败并提示类似于如下列出的消息:

DBMS错误消息

Oracle

ERROR at line 1:
ORA-20004: Error generating shape from text (-112)
ORA-06512: at "SDE.ST_GEOMETRY_SHAPELIB_PKG", line 42
ORA-06512: at "SDE.ST_POLYGON", line 69
ORA-06512: at line 1

PostgreSQL

ERROR: ESRI: error generating shape [-112]:

Informix

SQL Error (-937): Coordinates out of bounds in ST_PolyFromText.

DB2

GSE3416N Coordinate out of bounds

SQLite

Error: ST_Geometry failed with SDE error -139:
'The specified coordinate exceeds the valid coordinate range':[4]

相关主题

  • 空间存取器函数

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS 平台

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • Esri 博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
Copyright © 2018 Esri. | 隐私政策 | 法律声明