geoserver笔记
geoserver中只支持shp 的数据的发布,也就是.shp的数据。其他的如mapgis的数据则需要转成.shp的格式
要发布地图数据为WMS服务,首先得建立工作空间(也可以使用现有的工作空间),然后建立数据存储器,最后在存储器里面发布地图数据。要想创建工作空间可以直接通过管理平台界面的“Add new workspace”进入工作空间创建界面
Directory of Spatial files”,也就是以目录为单位进行shp格式地图数据的部署。
多图层叠加呈现
在访问WMS服务的时候通常都是将多个地图图层进行叠加组合,才能完成一个相对完整的地图界面呈现。在访问WMS服务的时候图层叠加非常简单,就是在WMS请求地址的layers参数后面用逗号(“,”)将多个图层进行分割就可以了。下面的WMS服务请求地址就叠加了3个地图图层:http://192.168.124.1:8080/geoserver/kjwangTest/wms?service=WMS&version=1.1.0&request=GetMap&layers=kjwangTest:TEST1,kjwangTest:tasmania_cities&styles=&bbox=-42.0,-42.0,124.0,124.0&width=768&height=768&srs=EPSG:4326&format=application/openlayers,表示此WMS服务请求是由三个地图图层叠加组合而成的。
开始正式的分析了,先分析WMS工程。
GeoServer的WMS工程的包如下所示:
|
org.geoserver.wms |
包含对wms请求进行响应的WebMapService接口、缺省实现DefaultWebMapService、服务配置信息WMSInfo、WMS加载类以及水印等相关类。DefaultWebMapService类将GetMap等操作转发给具体Bean组件去操作,如wmsGetMap。 |
|
org.geoserver.wms.kvp |
名称-值对(kvp)相关解析类 |
|
org.geoserver.wms.responses |
对WMS的输出进行加强,如metatile式输出。 |
|
org.geoserver.wms.responses.decoration |
在WMS输出上添加装饰,如图例、比例尺、水印等。 |
|
org.geoserver.wms.util |
包含WMS辅助类,现只包含辅助构造WMS请求的WMSRequests类 |
|
org.geoserver.wms.xml |
现只包含对SLD请求XML进行读取的类SLDXmlRequestReader。 |
|
org.vfny.geoserver.config |
配置模型,主要的类为WMSConfig。 |
|
org.vfny.geoserver.global |
保存应用程序信息,里面只有一个类WMS,已被org.geoserver.wms的WMSInfo接口取代。 |
|
org.vfny.geoserver.sld |
现只包含对SLD异常进行处理的类SldException |
|
org.vfny.geoserver.sld.requests |
对WMS中SLD请求进行读取的类 |
|
org.vfny.geoserver.sld.responses |
对WMS中SLD进行响应的类 |
|
org.vfny.geoserver.wms |
包含WMS一些操作的响应接口,其中最重要的是GetMapProducer接口,各种格式Map的生成都实现这个接口,包括AbstractGetMapProducer, AbstractRasterMapProducer, AtomGeoRSSMapProducer, DefaultRasterMapProducer, GeoTiffMapProducer, GIFMapProducer, JPEGMapProducer, KMLMapProducer, KMZMapProducer, MetatileMapProducer, OpenLayersMapProducer, PNGMapProducer, RSSGeoRSSMapProducer, SvgMapProducerProxy, TiffMapProducer等 |
|
org.vfny.geoserver.wms.requests |
包含对WMS请求进行读取的类。 |
|
org.vfny.geoserver.wms.requests.readers |
包含WmsXmlRequestReader类。 |
|
org.vfny.geoserver.wms.responses |
对WMS进行响应的包,包含各种格式Map的生成类。 |
|
org.vfny.geoserver.wms.responses.featureInfo |
|
|
org.vfny.geoserver.wms.responses.helpers |
包含对WMS进行响应的一些工具类,如DescribeLayerTransformer、JAISupport、WMSCapsTransformer。 |
|
org.vfny.geoserver.wms.responses.legend.gif |
包含GIF格式的图例的生成和转换类 |
|
org.vfny.geoserver.wms.responses.legend.jai |
包含JAI库支持的格式的图例的生成和转换类 |
|
org.vfny.geoserver.wms.responses.legend.png |
包含PNG格式的图例的生成和转换类 |
|
org.vfny.geoserver.wms.responses.legend.raster |
|
|
org.vfny.geoserver.wms.responses.map.georss |
包含GeoRSS格式的Map的生成和转换类,如AtomGeoRSSMapProducer、RSSGeoRSSMapProducer等 |
|
org.vfny.geoserver.wms.responses.map.geotiff |
包含GeoTiff格式的Map的生成和转换类GeoTiffMapProducer |
|
org.vfny.geoserver.wms.responses.map.gif |
包含GIF格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.jpeg |
包含JPEG格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.kml |
包含KML格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.metatile |
包含瓦片形式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.openlayers |
包含Openlayers形式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.pdf |
包含PDF格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.png |
包含PNG格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.svg |
包含SVG格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.tiff |
包含TIFF格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.palette |
包含与颜色盘相关的类 |
|
org.vfny.geoserver.wms.servlets |
对wms操作进行响应的实际servlet类,包括GetMap、Capabilities、DescribeLayer、GetFeatureInfo、GetLegendGraphic、GetMapLegacy、KMLReflector、WMService等 |
GeoServer的WMS工程的包如下所示:
|
org.geoserver.wms |
包含对wms请求进行响应的WebMapService接口、缺省实现DefaultWebMapService、服务配置信息WMSInfo、WMS加载类以及水印等相关类。DefaultWebMapService类将GetMap等操作转发给具体Bean组件去操作,如wmsGetMap。 |
|
org.geoserver.wms.kvp |
名称-值对(kvp)相关解析类 |
|
org.geoserver.wms.responses |
对WMS的输出进行加强,如metatile式输出。 |
|
org.geoserver.wms.responses.decoration |
在WMS输出上添加装饰,如图例、比例尺、水印等。 |
|
org.geoserver.wms.util |
包含WMS辅助类,现只包含辅助构造WMS请求的WMSRequests类 |
|
org.geoserver.wms.xml |
现只包含对SLD请求XML进行读取的类SLDXmlRequestReader。 |
|
org.vfny.geoserver.config |
配置模型,主要的类为WMSConfig。 |
|
org.vfny.geoserver.global |
保存应用程序信息,里面只有一个类WMS,已被org.geoserver.wms的WMSInfo接口取代。 |
|
org.vfny.geoserver.sld |
现只包含对SLD异常进行处理的类SldException |
|
org.vfny.geoserver.sld.requests |
对WMS中SLD请求进行读取的类 |
|
org.vfny.geoserver.sld.responses |
对WMS中SLD进行响应的类 |
|
org.vfny.geoserver.wms |
包含WMS一些操作的响应接口,其中最重要的是GetMapProducer接口,各种格式Map的生成都实现这个接口,包括AbstractGetMapProducer, AbstractRasterMapProducer, AtomGeoRSSMapProducer, DefaultRasterMapProducer, GeoTiffMapProducer, GIFMapProducer, JPEGMapProducer, KMLMapProducer, KMZMapProducer, MetatileMapProducer, OpenLayersMapProducer, PNGMapProducer, RSSGeoRSSMapProducer, SvgMapProducerProxy, TiffMapProducer等 |
|
org.vfny.geoserver.wms.requests |
包含对WMS请求进行读取的类。 |
|
org.vfny.geoserver.wms.requests.readers |
包含WmsXmlRequestReader类。 |
|
org.vfny.geoserver.wms.responses |
对WMS进行响应的包,包含各种格式Map的生成类。 |
|
org.vfny.geoserver.wms.responses.featureInfo |
|
|
org.vfny.geoserver.wms.responses.helpers |
包含对WMS进行响应的一些工具类,如DescribeLayerTransformer、JAISupport、WMSCapsTransformer。 |
|
org.vfny.geoserver.wms.responses.legend.gif |
包含GIF格式的图例的生成和转换类 |
|
org.vfny.geoserver.wms.responses.legend.jai |
包含JAI库支持的格式的图例的生成和转换类 |
|
org.vfny.geoserver.wms.responses.legend.png |
包含PNG格式的图例的生成和转换类 |
|
org.vfny.geoserver.wms.responses.legend.raster |
|
|
org.vfny.geoserver.wms.responses.map.georss |
包含GeoRSS格式的Map的生成和转换类,如AtomGeoRSSMapProducer、RSSGeoRSSMapProducer等 |
|
org.vfny.geoserver.wms.responses.map.geotiff |
包含GeoTiff格式的Map的生成和转换类GeoTiffMapProducer |
|
org.vfny.geoserver.wms.responses.map.gif |
包含GIF格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.jpeg |
包含JPEG格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.kml |
包含KML格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.metatile |
包含瓦片形式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.openlayers |
包含Openlayers形式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.pdf |
包含PDF格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.png |
包含PNG格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.svg |
包含SVG格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.map.tiff |
包含TIFF格式的Map的生成和转换类 |
|
org.vfny.geoserver.wms.responses.palette |
包含与颜色盘相关的类 |
|
org.vfny.geoserver.wms.servlets |
对wms操作进行响应的实际servlet类,包括GetMap、Capabilities、DescribeLayer、GetFeatureInfo、GetLegendGraphic、GetMapLegacy、KMLReflector、WMService等 |
以一个完整的WMS访问过程来分析WMS工程中代码执行的过程。
一、HTTP GET请求
WMS的请求一般使用HTTP Get的形式直接从地址栏输入或者通过JS代码发送到服务器端。请求的格式如下所示:
http://localhost:8080/geoserver /wms?bbox=-74.01199448397661,40.70732689845813,-74.00841053684495,40.71216558957052&styles=&Format=application/openlayers&request=GetMap&version=1.1.1&layers=tiger:poi&width=457&height=550&srs=EPSG:4326,该请求中wms是要请求的服务,version=1.1.1是请求的wms版本,GetMap是请求的服务方法,tiger:poi是要访问的地理数据。
二、HTTP 派发
GeoServer的MVC架构是建立在Spring的Web MVC的基础之上的。Spring Web MVC的核心控制类是org.springframework.web.servlet.DispatcherServlet。HTTP请求一般都先发送给这个Servlet,做一些HTTP请求的通用处理(比如文件上载)后,通过合适的派发机制转发给不同的Spring容器中的Bean,也就是不同业务逻辑、服务处理的控制器(Logic Control),由这些控制器结合不同模型(Model),如空间数据模型、属性数据模型、地图样式模型等,进行处理,形成结果模型,并经 DispatcherServlet返回客户端。
org.springframework.web.servlet.DispatcherServlet相关配置位于GeoServer的Web工程的配置文件web.xml中。
1、Servlet声明
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
2、URL Mapping
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/wms/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/wcs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/wfs/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/ows/*</url-pattern>
</servlet-mapping>
这说明,对于/wms/*、/wcs/*、/wfs/*、/ows/*等地址的请求,都会调用org.springframework.web.servlet.DispatcherServlet对象来响应。
三、org.springframework.web.servlet.DispatcherServlet派发流程
在Spring框架下,org.springframework.web.servlet.DispatcherServlet基于每个工程的applicationContext.xml的配置,将请求转发给专门的对象处理。其中,根据wms工程的配置,wms除putstyles路径下的请求,都由dispatcher处理。
<!-- http url mapping -->
<bean id="wmsURLMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="alwaysUseFullPath" value="true"/>
<property name="mappings">
<props>
<prop key="/wms">dispatcher</prop>
<prop key="/wms/putstyles">putStylesWrapper</prop>
<prop key="/wms/*">dispatcher</prop>
</props>
</property>
</bean>
关于dispatcher对象的配置在main工程的applicationContext.xml,处理对象的类是org.geoserver.ows.Dispatcher。
<!-- dispatcher -->
<bean id="dispatcher" class="org.geoserver.ows.Dispatcher">
<!--
See the applicationSecurityContext document. You can safely remove this
if in need for playing with a non secure version of Geoserver
-->
<property name="securityInterceptor">
<ref bean="operationSecurityInterceptor"/>
</property>
</bean>
org.geoserver.ows.Dispatcher继承自spring框架的AbstractController类。它对于HTTP请求的处理是在handleRequestInternal(HttpServletRequest httpRequest, HttpServletResponse httpResponse)中处理。此函数再调用本身的execute(Request req, Operation opDescriptor),先分析出请求的服务(Service)、版本(Version)、操作(Operation),然后根据配置信息与GeoServerExtensions匹配找到服务处理的Bean,wms的配置信息如下所示。
<!-- wms service + descriptor -->
<bean id="wmsService2" class="org.geoserver.wms.DefaultWebMapService">
<constructor-arg ref="wms"/>
</bean>
<alias name="wmsService2" alias="webMapService"/>
<bean id="wmsServiceDescriptor" class="org.geoserver.platform.Service">
<constructor-arg index="0" value="wms"/>
<constructor-arg index="1" ref="wmsService2"/>
<constructor-arg index="2" value="1.1.1"/>
</bean>
此配置信息说明对于服务ID为wms的操作,由org.geoserver.wms.DefaultWebMapService来使用与操作同名的函数来处理。
这样,对于下面的请求:
http://localhost:8080/geoserver /wms?bbox=-74.01199448397661,40.70732689845813,-74.00841053684495,40.71216558957052&styles=&Format=application/openlayers&request=GetMap&version=1.1.1&layers=tiger:poi&width=457&height=550&srs=EPSG:4326
将由org.geoserver.wms.DefaultWebMapService的getMap函数来处理。
四、org.geoserver.wms.DefaultWebMapService的getMap函数处理过程
此函数先根据配置信息得到wmsGetMap对象,所属类是org.vfny.geoserver.wms.servlets.GetMap。
<bean id="wmsGetMap"
class="org.vfny.geoserver.wms.servlets.GetMap"
parent="wmsService">
</bean>
然后执行此对象的getResponse()方法。然后创建一个GetMapResponse对象。
五、写输出
写输出是通过执行org.geoserver.ows.Dispatcher的void response(Object result, Request req, Operation opDescriptor)函数。此函数先循环搜索和排序响应类集合responses(List responses = GeoServerExtensions.extensions(Response.class);),确定响应类response (Response response = (Response) responses.get(0);),再根据输出策略outputStrategy(ServiceStrategy outputStrategy = findOutputStrategy(req.httpResponse);)进行输出。
具体执行在set the mime type时(req.httpResponse.setContentType(response.getMimeType(result, opDescriptor));)调用ResponseAdapter的getMimeType(Object value, Operation operation)函数,此函数再调用delegate.execute(request)来执行(delegate即第四步创建的GetMapResponse对象)。最终的执行在GetMapResponse对象的execute(Request req)函数。
geoserver笔记的更多相关文章
- JavaWeb和WebGIS学习笔记(三)——GeoServer 发布shp数据地图
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- geoserver 常见问题笔记
1.cql查询示例,根据点查询返回code的空间查询示例 http://192.168.0.226:8080/geoserver/lgum/ows?service=WFS&version=1. ...
- geodjango七日学习笔记 (7.30整理本地笔记上传到网络)
第一天进行到现在,在开端的尾巴,想起来写一个学习笔记, 开发环境已搭好,用的是pycharm 环境是本机已有的interpreter python3.7 接下来要做的是新建一个geodjango项 ...
- JavaWeb和WebGIS学习笔记(七)——MapGuide Open Source安装、配置以及MapGuide Maestro发布地图——超详细!目前最保姆级的MapGuide上手指南!
JavaWeb和WebGIS学习笔记(七)--MapGuide Open Source安装.配置以及MapGuide Maestro发布地图 超详细!目前最保姆级的MapGuide上手指南! 系列链接 ...
- JavaWeb和WebGIS学习笔记(六)——使用ArcGIS for Server发布地图服务
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- JavaWeb和WebGIS学习笔记(五)——使用OpenLayers显示地图
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- JavaWeb和WebGIS学习笔记(四)——使用uDig美化地图,并叠加显示多个图层
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- Java web与web gis学习笔记(二)——百度地图API调用
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- Java web与web gis学习笔记(一)——Tomcat环境搭建
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
随机推荐
- 复现ICCV 2017经典论文—PyraNet
. 过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含“伪代码”.这是今年 AAAI 会议上一个严峻的 ...
- selenium+python自动化91-unittest多线程生成报告(BeautifulReport)
前言 selenium多线程跑用例,这个前面一篇已经解决了,如何生成一个测试报告这个是难点,刚好在github上有个大神分享了BeautifulReport,完美的结合起来,就能生成报告了. 环境必备 ...
- 有关Firefox/Chrome的问题汇总
安装的附加组件因未经验证而被 Firefox 禁用,我该怎么办 如果您已安装的附加组件因未经验证而被禁用了,建议您联系附加组件开发者或提供给您附加组件的人,看看他们能不能提供新版经过验证的附加组件.您 ...
- 温故而知新-正则单词和strlen
1 正则表达式用\b表示单词的开始和结束 \bblog\b 正则查找blog这个单词 2 关于strlen的汉字问题 在utf8格式下 strlen('汉字')=6 在gbk格式下 strlen(' ...
- 9.简单理解ajax
#### post 请求需要发送一个header setRequestHeader('Content-Type','application/x-www-form-urlencoded') post请求 ...
- PHP 实现-多线程编程
前些天帮同事查一个问题,第一次接触到了 PHP 的多线程,原以为 PHP 普遍都是单线程模型,并不适合多线程领域,花些时间翻了几个多线程的项目源码之后,发现 PHP 的多线程也颇有可取之处,活用起来, ...
- 1.JSONObject与JSONArray的使用
参考文献: http://blog.csdn.net/huangwuyi/article/details/5412500 1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib ...
- 关联github, 添加gitignore 规则
1. 新建Maven项目 2. 新建github repository 3. 执行命令 echo "# se" >> README.md git init git ad ...
- VBA 公式中使用相对位置
.Cells(3, 4).FormulaR1C1 = "=sum(r[-" & a & "]c[0]:r[-3]c[" & b & ...
- DNS配置注意事项 正在连接网络
故障现象 公司规模不是很大,大概有50多台计算机,购买了两台IBM服务器.由于内部使用的某个应用软件需要Windows域的支持,所以在这两台IBM服务器上启用了windows 2000 Server的 ...