[关闭]
@alexhuang 2015-04-19T13:13:25.000000Z 字数 1678 阅读 2315

GeoServer服务解析

GIS


解析xml配置文件

主要记录下关于GeoServer 服务自动发布的工作。
GeoServer的服务层次,分为:

  • WorkSpace(工作空间)

  • Store(数据存储) 加载数据实体例如shp,tif

  • Layer(图层) 从数据存储中发布某个图层,选择样式(SLD),地理范围等信息

在GeoServer文件夹中工作空间文件夹下,当保存数据存储后,会自动生成数据存储在工作空间中对应的配置文件,coveragestore.xml包含了数据的绝对路径。

关于一个影像服务的创建,首先是根据数据存储下的影像数据计算范围shapefile。这一步很关键,也就是说,经过测试,单独修改配置文件xml中的NativeBoundingBox 不会更新图层信息。就算删除配置文件xml,图层仍然存在。

解决自动更新服务

自动更新图层的思路目前有几种:

  • 不需要删除创建服务时生成的xml文件和GeoServer中的图层,但删除shp和prj等数据目录下的文件,重新保存Store,重新生成shp和prj。并且按照图层中重新读取的NativeBound和shp文件改写xml文件。
    测试结果: 糟糕,在不重新启动整个服务的情况下,wms服务出现错乱。
  • 删除GeoServer中的对应图层(如何程序实现先不管),重新保存Store后,直接重新发布图层。这是最好的解决方案。待测试:
    测试结果:重新发布图层无法用程序控制,点击图层保存没有结果。原因不明,没有报错信息,无法调试(原因不明,但是在图层编辑页面切换标签页之后可以保存,标签页的地址是随机生成,暂时无法模拟)。

由于无法用程序控制图层的保存,所以需要寻找这个原因或者 找替代方案,目前证明了xml配置文件在不重新启动整个服务的情况下无法更新图层信息。

讨论如何在分布式环境下更新切片

当解决了程序模拟更新影像服务的问题之后(解决于4月6日下午15:30),需要解决分级切片部分更新的问题。如何在分布式环境下,在每台子节点的GeoServer上同名影像服务中,以新的影像切片覆盖同一位置的原有切片??这是很重要的问题!!

由于整个环境是分布式,假如ABC三台子节点,第一次影像发布时,djw影像发布成功,ABC三台节点分别存放djw不同区域的切片数据。例如A节点存放了左上角区域的切片,B节点存放了右上角区域切片。
此处输入图片的描述
由于切片模块中任务分配是随机的,先请求先获取,先执行。所以对于一个影像,第二次切片,每个节点分配到的部分完全可能和第一次不一致。由此造成的问题是,对于一个节点来说,更新影像时生成的切片本来应该覆盖原有的同一位置的切片,但切片是分布式的,无法覆盖其他节点上的切片数据。例如A节点分配到的新影像块对应的历史影像数据位于C节点上。

由于分布式带来的数据更新问题比较难以解决。所以每次对新时间点的数据进行切片后,新发布一个影像服务来存储新的切片。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注