PostgreSQL对空间数据和Arcgis sde库的支持暨postgis空间数据(geometry/geographic)和st_geometry的区别与联系(详解篇)

PostgreSQL对空间数据和Arcgis sde库的支持 暨 postgis空间数据(geometry/geographic)和st_geometry的区别与联系<详解篇>
兄弟,别走a,看完你就懂了,懂了文末扫码支持一下。

一、发现坑
最近在用pgsql搭建空间数据库,使用过程中突然发现多部件图形怎么也保存不进去。


二、测试坑
分别在前端applyEdit接口保存多部件图形,以及在Arcmap中存储多部件数据,发现前端可保存,但图形信息为null,属性信息保存,返回200,页面无图形显示;arcmap中多部件数据直接丢失。


三、分析坑

  1. 安装postgis时加载扩展,是不是少了什么没有安装呢,百思不得其解,询问ESRI技术人员,说的也是模棱两可,不中要害。但发现网上教程都是这么装的,pg库里查看扩展也一个没少,摊手。

    CREATE EXTENSION postgis;
    CREATE EXTENSION pgrouting;
    CREATE EXTENSION postgis_topology;
    CREATE EXTENSION fuzzystrmatch;
    CREATE EXTENSION postgis_tiger_geocoder;
    CREATE EXTENSION address_standardizer;

  2. 从Arcgis的空间数据和postgis的空间数据对比区别与联系入
    2.1. ArcGIS 所支持的 PostgreSQL 数据类型
    创建表或向数据库中的表添加新列时,列将创建为特定的数据类型。数据类型是用于确定数据值自身以及可对数据执行哪些操作的分类,也表示列中数据在数据库中的存储方式。
    从 ArcGIS 访问数据库表时,可以使用特定数据类型。在目录树中通过“数据库连接”节点或在 ArcMap 中通过查询图层访问数据库表时,ArcGIS 会过滤掉任何不支持的数据类型。如果直接访问数据库表,则不支持的数据类型不会显示在 ArcGIS 界面,您也无法通过 ArcGIS 编辑这些数据。同样,复制包含不受 ArcGIS 支持的数据类型的表时,将只复制支持的数据类型;将表粘贴到另一个数据库或地理数据库时,不会存在不支持的数据类型列。
    在 ArcGIS 中创建要素类或表时,或者使用 ArcGIS 向现有表或要素类添加列时,可向字段分配 12 种可能的 ArcGIS 数据类型。未与这些类型对应的数据库数据类型不能直接在 ArcGIS 客户端应用程序中使用。
    第一列列出了 ArcGIS 数据类型。第二列列出了将在数据库中创建的 PostgreSQL 数据类型。第三列显示了在 ArcGIS 中查看时哪些其他 PostgreSQL 数据类型(如果有)会映射到 ArcGIS 数据类型。

    PostgreSQL对空间数据和Arcgis sde库的支持暨postgis空间数据(geometry/geographic)和st_geometry的区别与联系(详解篇)_第1张图片PostgreSQL对空间数据和Arcgis sde库的支持暨postgis空间数据(geometry/geographic)和st_geometry的区别与联系(详解篇)_第2张图片ArcGIS 所支持的 PostgreSQL 数据类型
    如果您的表中包含了一列具有 ArcGIS 不支持的数据类型的数据,则可以将该列转换为文本。但是请仅在想要查看该列中值时这样做;如果您将执行的分析需要用到该列中值,请不要这样做。例如,您可以执行 SELECT 语句选择 tableb 中的列,并将小数列 (total) 转换为文本:

SELECT id, name, total::text
FROM me.mydb.tableb;

几何数据类型
如表中所示,ArcGIS 可在 PostgreSQL 中创建并处理两种几何数据类型:Esri ST_Geometry 或 PostGIS 几何。下面两部分将提供有关这两种数据类型的详细背景。

ST_Geometry
以下是 ST_Geometry 空间数据类型的常规描述。有关特定于 PostgreSQL 实施的信息,请参阅 PostgreSQL 中的 ST_Geometry。

ST_Geometry 数据类型遵循用户定义数据类型 (UDT) 的 SQL 3 规范,用于创建可存储空间数据(如地标、街道或土地宗地的位置)的列。该数据类型可通过符合国际标准化组织 (ISO) 和开放地理空间联盟 (OGC) 标准的结构化查询语言 (SQL) 来访问地理数据库和数据库。通过向表示地理要素的对象(点、线及面)提供存储空间,此存储类型扩展了数据库的功能。此存储类型旨在充分利用数据库资源,与数据库要素(如复制与分区)兼容,以及快速访问空间数据。

ST_Geometry 本身是抽象的、无法实例化的超类。但其子类可以实例化。实例化的数据类型是可定义为表列的数据类型,并且其类型值插入表列之中。

虽然可以将列定义为类型 ST_Geometry,但是您无法将 ST_Geometry 值插入此列,因为无法对 ST_Geometry 进行实例化。相反,您可以插入子类值。

下图说明了 ST_Geometry 数据类型及其子类的等级。
PostgreSQL对空间数据和Arcgis sde库的支持暨postgis空间数据(geometry/geographic)和st_geometry的区别与联系(详解篇)_第3张图片
ST_Geometry 的子类分为两类:基础几何子类和同类集合子类。基础几何包括 ST_Point、ST_LineString 和 ST_Polygon,而同类集合包括 ST_MultiPoint、ST_MultiLineString 和 ST_MultiPolygon。与名称的含义一致,同类集合是基础几何的集合。除了共享基础几何属性之外,同类集合还具有某些自身的属性。

