2015-08-28 38 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的启用,这是对所有人开放,你可能想改变(即启用身份验证起码写操作)

希望这有助于 西蒙娜。