首页 > 代码库 > World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)

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

技术分享

再来看下本文的实现效果:技术分享

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

 

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


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

 

 

[java] view plain copy
 
 print?技术分享技术分享
  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.   
  6.                     wwPanel.getWorldWindowGLCanvas()  
  7.                             .getModel()  
  8.                             .getLayers()  
  9.                             .add(balloonsUtil.makeBrowserBalloon(wwPanel  
  10.                                     .getWorldWindowGLCanvas()));  

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

 

 

[html] view plain copy
 
 print?技术分享技术分享
    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.   
    11. a:link {  
    12.     color: #0000CD;  
    13.     text-decoration: underline  
    14. }  
    15.   
    16. table {  
    17.     font-family: verdana, 黑体, sans-serif;  
    18.     font-size: 12px;  
    19.     color: #4169E1;  
    20.     border-width: 1px;  
    21.     border-color: #a9c6c9;  
    22.     border-collapse: collapse  
    23. }  
    24.   
    25. th {  
    26.     background-color: #4169E1;  
    27.     color: #fff  
    28. }  
    29.   
    30. tr {  
    31.     background-color: #d4e3e5  
    32. }  
    33.   
    34. td {  
    35.     border-width: 1px;  
    36.     border-style: solid;  
    37.     border-color: #a9c6c9  
    38. }  
    39. </style>  
    40. <title></title>  
    41. </head>  
    42. <body>  
    43.     <table border=‘0‘>  
    44.         <tr>  
    45.             <th align=‘center‘ colspan=‘2‘>武汉大学</th>  
    46.         </tr>  
    47.         <tr>  
    48.             <td rowspan=‘7‘><href=http://www.mamicode.com/"http://www.whu.edu.cn/index.htm"<img  
    49.                         border=‘0‘ alt=‘‘ width=‘300px‘ height=‘225px‘  
    50.                         src=http://www.mamicode.com/‘http://news.whu.edu.cn/_mediafile/whu_news/2015/02/02/1eq0euop1q.jpg‘>  
    51.                   
    52.             </a></td>  
    53.         </tr>  
    54.   
    55.     </table>  
    56. </body>  
    57. </html>  

World Wind Java开发之十一——加载热点信息(仿Google Earth)(转)