每个子类都存储其名称所指的几何类型;例如,ST_MultiPoint 存储多点。下表是子类及其说明的列表:
PostgreSQL对空间数据和Arcgis sde库的支持暨postgis空间数据(geometry/geographic)和st_geometry的区别与联系(详解篇)_第4张图片
PostgreSQL对空间数据和Arcgis sde库的支持暨postgis空间数据(geometry/geographic)和st_geometry的区别与联系(详解篇)_第5张图片
ST_Geometry 子类型
请注意每个子类都继承 ST_Geometry 的属性,但超类还有其本身的属性。适用于 ST_Geometry 数据类型的函数可接受任何子类实体类型。不过,有些函数定义在子类级别,且仅接受特定的子类。例如,ST_GeometryN 函数仅将 ST_MultiLinestring、ST_MultiPoint 或 ST_MultiPolygon 子类型值作为输入。
PostGIS Geometry
PostGIS 是在空间上启用 PostgreSQL 数据库的产品。PostGIS 遵从开放地理空间联盟 (OGC) 关于结构化查询语言 (SQL) 的简单要素规范。它使用 OGC 熟知二进制 (WKB) 和熟知文本 (WKT) 表示几何。
PostGIS 有两个空间类型选项:几何空间类型和地理空间类型。ArcGIS 仅支持几何类型。
将 PostGIS 几何存储类型与 ArcGIS 一起使用时,请牢记以下规则:
必须使用 PostGIS 数据库模板创建用于地理数据库的 PostgreSQL 数据库或在数据库中启用 PostGIS。
注:
如果使用创建企业级地理数据库地理处理工具创建地理数据库,则将使用 PostGIS 模板以外的其他模板来创建数据库。因此,如果想要使用 PostGIS 几何类型,必须使用 PostGIS 模板手动创建数据库。然后,在运行创建企业级地理数据库地理处理工具时,便可以指定现有数据库,地理数据库也将在其中创建。

  • 必须使用 PostGIS 数据库模板创建用于地理数据库的 PostgreSQL 数据库或在数据库中启用 PostGIS。
  • 必须为 sde 用户和在地理数据库中创建数据的所有用户授予针对特定 PostGIS 表的权限。
  • 所创建的要素类只能使用 PostGIS public.spatial_ref_sys 表中列出的空间参考。如果指定此表中不包含的空间参考,要素类创建将失败。
  • 要创建使用 PostGIS 几何类型的要素类,必须指定 GEOMETRY_STORAGE 参数设置为 PG_GEOMETRY 的配置关键字。
  • 无法重命名使用 PostGIS 几何类型存储的空间表。这是因为不存在可用来public.geometry_columns 表中的表名称进行更新的 PostGIS 函数

要使用 PostGIS 几何类型,必须安装 PostGIS。安装 PostgreSQL 之后安装 PostGIS。请确保要使用的 ArcGIS 版本支持所安装的 PostGIS 版本。

安装 PostGIS 时,会在 PostgreSQL 数据库集群中创建 PostGIS 模板数据库。使用 PostGIS 模板数据库可创建用于存储地理数据库的数据库。

授予创建 PostGIS 几何列的权限
如果数据库对 PostGIS 可用,则将在公共方案中创建两个表,即 geometry_columns 和 spatial_ref_sys。必须为 sde 用户和将在地理数据库中创建数据的所有用户至少授予对 geometry_columns 表的 SELECT、INSERT、UPDATE 和 DELETE 权限和对 spatial_ref_sys 表的 SELECT 权限。

GRANT select, insert, update, delete 
ON TABLE public.geometry_columns 
TO ;

GRANT select
ON TABLE public.spatial_ref_sys
TO ;

创建使用 PostGIS 几何的要素类
创建要素类时,ArcGIS 使用在 sde_dbtune 表中设置的配置参数来确定使用哪种空间数据类型。此参数为 GEOMETRY_STORAGE。在 PostgreSQL 中的地理数据库中,此参数可设置为 ST_GEOMETRY 或 PG_GEOMETRY(PostGIS 几何类型的设置)。因此,当您要使用 ArcGIS 创建使用 PostGIS 几何类型的要素类时,指定 GEOMETRY_STORAGE 参数设置为 PG_GEOMETRY 的配置关键字。

默认情况下,新要素类使用 ST_Geometry 存储。如果要以 PostGIS 存储类型存储大部分数据,则将 sde_dbtune 表中 DEFAULTS 配置关键字下的 GEOMETRY_STORAGE 参数值更改为 PG_GEOMETRY。或者,如果仅要以 PostGIS 存储类型存储部分要素类,则可在创建要素类时指定 PG_GEOMETRY 配置关键字。从地理数据库中导出时,PG_GEOMETRY 关键字以如下方式显示:

##PG_GEOMETRY
GEOMETRY_STORAGE “PG_GEOMETRY”
UI_TEXT “User Interface text description for POSTGIS geometry storage”
END

PostgreSQL 中的 ST_Geometry
ST_Geometry 如何存储空间数据
使用 ArcGIS 创建采用 ST_Geometry 存储的要素类
使用 ArcGIS 访问包含 ST_Geometry 列的 PostgreSQL 表
注册 ST_Geometry 列

PostGIS的几何图形教程


四、解决坑
待补

感谢
http://desktop.arcgis.com/zh-cn/arcmap/10.3/manage-data/gdbs-in-postgresql/data-types-postgresql.htm
http://desktop.arcgis.com/zh-cn/arcmap/10.3/manage-data/gdbs-in-postgresql/stgeometry-postgresql.htm

你可能感兴趣的:(Arcgis产品特性,Arcgis,ArcObjects)