在GE的图层中有一个照片图层,在浏览时可以看到各地的一些图片,我们称之为热点信息,如下图所示:

再来看下本文的实现效果:

效果是不是很像呢,其实实现这个很简单,参照examples中的Balloons就可以很容易的实现,这里我自己封装了BalloonUtil类便于复用,代码很简单都加了注释就不再一一展开了,直接附上源代码,有看不明白的地方可以留言交流哈。

  1. /**
  2. * @Copyright 2014-2020 @��˶
  3. **/
  4. package edu.whu.vge.util;
  5. import gov.nasa.worldwind.avlist.AVKey;
  6. import gov.nasa.worldwind.awt.WorldWindowGLCanvas;
  7. import gov.nasa.worldwind.geom.Position;
  8. import gov.nasa.worldwind.layers.RenderableLayer;
  9. import gov.nasa.worldwind.render.AbstractBrowserBalloon;
  10. import gov.nasa.worldwind.render.BalloonAttributes;
  11. import gov.nasa.worldwind.render.BasicBalloonAttributes;
  12. import gov.nasa.worldwind.render.GlobeBrowserBalloon;
  13. import gov.nasa.worldwind.render.PointPlacemark;
  14. import gov.nasa.worldwind.render.Size;
  15. import gov.nasa.worldwind.util.Logging;
  16. import gov.nasa.worldwind.util.WWIO;
  17. import gov.nasa.worldwindx.examples.util.BalloonController;
  18. import gov.nasa.worldwindx.examples.util.HotSpotController;
  19. import java.io.InputStream;
  20. /**
  21. *
  22. * @项目名称:SMartScope
  23. * @类名称:BalloonsUtil
  24. * @类描述:
  25. * @创建人:刘硕
  26. * @创建时间:2015年2月3日 下午4:56:26
  27. * @修改备注:
  28. * @版本:
  29. */
  30. public class BalloonsUtil
  31. {
  32. private double balloonLat; // 气球纬度
  33. private double balloonLon; // 气球经度
  34. private String balloonContentPath; // html文件路径
  35. private String balloonName; // 气球名称
  36. protected HotSpotController hotSpotController;
  37. protected BalloonController balloonController;
  38. /**
  39. *
  40. * 创建一个新的实例 BalloonsUtil.
  41. *
  42. * @param balloonLat
  43. * @param balloonLon
  44. * @param balloonContentPath
  45. * @param balloonName
  46. */
  47. public BalloonsUtil(double balloonLat, double balloonLon,
  48. String balloonContentPath, String balloonName)
  49. {
  50. super();
  51. this.balloonLat = balloonLat;
  52. this.balloonLon = balloonLon;
  53. this.balloonContentPath = balloonContentPath;
  54. this.balloonName = balloonName;
  55. }
  56. /**
  57. * s
  58. *
  59. * @方法名称: makeBrowserBalloon ;
  60. * @方法描述: 生成Balloon标记图层 ;
  61. * @参数 :@param windowGLCanvas
  62. * @参数 :@return
  63. * @返回类型: RenderableLayer ;
  64. * @创建人:刘硕;
  65. * @创建时间:2015年2月3日 下午5:01:03;
  66. * @throws
  67. */
  68. public RenderableLayer makeBrowserBalloon(WorldWindowGLCanvas windowGLCanvas)
  69. {
  70. // ע��balloonController
  71. this.hotSpotController = new HotSpotController(windowGLCanvas);
  72. this.balloonController = new BalloonController(windowGLCanvas);
  73. RenderableLayer layer = new RenderableLayer();
  74. layer.setName(balloonName);
  75. String htmlString = null;
  76. InputStream contentStream = null;
  77. try
  78. {
  79. // 读取html文件内容
  80. contentStream = WWIO.openFileOrResourceStream(balloonContentPath,
  81. null);
  82. htmlString = WWIO.readStreamToString(contentStream, null);
  83. }
  84. catch (Exception e)
  85. {
  86. e.printStackTrace();
  87. }
  88. finally
  89. {
  90. WWIO.closeStream(contentStream, balloonContentPath);
  91. }
  92. if (htmlString == null) htmlString = Logging.getMessage(
  93. "generic.ExceptionAttemptingToReadFile", balloonContentPath);
  94. // 创建一个GlobeBrowserBalloon
  95. Position balloonPosition = Position.fromDegrees(balloonLat, balloonLon);
  96. AbstractBrowserBalloon balloon = new GlobeBrowserBalloon(htmlString,
  97. balloonPosition);
  98. // 设置GlobeBrowserBalloon属性
  99. BalloonAttributes attrs = new BasicBalloonAttributes();
  100. attrs.setSize(new Size(Size.NATIVE_DIMENSION, 0d, null,
  101. Size.NATIVE_DIMENSION, 0d, null));
  102. balloon.setAttributes(attrs);
  103. // 将GlobeBrowserBalloon与PointPlacemark关联起来
  104. PointPlacemark placemark = new PointPlacemark(balloonPosition);
  105. placemark.setLabelText(balloonName);
  106. placemark.setValue(AVKey.BALLOON, balloon);
  107. layer.addRenderable(balloon);
  108. layer.addRenderable(placemark);
  109. return layer;
  110. }
  111. public double getBalloonLat()
  112. {
  113. return balloonLat;
  114. }
  115. public void setBalloonLat(double balloonLat)
  116. {
  117. this.balloonLat = balloonLat;
  118. }
  119. public double getBalloonLon()
  120. {
  121. return balloonLon;
  122. }
  123. public void setBalloonLon(double balloonLon)
  124. {
  125. this.balloonLon = balloonLon;
  126. }
  127. public String getBalloonContentPath()
  128. {
  129. return balloonContentPath;
  130. }
  131. public void setBalloonContentPath(String balloonContentPath)
  132. {
  133. this.balloonContentPath = balloonContentPath;
  134. }
  135. public String getBalloonName()
  136. {
  137. return balloonName;
  138. }
  139. public void setBalloonName(String balloonName)
  140. {
  141. this.balloonName = balloonName;
  142. }
  143. }

