九、WorldWindJava2.0加载影像问题
来源:互联网 发布:上师大网络课程 编辑:程序博客网 时间:2024/05/17 06:01
我们此章主要讨论WorldWind WMS发布地图服务,打开网址:NASA WorldWind Server,我们借鉴该篇文章对WorldWindServer的安装、地图资源的配置、服务的运行以及功能测试问题进行研究。
一、WorldWindServer安装
运行WorldWindServer服务器,我们电脑上需要有JDK(1.6或以上),JOGL以及GDAL。WorldWindServer压缩包当然也不能少。下面为安装步骤:安装过程比较简单
1、FWTools(版本2.3.0)安装。FWTools是一套处理GIS和遥感数据的开源工具,核心来源于GDAL组件。
2、JDK(版本1.8.0_60)安装。
3、JOGL安装。将jogl.dll、jogl_awt.dll、jogl_cg.dll、gluegen-rt.dll复制到以下两个目录。
1)%JAVA_HOME%\jre\bin目录:支持客户机和服务器应用运行。
2)%JAVA_HOME%\bin目录:支持eclipse开发。
4、下载解压版的WorldWindServer(版本0.6)并解压到D:\OceanPlatform\WMSServer,并在该文件夹下创建空的文件夹TMP。
二、地图资源的配置
打开WorldWindServer安装文件夹,WEB-INF中web.xml文件,依次修改下面几项
▷ GDAL.Path ☞ C:\Program Files (x86)\FWTools2.3.0\bin
▷ TMP 临时文件 ☞ D:\OceanPlatform\WMSServer\TMP
▷ Server.Capabilities.OnlineResource ☞ http://127.0.0.1:8000/wms
▷ Server.RedirectTo ☞ http://127.0.0.1:8000/wms?REQUEST=GetCapabilities
完成上述工作后,理论上WorldWindServer便可以运行了。此时我们在WorldWindServer目录下找到startWMS.bat,双击运行,然后在浏览器中输入 http://127.0.0.1:8000/wms?REQUEST=GetCapabilities&Service=WMS,如果能看到xml文件,则表示已经正常工作了。
2、地图资源的配置
在 NASA WorldWind Server 网页中,对地图资源(BMNG、I3、Elevation、DTED)的加载方式已经描述的很详细,此处不再赘述。下面以加载自己下载的高清谷歌地图(瓦片地图)为依据,对WorldWindJava2.0加载地图资源做讨论。
首先需要把地图资源进行发布,发布地图数据有两种方法,一种是如该网址介绍这般,在 wms.config.xml 文件中用 <mapsource>
标签调用,我们这里简单介绍第二种方法:
▷ 保存地图数据于D:\OceanPlatform\WMSServer\WorldWindData\Imagery文件夹中。
▷ 打开并编辑WMSServer\WEB-INF文件夹中wms.DataFileStore.xml
▷ 在 readLocations 和 writeLocations 节中都增加<location property="" wwDir="D:\OceanPlatform\WMSServer\WorldWindData\Imagery"/>
▷ 重新启动WMS,浏览器中输入 http://127.0.0.1:8000/wms?REQUEST=GetCapabilities&Service=WMS 便可以在该xml文件中看到加载的 earth 图层了,如下图。
下面来讨论一下影像数据的加载,加载影像数据同样有两种方法。
1)通过WorldWindJava的config文件进行配置。打开src->config,worldwind.layers.xml文件,添加图层
<!-- 自定义影像 --> <Layer href="config/Earth/CustomImage.xml" actuate="onLoad"> <Property name="Name" value="Images"></Property> </Layer>
然后在congig.Earth中新建xml文件,CustomImage.xml,编写该xml文件
<?xml version="1.0" encoding="UTF-8"?><!--$Id: LandsatI3WMSLayer.xml 1 2011-07-16 23:22:47Z dcollins $--><Layer version="1" layerType="TiledImageLayer"> <DisplayName>earth</DisplayName> <Service serviceName="OGC:WMS" version="1.3"> <GetCapabilitiesURL>http://127.0.0.1:8000/wms</GetCapabilitiesURL> <GetMapURL>http://127.0.0.1:8000/wms</GetMapURL> <LayerNames>earth</LayerNames> </Service> <RetrievePropertiesFromService>true</RetrievePropertiesFromService> <DataCacheName>Earth/earth</DataCacheName> <ImageFormat>image/dds</ImageFormat> <AvailableImageFormats> <ImageFormat>image/jpg</ImageFormat> <ImageFormat>image/dds</ImageFormat> </AvailableImageFormats> <FormatSuffix>.dds</FormatSuffix> <NumLevels count="16" numEmpty="0"/> <TileOrigin> <LatLon units="degrees" latitude="-90" longitude="-180"/> </TileOrigin> <LevelZeroTileDelta> <LatLon units="degrees" latitude="36" longitude="36"/> </LevelZeroTileDelta> <TileSize> <Dimension width="256" height="256"/> </TileSize> <Sector> <SouthWest> <LatLon units="degrees" latitude="-90" longitude="-180"/> </SouthWest> <NorthEast> <LatLon units="degrees" latitude="90" longitude="180"/> </NorthEast> </Sector> <UseTransparentTextures>true</UseTransparentTextures> <!--<ScreenCredit creditType="ScreenImage">--> <!--<FileName>images/32x32-icon-nasa.png</FileName>--> <!--<Link>http://worldwind.arc.nasa.gov/java</Link>--> <!--</ScreenCredit>--> <RetrievalTimeouts> <ReadTimeout> <Time units="milliseconds" value="200000"/> </ReadTimeout> </RetrievalTimeouts></Layer>
然后运行examples包中ApplicationTemplate.java,即可以把该影像地图加载到球体上。
2)通过WMSTiledImageLayer类进行加载。我们在此简单的新建一个java文件验证,ImageryTest.java,代码如下:
package test;import java.net.URI;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;public class Imagerytest extends ApplicationTemplate{ public static class AppFrame extends ApplicationTemplate.AppFrame{ private static final long serialVersionUID=1l; public AppFrame(){ try { String url="http://127.0.0.1:8000/wms"; WMSCapabilities caps; URI serverURI=new URI(url); caps=WMSCapabilities.retrieve(serverURI); caps.parse(); AVList params=new AVListImpl(); params.setValue(AVKey.LAYER_NAMES, "earth"); params.setValue(AVKey.SERVICE_NAME,"OGC:WMS"); params.setValue(AVKey.GET_MAP_URL,url); params.setValue(AVKey.DATA_CACHE_NAME,"Earth/earth02"); params.setValue(AVKey.TILE_URL_BUILDER,new WMSTiledImageLayer.URLBuilder(params)); WMSTiledImageLayer imageLayer =new WMSTiledImageLayer(caps,params); imageLayer.setName("earth"); imageLayer.setEnabled(false); imageLayer.setOpacity(1); imageLayer.setMaxActiveAltitude(33500000); getWwd().getModel().getLayers().add(imageLayer); getLayerPanel().update(getWwd()); } catch (Exception e) { e.printStackTrace(); } } } public static void main(String[] args) { ApplicationTemplate.start("WMS",Imagerytest.AppFrame.class); }}
可以得到如图
当出现这种问题的时候,我也非常纳闷,本以为是代码问题,仔仔细细的检查很多遍,然后清除缓存,重新加载,仍是这样,我也不知道解决方法在哪呢。这是WorldWindJava2.0源码问题还是我的代码调用有问题?
为了进一步验证,我换用了低版本的WorldWindJava1.2,同样经过上述步骤(注:旧版本在编写ImageryTest.java时影像缓存地址应改变。params.setValue(AVKey.DATA_CACHE_NAME,"Earth/earth03");
)
结果却得到了正常显示的影响。
仔细查看了这三种情况的缓存文件夹中的earth.xml文件,对比发现采用第二种方法得到基于两个不同版本的缓存xml文件基本相同,我们与第一种方法得到的xml文件对比,并添加代码使三者缓存所得earth.xml文件相同。
在ImageryTest.java文件中添加代码:
params.setValue(AVKey.NUM_LEVELS,16);params.setValue(AVKey.TILE_HEIGHT,256);params.setValue(AVKey.TILE_WIDTH,256);params.setValue(AVKey.RETRIEVE_PROPERTIES_FROM_SERVICE,true);params.setValue(AVKey.AVAILABLE_IMAGE_FORMATS,new String[]{"image/dds","image/jpg"});
此时清除缓存后再去运行文件,发现结果与之前并无不同。
所以我个人觉得所编写的代码并无错误。难道真的是WorldWindJava2.0中的WMSTiledImageLayer类添加影像的内部机制出现错误?
可是,为了再次求证,我舍弃了WorldWindServer,采用Geoserver发布的Shp文件进行测试,更改ImageryTest.java文件中 url参数为 http://127.0.0.1:8000/geoserver/cq/wms ,然后将 LAYER_NAMES 、 DATA_CACHE_NAME 都更改为world,然后运行该文件,却能得到匹配的结果图,如下图,
唉,头大啊,求解答。
- 九、WorldWindJava2.0加载影像问题
- 一、WorldWindJava2.0使用
- EPS加载影像问题记录(掩膜换裁切)
- ArcIMS加载遥感影像解决方案
- 如何解决万能地图下载器下载的影像加载到ArcGIS “变色”的问题
- arcgis for android 加载jpg格式的影像地图显示不出的问题
- erdas 2013打开影像 加载影像全黑 解决办法
- Cesium:局域网离线影像及瓦片影像地图加载
- arcgis10的影像显示问题
- ArcGIS 10.2加载在线影像底图
- osgearth加载本地离线影像瓦片地图
- arcgis for javascript 加载天地图影像
- 水经注CAD智能影像加载插件教程
- opencv(c++)遥感影像加载与保存
- ARCIMS发布影像图的问题
- gdal中文打开影像报错问题
- Cesium学习(2)--局域网离线影像及瓦片影像地图加载
- ARCGIS构建影像金字塔文件提高geoserver发布影像后的加载效率
- 用UML提高代码设计能力和增强代码可维护性
- iOS开发系列--地图与定位
- 未完成
- struts2常用标签之if/else
- java连接数据库(properties配置文件)
- 九、WorldWindJava2.0加载影像问题
- php函数小汇总(五)
- xcode 添加第三方静态库
- javascript:;与javascript:void(0)使用介绍
- 友盟push Logcat有消息 通知栏收不到
- bzoj1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
- IOS图标消息推送在不同ios版本中的推送相关
- UESTC 1263 The Desire of Asuna 贪心法&&构造法
- Yii 1.1代码生成器gii(booster gii)模板修改