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 數據類型。

    在這裏插入圖片描述在這裏插入圖片描述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 數據類型及其子類的等級。
在這裏插入圖片描述
ST_Geometry 的子類分爲兩類:基礎幾何子類和同類集合子類。基礎幾何包括 ST_Point、ST_LineString 和 ST_Polygon,而同類集合包括 ST_MultiPoint、ST_MultiLineString 和 ST_MultiPolygon。與名稱的含義一致,同類集合是基礎幾何的集合。除了共享基礎幾何屬性之外,同類集合還具有某些自身的屬性。

每個子類都存儲其名稱所指的幾何類型;例如,ST_MultiPoint 存儲多點。下表是子類及其說明的列表:
在這裏插入圖片描述
在這裏插入圖片描述
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 <user_name>;

GRANT select
ON TABLE public.spatial_ref_sys
TO <user_name>;

創建使用 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章