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);    }}

结果如下:

这里写图片描述

原创粉丝点击