5.文件数据源-网络数据源

使用网络数据源的优势在于它的无线扩充性,以及一次部署就可以为全部联网的应用提供数据服务,包括数据的更新和处理都可以在服务器端完成,大大简化了系统部署过程。

可见光数据及扩展

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

    }
}

结果如下:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值