2015-08-28 109 views
0

我希望有人可以幫助我,因爲我一直在試圖找到解決方案很長一段時間沒有成功。動態更新輸入到Geoserver

我有一個多邊形shape文件,我使用geoserver在瀏覽器上顯示。我根據形狀文件中某個屬性的值(比如「count」)對多邊形進行了顏色編碼(通過創建SLD文件)。

我的問題是,我想定期(每天)更新「count」屬性(這是一個整數),因此我想反映在geoserver中的這種變化。我通過一個java服務獲取「count」屬性的值,我已經運行了。但到目前爲止,我還無法找到一種方式,通過它可以通過java更新shape文件中的單個屬性(用於所有功能)。 geoTools庫幫助我讀取形狀文件,但我找不到使用此庫修改屬性的方法。

我怎麼去這個請幫我下面的問題:?

  1. 的GeoServer是對我的使用情況下,正確的選擇?
  2. 有什麼方法可以使用java更新形狀文件的屬性。
  3. 我應該繼續使用形狀文件還是轉移到POSTGIS?
  4. 我們可以使用java更新POSTGIS中的特徵屬性嗎?

回答

2
  1. 如果你只需要顯示一層,該層是不是很大(什麼是shape文件的大小?)我將文件轉換爲geojson和直接在瀏覽器中顯示它。

當基礎數據沒有改變時,Geoserver通常與shapefile一起使用。如果不是普通使用postgis

  1. 當然。 Geotools can do it。但地理服務器也可以使用WFS-T。只需啓用它並使用POST請求或geotools wrapper即可更新數據。

我認爲最好的選擇是爲你支持的進程創建一個新用戶並添加一個安全規則,只允許該用戶使用wfs.Transaction。您可以在支持的進程中使用基本http身份驗證來啓動更新shapefile的POST http請求。

  1. 這取決於。如果是一個shape文件,它不會更改日誌(每天一次)我會在這個順序可能使用:

GeoJSON的在瀏覽器中直接顯示(沒有的GeoServer) - > Shape文件+的GeoServer - > PostGIS的+ geoserver

  1. 當然。 postgis圖層只是一個postgresql表格,其中包含一個幾何類型的列。您可以更新您的表格,因爲您可以更新postgresql中的任何其他表格。

我不能提供一個完整的例子,現在來更新geotools shape文件,但檢查2這個links

  • 打開shape文件作爲顯示在第二個鏈接
  • 打開的事務中展現在第一個鏈接
  • 使用存取部分功能實例的的setAttribute方法
  • 關閉交易
+0

使用WFS-T,它是可以更改數據的用戶。但是,作爲管理員,我想從後端以編程方式執行此操作。將WFS-T合併到我的正在運行的java服務中是否可行?關於geotools,它確實允許我創建一個新的shapefile,但是我找不到一個可以幫助我修改磁盤上現有shapefile的示例。 – jps

+0

我更新了我的答案。 –

3

有幾件事情:

  1. 我禾uld沒有使用shapefile來做這件事,而是使用了像postgis這樣的真正的DBMS。 Shapefile適用於只讀數據集,不適用於併發更改。考慮到這一點,如果我們談論的是一個低流量的網站,不經常更新(是的,每天只有一天)shapefile應該沒問題。
  2. 您也可以使用GeoTools修改shapefile。 This link可能會有所幫助。可以使用類似的方法來更新Postgis中的列,或者直接執行。
  3. 您可以使用WFS-T進行Shapefile和Postgis更新。請注意,在默認情況下WFS-T在GeoServer的啓用,這是對所有人開放,你可能想改變(即啓用身份驗證起碼寫操作)

希望這有助於 西蒙娜。