ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-10-18 12:00:36  阅读:301  来源: 互联网

标签:Java WorldWind WMS jar params worldWindowGLCanvas new 图层


近期公司有项目需求,需要开发一款桌面端的三维地球。由于本人是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文件夹下,这时候再编译就可以了。

标签:Java,WorldWind,WMS,jar,params,worldWindowGLCanvas,new,图层
来源: https://blog.csdn.net/nanjumufeng/article/details/120821627

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有