调用的时候,只需键入以下代码即可:

  1. String htmlPath = System.getProperty("user.dir")
  2. + "\\src\\edu\\whu\\vge\\data\\whu.html";
  3. BalloonsUtil balloonsUtil = new BalloonsUtil(30.5271,
  4. 114.3604, htmlPath, "我在这里");
  5. wwPanel.getWorldWindowGLCanvas()
  6. .getModel()
  7. .getLayers()
  8. .add(balloonsUtil.makeBrowserBalloon(wwPanel
  9. .getWorldWindowGLCanvas()));

另外,附上whu.html网页的代码以供大家参考。

    1. <html>
    2. <head>
    3. <style type='text/css'>
    4. html, body {
    5. margin: 0 0;
    6. width: 100%;
    7. height: 100%;
    8. overflow: hidden
    9. }
    10. a:link {
    11. color: #0000CD;
    12. text-decoration: underline
    13. }
    14. table {
    15. font-family: verdana, 黑体, sans-serif;
    16. font-size: 12px;
    17. color: #4169E1;
    18. border-width: 1px;
    19. border-color: #a9c6c9;
    20. border-collapse: collapse
    21. }
    22. th {
    23. background-color: #4169E1;
    24. color: #fff
    25. }
    26. tr {
    27. background-color: #d4e3e5
    28. }
    29. td {
    30. border-width: 1px;
    31. border-style: solid;
    32. border-color: #a9c6c9
    33. }
    34. </style>
    35. <title></title>
    36. </head>
    37. <body>
    38. <table border='0'>
    39. <tr>
    40. <th align='center' colspan='2'>武汉大学</th>
    41. </tr>
    42. <tr>
    43. <td rowspan='7'><a href="http://www.whu.edu.cn/index.htm"> <img
    44. border='0' alt='' width='300px' height='225px'
    45. src='http://news.whu.edu.cn/_mediafile/whu_news/2015/02/02/1eq0euop1q.jpg'>
    46. </a></td>
    47. </tr>
    48. </table>
    49. </body>
    50. </html>

