2016-03-01 18 views
2

問題

我下面相對於方向in the GeoServer docs創造一個主鍵元數據表配置用於PK分配主鍵的元數據表中,但我無法分配的我的地理特徵的主鍵(存儲在PostGIS商店中)使用WFS-t請求中具有相同名稱的屬性的值。的GeoServer:使用的PostGIS商店

具體來說,我創建一個UUID客戶端(這是必要的),然後將它作爲WFS-t請求XML的'uuid'屬性發送到GeoServer。一旦在GeoServer的手中,我希望該UUID被插入到幾何表的主鍵列中,該列也被命名爲'uuid'。而不是發生了什麼,是的GeoServer自動創建其自己的主鍵,這東西看起來如下:

fid--46a202d5_15320520551_-7ffe

語境

這裏是我的幾何表的SQL:

CREATE TABLE test_points (uuid VARCHAR(60) PRIMARY KEY NOT NULL); 
ALTER TABLE test_points ADD COLUMN title VARCHAR(30) NOT NULL; 
ALTER TABLE test_points ADD COLUMN body TEXT NOT NULL; 
SELECT AddGeometryColumn('public', 'test_points', 'geometry', '4326', 'POINT', 2); 

這是我的主鍵元數據表 SQL,基本上與文檔相同:

CREATE TABLE public.gt_pk_metadata_table (
    table_schema VARCHAR(32) NOT NULL, 
    table_name VARCHAR(32) NOT NULL, 
    pk_column VARCHAR(32) NOT NULL, 
    pk_column_idx INTEGER, 
    pk_policy VARCHAR(32), 
    pk_sequence VARCHAR(64), 
    unique (table_schema, table_name, pk_column), 
    check (pk_policy in ('sequence', 'assigned', 'autoincrement')) 
); 

INSERT INTO gt_pk_metadata_table (
    table_schema, 
    table_name, 
    pk_column, 
    pk_policy 
) VALUES (
    'public', 
    'test_points', 
    'uuid', 
    'assigned' 
); 

我有WFS-T插入操作正常工作(沒有主鍵值),但這裏是我的WFS-T請求XML的一個代表性的例子,在情況下,它可以幫助:

<Transaction xmlns="http://www.opengis.net/wfs" service="WFS" version="1.1.0" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Insert> 
    <test_points xmlns="my points"> 
     <geometry> 
     <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:3857"> 
      <pos>-11828783.001187595 4559315.863154193</pos> 
     </Point> 
     </geometry> 
     <uuid>18984168-27cc-4fc8-8dea-bfbd39c42b22</uuid> 
     <title>A Perfect Example</title> 
     <body>Here's my body.</body> 
    </test_points> 
    </Insert> 
</Transaction> 

就我的GeoServer配置而言,在我正在使用的數據存儲的配置頁面上,我已啓用「公開主鍵」標誌,並且主鍵元數據表參數的值保留爲空白(請參閱下面的其他值我試過了)

次嘗試失敗

下面是其他東西的清單我曾嘗試:沒有設置PRIMARY KEY

  • 創建具有類型UUID的主鍵列幾何表

    • 創建幾何表
    • 在'public'之外的模式中創建幾何表,將主鍵元數據表保留在'公共'模式中
    • 創建BO TH幾何表,並在模式中的公鑰元數據表大於「公共」
    • 改變記錄在主鍵元數據表使得在pk_column_idx列中的值爲0
    • 改變記錄其它在主鍵元數據表使得在pk_column_idx列中的值爲1
    • 禁用「暴露主鍵」國旗在存儲配置
    • 在更改「主鍵元數據表」參數的值將配置存儲到元數據的模式限定名稱表
    • 在存儲配置到該元數據表

    NON -schema限定名更改「主鍵元數據表」參數的值中的每個這些改變之後我刪除test_points層然後重新發布它。此外,我嘗試刪除並重新創建商店幾次。

    正如你所看到的,我有點絕望。任何幫助將非常感謝!

    UPDATE:插入的GeoServer日誌

    好主意iant,我敢肯定,可以幫助!以下是插入過程中GeoServer記錄內容的示例。除了idgen設置爲GenerateNew,我認爲這表明GeoServer認爲它應該生成一個新的pk,這一切對我來說都很好。 但是,這是我使用GeoServer的第一個項目,所以這可能沒有多大意義。頭向上:UUID,標題,主體和幾何體與上述XML示例不同。

    2016-03-01 16:14:29,755 INFO [geoserver.gwc] - DataStoreChange:{/mypoints}test_points PreInsert 
    2016-03-01 16:14:29,760 INFO [geoserver.gwc] - DataStoreChange: {/mypoints}test_points PostInsert 
    2016-03-01 16:14:29,763 INFO [geoserver.wfs] - 
    Request: transaction 
        service = WFS 
        version = 1.1.0 
        baseUrl = http://127.0.0.1:8080/geoserver/ 
        group[0] = wfs:[email protected] (feature: [SimpleFeatureImpl:test_points=[SimpleFeatureImpl.Attribute: uuid<uuid id=fid-4f745b22_1532fc9fb1c_-7ffa>=853596f8-9de1-477a-b287-f3cd114db90a, SimpleFeatureImpl.Attribute: title<title id=fid-4f745b22_1532fc9fb1c_-7ffa>=Another Test, SimpleFeatureImpl.Attribute: body<body id=fid-4f745b22_1532fc9fb1c_-7ffa>=For you!, SimpleFeatureImpl.Attribute: geometry<geometry id=fid-4f745b22_1532fc9fb1c_-7ffa>=POINT (-12044029.67283865 4265797.674539117)]], handle: null, idgen: <unset>, inputFormat: <unset>, srsName: null) 
        insert[0]: 
         feature[0] = SimpleFeatureImpl:test_points=[SimpleFeatureImpl.Attribute: uuid<uuid id=fid-4f745b22_1532fc9fb1c_-7ffa>=853596f8-9de1-477a-b287-f3cd114db90a, SimpleFeatureImpl.Attribute: title<title id=fid-4f745b22_1532fc9fb1c_-7ffa>=Another Test, SimpleFeatureImpl.Attribute: body<body id=fid-4f745b22_1532fc9fb1c_-7ffa>=For you!, SimpleFeatureImpl.Attribute: geometry<geometry id=fid-4f745b22_1532fc9fb1c_-7ffa>=POINT (-12044029.67283865 4265797.674539117)] 
         idgen = GenerateNew 
         inputFormat = text/xml; subtype=gml/3.1.1 
        releaseAction = ALL 
    
  • +0

    插入無法設置FID時,日誌文件中的內容是什麼? –

    +0

    感謝您的評論,只是添加服務器日誌以上 – zsnyder

    +0

    另外:我使用GeoServer(tomcat servlet)2.8-SNAPSHOT,從771e5c2e877b72961a7565c3b3ee62d9279aa39a提交建成。如果有幫助...... – zsnyder

    回答

    0

    添加fid="your_target_id"屬性特徵和屬性idgen="UseExisting"wfs:Insert讓我分配一個UUID。

    Here's我可以在idgen上找到最好的文檔。我不清楚WFS 1.0.0和2.0.0中的類似物。