5.文件数据源-网络数据源
来源:互联网 发布:ubuntu游客创建用户 编辑:程序博客网 时间:2024/06/06 00:42
使用网络数据源的优势在于它的无线扩充性,以及一次部署就可以为全部联网的应用提供数据服务,包括数据的更新和处理都可以在服务器端完成,大大简化了系统部署过程。
可见光数据及扩展
WMSTiledImageLayer类是BasicTiledImageLayer类的子类,它实现了LAyer接口,World Wind Java使用WMSTiledImageLayer图层类表现可见光影响数据,一个WMSTiledImageLayer图层只能对应一个WMS服务。使用WMS服务时首先创建WMS元数据描述类WMSCapabilities,在通过它的retrieve方法获取WMS服务上发布的WMS元数据,在知道要使用的图层名称后,通过AVList指定要显示的图层,最后利用元数据(WMSCapabilities)和图层定义(AVList)共同创建WMSTiledImageLayer类,最后将WMSTiledImageLayer类加载到Layers上,完成WMS图层的引用。
代码如下:
package wwjTest;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.worldwind.wms.WMSTiledImageLayer.URLBuilder;public class wwjWMS extends wwjBasics{ private static final long serialVersionUID = 1L; protected WMSTiledImageLayer wmsTiledImageLayer; public boolean AddWMSData(String uri, String serverName,String title){ boolean rtnResult = false; try{ WMSCapabilities caps; URI serverURI = new URI(uri); caps = WMSCapabilities.retrieve(serverURI); caps.parse(); AVList params = new AVListImpl(); params.setValue(AVKey.LAYER_NAMES, serverName); params.setValue(AVKey.GET_MAP_URL, uri); params.setValue(AVKey.DATA_CACHE_NAME, "Earth/BlueMarble"); params.setValue(AVKey.TILE_URL_BUILDER, new URLBuilder(params)); wmsTiledImageLayer = new WMSTiledImageLayer(caps,params); wmsTiledImageLayer.setName(title); wmsTiledImageLayer.setEnabled(true); wmsTiledImageLayer.setOpacity(1d); wmsTiledImageLayer.setMaxActiveAltitude(5000000000d); this.worldWindowGLCanvas.getModel().getLayers().add(wmsTiledImageLayer); rtnResult = true; } catch(Exception ex){ System.out.println(ex.getMessage()); } return rtnResult; } public wwjWMS(){ AddWMSData("https://data.worldwind.arc.nasa.gov/wms","bmng200410","Blue Marble NG 2004.10"); this.layerPanel.update(this.worldWindowGLCanvas); } public static void main(String[] args) { String strTitle = "显示WMS文件"; wwjWMS wwjRun = new wwjWMS(); wwjRun.setTitle(strTitle); }}
结果如图所示:
结果不太理想,似乎加载的 位置有些正确,不过能证明确实已经加载了网络地图。等到后续的章节中,会搭建自己的WMS服务,我会继续验证这个问题。
PlaceName
World Wind Java接受的PlaceName是基于WFS服务提供的,NASA已经提供了网络地址为:http://worldwind22.arc.nasa.gov/geoserver/wfs的PlaceName服务,所以还是先用已有的资源完成程序,后续再自己搭建服务。
World Wind Java使用PlaceNameLayer图层类表示PlaceName数据,一个PlaceNameLayer图层只能对应一个PlaceNameServiceSet,PlaceName服务器将地名标签分为海洋、大陆、国家、山脉、水系等多个分类,再根据数据量的大小分为不同大小的网格,每个类可以理解为一个子图层,这个子图层使用PlaceNameService来定义,多个PlaceNameService被实现了AVList接口的PlaceNameServiceSet类集成在一起,就形成了PlaceName图层的定义,利用这个PlaceName图层定义形成PlaceNameService类。
代码如下:
import gov.nasa.worldwind.geom.Angle;import gov.nasa.worldwind.geom.LatLon;import gov.nasa.worldwind.geom.Sector;import gov.nasa.worldwind.layers.placename.PlaceNameLayer;import gov.nasa.worldwind.layers.placename.PlaceNameService;import gov.nasa.worldwind.layers.placename.PlaceNameServiceSet;public class wwjPlaceName extends wwjBasics{ protected static final LatLon GRID_1X1 = new LatLon(Angle.fromDegrees(180d),Angle.fromDegrees(360d)); protected static final double LEVEL_A = 0x1<<25; protected PlaceNameLayer placeNameLayer; public wwjPlaceName(){ this.modelEarth.getLayers().remove(this.modelEarth.getLayers().getLayerByName("Place Names")); AddPlaceNameLayer("http://worldwind22.arc.nasa.gov/geoserver/wfs","topp:wpl_oceans","Earth/PlaceNames/WFSPlaceNamesVersion1.0","全球大洋"); this.layerPanel.update(this.worldWindowGLCanvas); } public boolean AddPlaceNameLayer(String WMSServer,String ServiceName,String FileCache, String Title){ boolean rtnResult = false; try{ PlaceNameServiceSet placeNameServiceSet = new PlaceNameServiceSet(); PlaceNameService placeNameService = new PlaceNameService(WMSServer,ServiceName,FileCache, Sector.FULL_SPHERE,this.GRID_1X1,java.awt.Font.decode("Arial-BOLDITALIC-12"),false); placeNameService.setColor(new java.awt.Color(200, 200, 200)); placeNameService.setMinDisplayDistance(0d); placeNameService.setMaxDisplayDistance(this.LEVEL_A); placeNameServiceSet.addService(placeNameService, false); placeNameLayer = new PlaceNameLayer(placeNameServiceSet); placeNameLayer.setName(Title); this.worldWindowGLCanvas.getModel().getLayers().add(placeNameLayer); rtnResult = true; }catch(Exception ex){ System.out.println(ex.getMessage()); } return rtnResult; } public static void main(String[] args){ String strTitle ="PlaceName服务"; wwjPlaceName wwjRun = new wwjPlaceName(); wwjRun.setTitle(strTitle); }}
结果如下:
- 5.文件数据源-网络数据源
- 网络数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- 数据源
- guava使用Lists.partition,Lists.transform小结
- commons-lang介绍
- Microsoft Silverlight
- python编程常见报错汇总及解决方法(updateing)
- canvas变换
- 5.文件数据源-网络数据源
- 数据库杂记
- Linux下的lds链接脚本详解
- 安装mysql时,已经装了Visual Studio 2013 Redistributable还显示failed
- Linux基础操作(五)
- 我的Laravel学习之路之实现简单Blog展示
- 【大数据学习】数学基础及应用
- SQL 中 Count 和Distinct的使用
- 我回来了