World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)的更多相关文章

  1. World Wind Java开发之十三——加载Geoserver发布的WMS服务(转)

    这篇是转载的平常心博客,原地址见:http://www.v5cn.cn/?p=171 1.WMSTiledImageLayer类说明 一个WMSTiledImageLayer类对象只能对应一个WMS发 ...

  2. World Wind Java开发之六——解析shape文件(转)

    http://blog.csdn.net/giser_whu/article/details/41647117 最近一直忙于导师项目的事情了,几天没更新了,昨天和今天研究了下WWJ解析shp文件的源代 ...

  3. [转]World Wind Java开发之四——搭建本地WMS服务器

    在提供地理信息系统客户端时,NASA还为用户提供了开源的WMS Server 服务器应用:World Wind WMS Server.利用这个应用,我们可以架设自己的WMS服务并使用自己的数据(也支持 ...

  4. java在windows下加载dll

    java在类中加载动态链接库文件. 类文件中: static { System.loadLibrary("dll文件"); } dll文件在工程的包路径下.例如:pro/bin/h ...

  5. 混合开发(一)——WebView开发高级技巧之加载网页以及JavaScript,加载进度条

    混合开发(一)--WebView开发高级技巧之加载网页以及JavaScript,加载进度条 现在关于混合开发也越来越多了,很多人喜欢跟随,比如HB,比如RN,其实这东西很早就有这么一个概念了,而且说实 ...

  6. Java类编译、加载、和执行机制

    Java类编译.加载.和执行机制 标签: java 类加载 类编译 类执行 机制 0.前言 个人认为,对于JVM的理解,主要是两大方面内容: Java类的编译.加载和执行. JVM的内存管理和垃圾回收 ...

  7. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  8. 微信小程序开发动感十足的加载动画--都在这里!

    代码地址如下:http://www.demodashi.com/demo/14242.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  9. java——Class、动态加载

    Class和Object混淆了? Object: 任何类都是Object类的子类 Class: 任何类都是Class的实例对象 Class可以说是一种特殊的类,它表示的是类类型,Object仍然是Cl ...

随机推荐

  1. JVM 零散知识

    年轻代大小选择: 响应时间优先的应用: 尽可能设大,直到接近系统的最低响应时间限制.在此种情况下,年轻代收集发生的频率也是最小的.同时,减少到达年老代的对象. 吞吐量优先的应用: 尽可能的设置大,可能 ...

  2. CF 984C Finite or not? (数论)

    CF 984C Finite or not? (数论) 给定T(T<=1e5)组数据,每组数据给出十进制表示下的整数p,q,b,求问p/q在b进制意义下是否是有限小数. 首先我们先把p/q约分一 ...

  3. 避免picture图片无法删除,提示正在被其他进程使用

    pictureBox1.Image = Image.FromStream(ByteToStream(SetImageToByteArray(cutImgPath))); #region 将文件转换成流 ...

  4. 安装篇:MySQL系列之一

    环境:CentOS6.9系统安装MariaDB-10.2.15 一.yum包管理器安装MariaDB-server ​ 1)配置yum源(MariaDB官方源) [root@centos6 ~]# v ...

  5. Jenkins+maven+gitlab+shell实现项目自动化部署

    确认jdk , maven,git这些已经在服务器上搭建成功,gitlab使用的是公司服务也没有进行搭建 下面是jenkins的两种搭建方式 1.      第一种比较简单下载对应jenkins.wa ...

  6. linux shell 脚本 历史文件清理脚本,按天,按月,清理前N天的历史文件,删除指定大小历史文件,历史文件归档清理

    不知道大家那有没有要清理的这个事情.需要清理目录历史文件.可能后续也会有很多其他地方需要清理历史文件,可能会用到. 我这两天空闲写了个脚本,清理比较方便,有要进行清理的大量历史文件的话可以用. 脚本用 ...

  7. python_魔法方法(三):__str__()和__repr__()

    使用python的魔法方法和time模块定制一个计时器的类 1.用time模块里的localtime()方法获取时间2.time.localtime返回struct_time格式3.表现你的类:__s ...

  8. 011 Container With Most Water 盛最多水的容器

    给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) .画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线,使得它们 ...

  9. Microsoft JET Database Engine (0x80004005)未指定的错误解决

    Microsoft JET Database Engine (0x80004005)未指定的错误,这个错误只有在使用Access数据库时才能出现 出现以上问题,可以使用以下步骤进行解决问题: 1.系统 ...

  10. (转)Linux: dirname、basename命令详解

    Linux: dirname.basename命令详解 原文:http://blog.sina.com.cn/s/blog_3f63916f010143vo.html 一.dirname指令 1.功能 ...