Java教程

WorldWind Java版加载WMS图层服务步骤

本文主要是介绍WorldWind Java版加载WMS图层服务步骤,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

近期公司有项目需求,需要开发一款桌面端的三维地球。由于本人是Android开发人员,做过WorldWind Android开发,所以,就安排我来实现桌面端的WorldWind。这个项目刚开始阶段,着实费了很大的精力。WorldWind的开发教程较少,且好多教程都是基于Eclipse,教程也都是一模一样的。这样的教程多数对于新手不太友好,所有记录下我的开发过程,保证初学者也能看懂。
一、下载WorldWind源码。
WorldWind官网:WorldWind官网;
WorlWind GitHub资源库:WorldWind2.0版本;
最新版是2.2.0版本,但是我这里使用的是2.0.0版本。原因是我是用2.2.0版本,按照网上的一些教程,程序会报错,其中有些方法没有了,就先使用2.0版本。之后有时间再研究吧。
在这里插入图片描述
下载WorldWind-2.0.0.zip后,进行解压,如下图所示。
在这里插入图片描述
二、创建WorldWind应用
在这里插入图片描述
打开IDEA开发工具。File-New-Project。
在这里插入图片描述
选择Java,接下来点击Next。
在这里插入图片描述
填写自己项目名称和保存路径。最后点击Finsh就可以了。
创建好后的,再在项目跟目录下,创建libs文件夹,用来放置各种依赖文件,包括worldwind的依赖jar包。src目录下就是主程序文件夹了。
在这里插入图片描述
图中的两个dll文件,先忽略掉,这个后面会讲到。
将上一步下载的zip压缩包,解压,拷贝其中的jar包,到libs文件夹下。
在这里插入图片描述
这9个jar包,分别是:gdal.jar、gluegen-rt.jar、gluegen-rt-natives-windows-amd64.jar、jogl-all.jar、jogl-all-natives-windows-amd64.jar、plugin.jar、vpf-symbols.jar、worldwind.jar、worldwindx.jar。
拷贝好后,右击项目-Open Module Settings.
在这里插入图片描述
在这里插入图片描述
进入到Project Structure弹框后,先后点击Dependencies、“+”号。
在这里插入图片描述
选择JARs or directories。然后选择刚才拷贝的9个jar包,全部导进来。最后呈现如下图。然后点击Apply-OK。
在这里插入图片描述
至此,导入工作结束。然后在src目录下创建程序。右击src-New-Java class.

public class MyWMSPanel extends JFrame {

    private static final long serialVersionUID = 1L;

    private WorldWindowGLCanvas worldWindowGLCanvas;
    private Model modelEarth;
    private JPanel worldWindPanel;

    //绘制主界面
    public MyWMSPanel(){
        this.setExtendedState(Frame.MAXIMIZED_BOTH);
        this.setTitle("Test");       //这里是应用窗口的title,按照需求填写
        int width = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().height;
        this.setSize(width, height);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.worldWindPanel = new JPanel();
        this.worldWindPanel.setBounds(0,0, width, height);

        Dimension canvasSize = new Dimension(width, height);
        this.worldWindowGLCanvas = new WorldWindowGLCanvas();
        this.worldWindowGLCanvas.setPreferredSize(canvasSize);
        modelEarth = (Model) WorldWind.createConfigurationComponent(AVKey.MODEL_CLASS_NAME);
        this.worldWindowGLCanvas.setModel(modelEarth);

        //下面这两个是去掉worldwind自带的指南针和全球缩略图的方法,按照需求决定是否去掉。
        //Layer compass = worldWindowGLCanvas.getModel().getLayers().getLayerByName("Compass");
        //Layer worldMapLayer = worldWindowGLCanvas.getModel().getLayers().getLayerByName("World Map");
        //worldWindowGLCanvas.getModel().getLayers().remove(compass);
       //worldWindowGLCanvas.getModel().getLayers().remove(worldMapLayer);
        try {
            //请求地图的URL
            String uri = "http://127.0.0.1:18070/geoserver/ksh/wms";//这的地址是Geoserver发布的WMS服务,当然也可以使用其他服务器,路径到wms即可。
            URI serverURI = new URI(uri);

            //获得WMSCapabilities对象
            WMSCapabilities caps= WMSCapabilities.retrieve(serverURI);
            //解析WMSCapabilities数据
            caps.parse();

            AVList params = new AVListImpl();

            //图层的名称,这里需要注意一点,这个图层名是在Geoserver图层命名的,不需要图层名前面的工作空间,
            params.setValue(AVKey.LAYER_NAMES, "HBLangFang0_5m20180502");
            //地图服务的协议,这里是OGC:WMS
            params.setValue(AVKey.SERVICE_NAME, "OGC:WMS");
            //获得地图的uri,也就是上面定义的uri
            params.setValue(AVKey.GET_MAP_URL, uri);
            //在本地缓存文件的名称
            params.setValue(AVKey.DATA_CACHE_NAME, "HBLangFang0_5m20180502");
            params.setValue(AVKey.TILE_URL_BUILDER, new WMSTiledImageLayer.URLBuilder(params));

            WMSTiledImageLayer imageLayer = new WMSTiledImageLayer(caps, params);
            //图层名称
            imageLayer.setName("HBLangFang0_5m20180502");
            imageLayer.setEnabled(true);
            //图层的透明度
            imageLayer.setOpacity(1);
            //图层的最大显示高度
            imageLayer.setMaxActiveAltitude(33500000);
            worldWindowGLCanvas.getModel().getLayers().add(imageLayer);
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

        this.worldWindPanel.add(worldWindowGLCanvas, BorderLayout.CENTER);
        this.add(worldWindPanel);
    }

    public static void main(String[] args) {
        new MyWMSPanel().setVisible(true);
    }
}

代码编写好后,这时候运行下程序。应该就可以看到了。
三、运行结果
在这里插入图片描述
在这里插入图片描述
上图就是加载的图层。到此Worlwind java版加载WMS服务的教程到此就完成了。
四、开发拓展
上面提到的根目录下两个dll文件,是为了解决无法时候webview的解决办法。如果使用不到,下面的步骤可以忽略。
当使用WorldWind的Balloons标记时,可能会报一个异常:no WebView64 in java.library.path

解决办法:拷贝worldwind.zip包中的WebView32.dll、WebVIew64.dll两个文件,放到项目的根目录下,然后拷贝zip包中的webstart.xml文件到libs文件夹下,这时候再编译就可以了。

这篇关于WorldWind Java版加载WMS图层服务步骤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!