当前位置: 首页 > news >正文

【开发备忘】GeoServer相关两则:发布时间维ImageMosaic+客户端WMS样式

做两个记录,版本为2.27.2

1、发布时间维ImageMosaic

当有一系列tiff影像,其区别仅仅是时间不同,但是空间覆盖的区域是同一块,此时如果直接一张张分别发布会很麻烦,可以用ImageMosaic发布一个完整的服务,通过时间参数来获取不同数据。

(1)创建新存储仓库

在这里插入图片描述
其中连接参数url指向存放tiff影像的目录
在这里插入图片描述
例如下面的目录,存放了不同年份的湖北省的影像,关键在于这些影像文件的命名有且仅有时间信息是不同的,这样才能指定正则表达式来提取。
在这里插入图片描述

(2)配置服务

在影像目录下创建两个配置文件,indexer.properties和timeregex.properties。
indexer.properties指定了基本的服务信息,下面的含义是:不需要缓存、时间属性从url中提取并记录为java.util.Date格式、具体提取规则在timeregex中。

Caching=false
TimeAttribute=ingestion
Schema=*the_geom:Polygon,location:String,ingestion:java.util.Date
PropertyCollectors=TimestampFileNameExtractorSPI[timeregex](ingestion)

timeregex.properties则仅仅提供时间提取的正则语句,这里是不需要写文件扩展名的,提取的部分就是构造java.util.Date对象的构造参数,如下所示,把四位数的年份提取出来

regex=CLCD_v01_([0-9]{4})_hubei
(3)发布图层

发布图层时,在维度标签页中,需要勾选启用时间,并在下面简报选择列表,含义是所有可选的时间会在GetCapabilities中列出
在这里插入图片描述
发布之后,目录里会出现一个shp文件,我猜测是与空间范围和时间属性有关。这是默认的配置,如果数据量特别大,官方建议是用PostGIS来存储相关信息,那就需要在indexer.properties中指定连接参数。
在这里插入图片描述

(4)验证

有两种方法验证发布成功,一是在首页点击WMS打开GetCapabilities
在这里插入图片描述
所有可以用的time参数数值都会列出。需要注意的是,虽然输入格式仅有年份,但是构造为Date对象后就需要完整的年月日时分秒信息了,例如 1998-01-01T00:00:00.000Z
在这里插入图片描述
第二种验证方式是在图层渲染中选择OpenLayers,此时url中没有时间信息,默认选择的是第一个时间点。如果看不到数据,还需要检查是不是默认样式指定错误。
如此就可以通过在WMS请求中增加修改time参数,获取不同时间影像,形如

http://localhost:8081/geoserver/tjhp/wms?service=WMS&version=1.1.0&request=GetMap&layers=tjhp%3Ahubei&bbox=108.33496476264119%2C28.662615620836675%2C116.54973115507295%2C33.35775719246589&width=768&height=438&srs=EPSG%3A4490&styles=&format=image%2Fpng&time=1998-01-01T00:00:00.000Z

2、WMS命令中指定样式

GeoServer发布影像时需要指定样式,在发布标签页下
在这里插入图片描述
默认的样式是xml文件,如下图所示。
在这里插入图片描述
有时候需要把颜色配置交给用户来自定义,这就需要在请求wms的url中增加一个参数,叫SLD_BODY,将写好的xml去除换行符,进行url编码转义。
用Cesium的代码实例如下,这里ImageryLayer在请求时自动完成了转义。

var sld0 ='<?xml version="1.0" encoding="UTF-8"?><StyledLayerDescriptor><NamedLayer><Name>'
var sld='</Name><UserStyle><FeatureTypeStyle><Rule><RasterSymbolizer><ColorMap type="values"><ColorMapEntry color="#000000" quantity="0" opacity="0.0"/><ColorMapEntry '+str1+'/><ColorMapEntry '+str2+'/></ColorMap></RasterSymbolizer></Rule></FeatureTypeStyle></UserStyle></NamedLayer></StyledLayerDescriptor>'var para1 = {url: global.waterUrl,layers:'tjhp:DTH',parameters: {transparent: true,service: 'WMS',format: 'image/png',srs: 'EPSG:4326',SLD_BODY: sld0+'tjhp:DTH'+sld,time: year.value+'-01-01T00:00:00.000Z'}
}var provider1 = new Cesium.WebMapServiceImageryProvider(para1);
var lyr1 = new Cesium.ImageryLayer(provider1)

可以看到,具体的图层信息在SLD_BODY中,通过Name标签来指定。如果直接用url构造请求,layers是可以不写的,这里是因为在Cesium中WebMapServiceImageryProvider必须要一个layers参数进行构造,就需要写成Name一样的。但是需要注意,这个参数不能为空(layer=),否则无法正确请求。

http://www.dtcms.com/a/614365.html

相关文章:

  • 山东外贸国际网站建设南昌做网站多少钱
  • 3-Linux驱动开发-简单内核模块代码详解
  • 北京住房城乡建设部网站云南技术网站建设销售
  • Unity游戏开发客户端面试题分享
  • Hugging Face Transformers:AI模型的“瑞士军刀“
  • 中国纪检监察报网站wordpress古腾堡汉化
  • L2 MAC层核心机制介绍
  • 互动即价值?社交型数字资产深度融合社交行为与价值创造:
  • c#.net List对象和字典对象Dictionary,HashSet对比
  • 自己做免费网站的视频做跨境电商要什么费用
  • 唯品会 item_get 接口对接全攻略:从入门到精通
  • 互联网站账户e服务平台怎么建立一个网站好
  • 网站标题如何修改江苏高端品牌网站建设
  • 软考程序员2021年C语言链表案例题解答
  • nfs练习作业
  • 红黑树分析 1
  • Linux:监控命令
  • 官方网站开发用什么语言厦门建网站的公司
  • 做网站设计需要哪些软件兖州做网站
  • 马来西亚医疗旅游理事会举办“2025马来西亚深圳医疗旅游周“发力中国医疗旅游市场
  • wordpress 微信授权做网站建设优化的公司排名
  • 网站制作招聘音乐网站可做哪些内容
  • 一块中国好屏,和智能终端共舞
  • 240. Java 集合 - 使用集合工厂方法创建和处理数据
  • 南京app定制台州商品关键词优化
  • 代码生成工具Amazon CodeWhisperer介绍
  • 做视频网站的流程注册公司流程需要多久
  • 域名与空间购买后怎么做网站一般网站海报做一张多久
  • 网站建设合同规定橘子建站是什么
  • LangChain框架入门:全方位解析记忆组件