2011-05-12 45 views
2

使用GeoTools WFS-T的插件,我創建了一個新的行,提交後,我有一個FEATUREID衛生組織.getId()返回一個醜陋的字符串,看起來是這樣的:這個GeoTools FeatureId有什麼問題?

newmy_database:my_table.9223372036854775807 

除了在「my_database」開頭的單詞「new」是一個驚喜,這個數字絕不反映新行的主鍵(在本例中爲「23」)。公平的,我認爲這可能是一些內部編號系統。但是,現在我想要另一個表中的外鍵來獲取此行中新行的主鍵,並且我不確定如何從此FID獲取值。一些地方建議你可以在這樣的查詢中使用FID:

Filter filter = filterFactory.id(Collections.singleton(fid)); 
Query query = new Query(tableName, filter); 
SimpleFeatureCollection features = simpleFeatureSource.getFeatures(query); 

但這種失敗在解析FID,在所有地方的下劃線!那個下劃線是在創建行時出現的(我不得不通過「my_database:my_table」作爲表來添加行)。

我確定要麼是id有問題,要麼我以某種方式錯誤地使用它。任何人都可以擺脫光線嗎?

+0

其中是geoTools WFS-T插件?鏈接 – 2015-05-26 07:49:29

+0

這個問題發佈四年前。我甚至不再使用GeoTools,也沒有很長時間。如果你在谷歌上找不到它,那麼它可能不再存在。 – AlbeyAmakiir 2015-05-26 23:26:34

回答

2

看起來好像有幾件事情出了問題 - 也許需要一個錯誤報告。

帶有「新」開頭的FeatureId是一個臨時ID;一旦提交被調用,應該用真實的結果替換它。

有許多的方式來了解這一點:

1)您可以偵聽BatchFeatureEvent;這提供了關於「temp id」 - >「wfs id」的信息

2)在內部,從WFS返回的事務結果中解析這些信息。結果保存在WFSTransactionState中供您訪問。這是在發明BatchFeatureEvent之前。

Transaction transaction = new transaction("insert"); 
try { 
    SimpleFeatureStore featureStore = 
      (SimpleFeatureStore) wfs.getFeatureSource(typeName); 
    featureStore.setTransaction(transaction); 
    featureStore.addFeatures(DataUtilities.collection(feature)); 

    transaction.commit(); 

    // get the final feature id 
    WFSTransactionState wfsts = (WFSTransactionState) transaction.getState(wfs); 

    // In this example there is only one fid. Get it. 
    String result = wfsts.getFids(typeName)[0]; 
} 
finally { 
    transaction.close(); 
}   

我已經更新與上述示例中的文檔: