World Wind Java开发之十三——加载Geoserver发布的WMS服务
2015-02-04 16:07
495 查看
这篇是转载的平常心博客,原地址见:http://www.v5cn.cn/?p=171
一个WMSTiledImageLayer类对象只能对应一个WMS发布的服务图层,使用WMS服务时需要使用到WMS元数据描述类WMSCapabilities对象,我们使用WMSCapabilites类的静态方法retrieve来获得它的对象。WMSCapabilites对象可以包含WMS服务中所以的图层和图层样式,我们通过把需要显示的图层名称保存到AVList对象中,然后通过WMSCapabilites对象和AVList来创建WMSTiledImageLayer对象。我们可以通过一个请求地址来查看WMS服务所包含的元数据。例如:http://127.0.0.1:8080/geoserver/PostGIS/wms?request=GetGapabilities&Service=WMS 问号后面的地址是固定的,可以但看如下的XML:
里面的每一个Layer节点都是一个WMS图层。
请求的URL就是GeoServer中点击【OpenLayers】中的路径:
图层名称就是定义发布服务是的名称,可以在GeoServer中找到。
地图协议这里是OGC:WMS。
本地缓存文件的名称,就是WorldWind在本地缓存切片的文件夹名称,Win7可以在C盘的ProgramData中的WorldWindData中找到,ProgramData是一个隐藏文件。
运行程序就可以看到发布的图层已经可以加载了。效果如下:
1、WMSTiledImageLayer类说明
一个WMSTiledImageLayer类对象只能对应一个WMS发布的服务图层,使用WMS服务时需要使用到WMS元数据描述类WMSCapabilities对象,我们使用WMSCapabilites类的静态方法retrieve来获得它的对象。WMSCapabilites对象可以包含WMS服务中所以的图层和图层样式,我们通过把需要显示的图层名称保存到AVList对象中,然后通过WMSCapabilites对象和AVList来创建WMSTiledImageLayer对象。我们可以通过一个请求地址来查看WMS服务所包含的元数据。例如:http://127.0.0.1:8080/geoserver/PostGIS/wms?request=GetGapabilities&Service=WMS 问号后面的地址是固定的,可以但看如下的XML:<Layerqueryable="1"> <Name>spearfish</Name> <Title>spearfish</Title> <Abstract>Layer-Group type layer: spearfish</Abstract> <CRS>EPSG:26713</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>-103.87791475407893</westBoundLongitude> <eastBoundLongitude>-103.62278893469492</eastBoundLongitude> <southBoundLatitude>44.37246687108142</southBoundLatitude> <northBoundLatitude>44.50235105543566</northBoundLatitude> </EX_GeographicBoundingBox> <BoundingBoxCRS="EPSG:26713"minx="589425.9342365642"miny="4913959.224611808"maxx="609518.6719560538"maxy="4928082.949945881"/> </Layer> <Layerqueryable="1"> <Name>tasmania</Name> <Title>tasmania</Title> <Abstract>Layer-Group type layer: tasmania</Abstract> <CRS>EPSG:4326</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>143.83482400000003</westBoundLongitude> <eastBoundLongitude>148.47914100000003</eastBoundLongitude> <southBoundLatitude>-43.648056</southBoundLatitude> <northBoundLatitude>-39.573891</northBoundLatitude> </EX_GeographicBoundingBox> <BoundingBoxCRS="EPSG:4326"minx="-43.648056"miny="143.83482400000003"maxx="-39.573891"maxy="148.47914100000003"/> </Layer> <Layerqueryable="1"> <Name>tiger-ny</Name> <Title>tiger-ny</Title> <Abstract>Layer-Group type layer: tiger-ny</Abstract> <CRS>EPSG:4326</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>-74.047185</westBoundLongitude> <eastBoundLongitude>-73.907005</eastBoundLongitude> <southBoundLatitude>40.679648</southBoundLatitude> <northBoundLatitude>40.882078</northBoundLatitude> </EX_GeographicBoundingBox> <BoundingBoxCRS="EPSG:4326"minx="40.679648"miny="-74.047185"maxx="40.882078"maxy="-73.907005"/> </Layer> <Layerqueryable="1"> <Name>省界_region</Name> <Title>省界_region</Title> <Abstract/> <KeywordList> <Keyword>features</Keyword> <Keyword>省界_region</Keyword> </KeywordList> <CRS>EPSG:4326</CRS> <CRS>CRS:84</CRS> <EX_GeographicBoundingBox> <westBoundLongitude>73.441277</westBoundLongitude> <eastBoundLongitude>135.08693</eastBoundLongitude> <southBoundLatitude>18.159829</southBoundLatitude> <northBoundLatitude>53.561771</northBoundLatitude> </EX_GeographicBoundingBox> <BoundingBoxCRS="CRS:84"minx="73.441277"miny="18.159829"maxx="135.08693"maxy="53.561771"/> <BoundingBoxCRS="EPSG:4326"minx="18.159829"miny="73.441277"maxx="53.561771"maxy="135.08693"/> <Style> <Name>polygon_x</Name> <Title>Default Polygon</Title> <Abstract>A sample style that draws a polygon</Abstract> <LegendURLwidth="20"height="20"> <Format>image/png</Format> <OnlineResourcexmlns:xlink="http://www.w3.org/1999/xlink"xlink:type="simple"xlink:href="http://localhost:8080/geoserver/cite/ows?service=WMS&request=GetLegendGraphic&format=image%2Fpng&width=20&height=20&layer=%3F%3F_region"/> </LegendURL> </Style> </Layer>
里面的每一个Layer节点都是一个WMS图层。
2、例子
package gov.nasa.worldwindx.v5cn; import gov.nasa.worldwind.avlist.AVKey; import gov.nasa.worldwind.avlist.AVList; import gov.nasa.worldwind.avlist.AVListImpl; import gov.nasa.worldwind.ogc.wms.WMSCapabilities; import gov.nasa.worldwind.wms.WMSTiledImageLayer; import gov.nasa.worldwindx.examples.ApplicationTemplate; import java.net.URI; import java.net.URISyntaxException; public class WMSLayerTest extends ApplicationTemplate { public static class AppFrame extends ApplicationTemplate.AppFrame{ private static final long serialVersionUID = 1L; public AppFrame(){ try { //请求地图的URL String uri = "http://127.0.0.1:8080/geoserver/PostGIS/wms"; WMSCapabilities caps; URI serverURI = new URI(uri); //获得WMSCapabilities对象 caps = WMSCapabilities.retrieve(serverURI); //解析WMSCapabilities数据 caps.parse(); AVList params = new AVListImpl(); //图层的名称 params.setValue(AVKey.LAYER_NAMES, "planet_osm_line"); //地图服务的协议,这里是OGC:WMS params.setValue(AVKey.SERVICE_NAME, "OGC:WMS"); //获得地图的uri,也就是上面定义的uri params.setValue(AVKey.GET_MAP_URL, uri); //在本地缓存文件的名称 params.setValue(AVKey.DATA_CACHE_NAME, "planet_osm_line"); params.setValue(AVKey.TILE_URL_BUILDER, new WMSTiledImageLayer.URLBuilder(params)); WMSTiledImageLayer imageLayer = new WMSTiledImageLayer(caps,params); //图层名称 imageLayer.setName("planet_osm_line"); imageLayer.setEnabled(true); //图层的透明度 imageLayer.setOpacity(1); //图层的最大显示高度 imageLayer.setMaxActiveAltitude(33500000); getWwd().getModel().getLayers().add(imageLayer); getLayerPanel().update(getWwd()); } catch (URISyntaxException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { ApplicationTemplate.start("WMS图层", WMSLayerTest.AppFrame.class); } }
请求的URL就是GeoServer中点击【OpenLayers】中的路径:
图层名称就是定义发布服务是的名称,可以在GeoServer中找到。
地图协议这里是OGC:WMS。
本地缓存文件的名称,就是WorldWind在本地缓存切片的文件夹名称,Win7可以在C盘的ProgramData中的WorldWindData中找到,ProgramData是一个隐藏文件。
运行程序就可以看到发布的图层已经可以加载了。效果如下:
相关文章推荐
- World Wind Java开发之十三——加载Geoserver发布的WMS服务(转)
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- World Wind Java开发之十四——添加WMS地图服务资源
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- World Wind Java开发之十四——添加WMS地图服务资源(转)
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇(转)
- 【转】GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇(转)
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇
- 如何使用GeoServer发布WMS服务
- openscale加载wms服务的参数,geoserver只认EPSG:4326??
- World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)
- 使用GeoServer发布shp数据为WMS服务和WFS服务(图文教程)
- openlayer3加载geoserver发布的WFS服务
- World Wind Java开发之十五——加载三维模型
- GeoServer的WMS服务加载到天地图
- World Wind Java开发 加载三维模型
- 简析GeoServer服务的内部文件组织以及GeoServer自动化服务发布工具的开发思路
- Geoserver发布WMS服务出错分析