动态更新 Geoserver 的输入

Dynamically update input to Geoserver

我希望有人能帮助我解决这个问题,因为我已经尝试了很长时间但没有成功。

我有一个多边形形状文件,我正在使用 geoserver 在浏览器上显示它。我根据形状文件中的一个属性(比如 "count")的值对多边形进行了颜色编码(通过创建 SLD 文件)。

我的问题是我想定期(每天)更新 "count" 属性(一个整数),因此我想在地理服务器中反映这一变化。我通过 java 和 运行 服务获取 "count" 属性的值。但是到目前为止,我还没有找到一种方法可以通过 java 更新形状文件中的单个属性(对于所有特征)。 geoTools 库帮助我读取形状文件,但我找不到使用该库修改属性的方法。

我该怎么做?请帮我解决以下问题:

  1. geoserver 是否适合我的用例?
  2. 有什么方法可以使用 java 更新形状文件的属性吗?
  3. 我应该继续使用形状文件还是转到 POSTGIS?
  4. 我们可以使用 java 更新 POSTGIS 中要素的属性吗?
  1. 如果你只需要显示一层,而且该层不是很大(shapefile 的大小是多少?)我会将文件转换为 geojson 并直接在浏览器中显示。

当基础数据不变时,Geoserver 通常与 shapefile 一起使用。如果不常见使用 postgis

  1. 当然可以。 Geotools can do it. But geoserver can also do it using WFS-T. Just enable it and use POST request or the geotools wrapper 更新数据。

我认为最好的选择是为您支持的进程创建一个新用户并添加一个仅允许该用户 wfs.Transaction 的安全规则。您可以在支持的进程中使用基本的 http 身份验证来启动更新 shapefile 的 POST http 请求。

  1. 视情况而定。如果是一个 shapefile 并且它不更改日志(一天一次),我可能会按以下顺序使用:

geojson 直接在浏览器中显示(没有geoserver)-> shapefile + geoserver -> postgis + geoserver

  1. 当然可以。一个 postgis 图层只是一个带有几何类型列的 postgresql table。您可以更新您的 table,就像您可以更新 postgresql 中的任何其他 table 一样。

我现在无法提供完整的示例来使用 geotools 更新 shapefile,但请检查2 this links

  • 打开 shapefile,如第二个 link
  • 中访问部分所示
  • 打开交易,如第一个所示link
  • 使用要素实例的 setAttribute 方法
  • 关闭交易

几件事:

  1. 我不会使用 shapefile 来执行此操作,而是使用像 postgis 这样的真正的 DBMS。 Shapefile 适用于提供只读数据集,不适用于并发更改。考虑到这一点,如果我们谈论的是一个更新不频繁的低流量网站(是的,一天一次是不频繁的)shapefile 应该没问题。
  2. 您也可以使用 GeoTools 修改 shapefile。 This link 可能会有所帮助。可以执行类似的操作来更新 Postgis 中的列,或者您可以直接执行此操作。
  3. 您可以使用 WFS-T 对 Shapefile 和 Postgis 进行更新。请注意,默认情况下 WFS-T 在 GeoServer 中启用并且它对所有人开放,您可能想要更改它(即至少为写入操作启用身份验证)

希望这对您有所帮助, 西蒙.