`
longgangbai
  • 浏览: 7330498 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GIS的学习(三十七)【转】WMS工程分析之Java包介绍 .

阅读更多

http://blog.csdn.net/suen/article/details/4808860

 

开始正式的分析了,先分析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 派发

GeoServerMVC架构是建立在SpringWeb MVC的基础之上的。Spring Web MVC的核心控制类是org.springframework.web.servlet.DispatcherServletHTTP请求一般都先发送给这个Servlet,做一些HTTP请求的通用处理(比如文件上载)后,通过合适的派发机制转发给不同的Spring容器中的Bean,也就是不同业务逻辑、服务处理的控制器(Logic Control),由这些控制器结合不同模型(Model),如空间数据模型、属性数据模型、地图样式模型等,进行处理,形成结果模型,并经 DispatcherServlet返回客户端。

org.springframework.web.servlet.DispatcherServlet相关配置位于GeoServerWeb工程的配置文件web.xml中。

   1Servlet声明

    <servlet>

        <servlet-name>dispatcher</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  

    </servlet>

    2URL 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工程的配置,wmsputstyles路径下的请求,都由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匹配找到服务处理的Beanwms的配置信息如下所示。

    <!-- 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>

此配置信息说明对于服务IDwms的操作,由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.DefaultWebMapServicegetMap函数来处理。

四、org.geoserver.wms.DefaultWebMapServicegetMap函数处理过程

此函数先根据配置信息得到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.Dispatchervoid response(Object result, Request req, Operation opDescriptor)函数。此函数先循环搜索和排序响应类集合responsesList responses = GeoServerExtensions.extensions(Response.class);),确定响应类response Response response = (Response) responses.get(0);),再根据输出策略outputStrategyServiceStrategy outputStrategy = findOutputStrategy(req.httpResponse);)进行输出。

具体执行在set the mime type时(req.httpResponse.setContentType(response.getMimeType(result, opDescriptor));)调用ResponseAdaptergetMimeType(Object value, Operation operation)函数,此函数再调用delegate.execute(request)来执行(delegate即第四步创建的GetMapResponse对象)。最终的执行在GetMapResponse对象的execute(Request req)函数。

 

 

分享到:
评论

相关推荐

    快速打开WMS服务

    在IT行业中,尤其是在GIS(地理信息系统)领域,WMS(Web Map Service)是一种重要的标准,用于在网络上发布和访问地理信息。本范例“快速打开WMS服务”专注于提高地图性能,特别针对iMobile Android SuperMap GIS...

    windows下GIS环境搭建手册

    4. GIS环境搭建完成后,还需要学习GIS相关的数据格式、投影转换、服务发布等知识,才能更好地进行GIS应用开发。 总之,Windows下的GIS环境搭建是一个系统工程,需要耐心和细致。通过以上步骤,你将能够成功建立一个...

    GIS项目开发文档(软件工程)

    GIS(Geographic Information System,地理信息系统)项目开发文档是软件工程领域中的一种特定类型文档,主要涉及地图数据处理、空间分析以及与地理位置相关的应用开发。这些文档为项目的规划、设计、实现、测试和...

    gis项目开发文档(开发必备)

    GIS项目开发文档是进行地理信息系统(Geographic Information System,简称GIS)开发的重要参考资料,它涵盖了项目的各个阶段,从需求分析到系统设计、实现、测试以及维护。这些文档为开发团队提供了一个清晰的工作...

    《GIS开发者13期》

    2. **GIS软件开发**: GIS开发涉及到使用各种编程语言,如Python、Java、C#等,结合GIS库(如GDAL/OGR、ArcPy、QGIS API)进行地图的创建、编辑和分析。熟悉这些工具和库对于构建自定义GIS应用至关重要。 3. **Web ...

    SuperMap Demo.zip

    SuperMap是一款享誉全球的地理信息系统(GIS)软件,它提供了全面的GIS解决方案,适用于各种行业和领域,包括城市规划、自然资源管理、环境科学、交通工程等。"SuperMap Demo.zip"是SuperMap的演示版本,旨在让用户...

    gdal 相关包及dll

    另一方面,"jar包在目录(放入工程jar目录)"提示了GDAL的Java绑定是以JAR文件的形式提供的。这个JAR包包含了Java接口,使得开发者能够在Java项目中调用GDAL的功能。为了使用这个JAR包,需要将其添加到项目的类路径...

    developing_advanced_java_web_applications(ArcGIS Serer)

    此外,演讲还介绍了参会者与演讲者的身份,包括ArcGIS Server Java产品工程师,以及听众中的ArcGIS Server应用程序开发者、新开发者、Java编程经验和网络技术知识等背景。 接下来的部分详细阐述了演讲的主要议程,...

    GeoServer开发手册系列

    GeoServer是一款开源的GIS(地理信息系统)服务器,它支持OGC(开放地理空间联盟)标准,包括WMS、WFS等服务,使得地理空间数据能够通过网络进行发布和共享。本开发手册系列主要针对中文用户,旨在帮助开发者深入...

    mapxtreme最新包

    MapXtreme是一款由MapInfo公司开发的专业地理信息系统(GIS)软件,主要用于处理地图数据、进行空间分析以及构建地理信息应用。它与MapInfo Professional一起,构成了强大的地图管理和数据分析工具链。在这个...

    geoserver源码和geotools

    Geoserver是一款基于Java的开源GIS服务器,它实现了OGC(开放地理空间联盟)的标准,如WMS(Web Map Service)、WFS(Web Feature Service)等,允许用户发布、管理和共享地理空间数据。它支持多种数据格式,如...

    webgis毕业设计.zip

    8. **空间分析**:学习GIS中的空间分析方法,如缓冲区分析、叠置分析、网络分析等,以便在Web环境中实现对地理数据的复杂计算。 9. **用户界面设计**:考虑用户体验,设计直观易用的地图界面,包括图层控制、查询...

    geoserver 地图专题图

    【标题】"geoserver 地图专题图" 涉及...这个项目为学习和实践GIS服务提供了一个实际的案例,对于理解和掌握GIS应用开发具有很高的价值。通过深入理解这些知识点,开发者可以创建出更智能、更具洞察力的地理信息应用。

    基于 Web Services的空间数据下载服务设计与实现 (2005年)

    在2005年的研究中,解吉波、李爱霞和龚健雅三位学者在武汉大学测绘遥感信息工程国家重点实验室进行了基于Web Services的空间数据下载服务的设计与实现。他们的研究提出了一种在桌面GIS组件基础上利用Web Services...

Global site tag (gtag.js) - Google Analytics