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


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

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

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

    [java] view plain copy
     
     print?在CODE上查看代码片派生到我的代码片
    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?在CODE上查看代码片派生到我的代码片
    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?在CODE上查看代码片派生到我的代码片
      1. <html>  
      2. <head>  
      3. <style type='text/css'>  
      4. html, body {  
      5.     margin: 0 0;  
      6.      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- 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- 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.whu.edu.cn/index.htm"<img  
      49.                         border='0' alt='' width='300px' height='225px'  
      50.                         src='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>  
  • 相关阅读:
    Codeforces Round #706 (Div. 2)
    Caddi Programming Contest 2021(AtCoder Beginner Contest 193)
    [ARC116] Deque Game
    Codeforces Round #721 (Div. 2)
    Codeforces Round #618 (Div. 1)
    Educational Codeforces Round 109 (Rated for Div. 2)
    [ABC201F] Insertion Sort
    AtCoder Regular Contest 119
    Codeforces Global Round 13
    Codeforces Round #673 (Div. 1)
  • 原文地址:https://www.cnblogs.com/telwanggs/p/6774699.html
Copyright © 2020-2023  润新知