加载热点信息(仿Google Earth)

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

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

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

/** * @Copyright 2014-2020 @ **/package edu.whu.vge.util;import gov.nasa.worldwind.avlist.AVKey;import gov.nasa.worldwind.awt.WorldWindowGLCanvas;import gov.nasa.worldwind.geom.Position;import gov.nasa.worldwind.layers.RenderableLayer;import gov.nasa.worldwind.render.AbstractBrowserBalloon;import gov.nasa.worldwind.render.BalloonAttributes;import gov.nasa.worldwind.render.BasicBalloonAttributes;import gov.nasa.worldwind.render.GlobeBrowserBalloon;import gov.nasa.worldwind.render.PointPlacemark;import gov.nasa.worldwind.render.Size;import gov.nasa.worldwind.util.Logging;import gov.nasa.worldwind.util.WWIO;import gov.nasa.worldwindx.examples.util.BalloonController;import gov.nasa.worldwindx.examples.util.HotSpotController;import java.io.InputStream;/** * * @项目名称:SMartScope * @类名称:BalloonsUtil * @类描述: * @创建人:刘硕 * @创建时间:2015年2月3日 下午4:56:26 * @修改备注: * @版本: */public class BalloonsUtil{private double balloonLat; // 气球纬度private double balloonLon; // 气球经度private String balloonContentPath; // html文件路径private String balloonName; // 气球名称protected HotSpotController hotSpotController;protected BalloonController balloonController;/** * * 创建一个新的实例 BalloonsUtil. * * @param balloonLat * @param balloonLon * @param balloonContentPath * @param balloonName */public BalloonsUtil(double balloonLat, double balloonLon,String balloonContentPath, String balloonName){super();this.balloonLat = balloonLat;this.balloonLon = balloonLon;this.balloonContentPath = balloonContentPath;this.balloonName = balloonName;}/** * s * * @方法名称: makeBrowserBalloon ; * @方法描述: 生成Balloon标记图层 ; * @参数 :@param windowGLCanvas * @参数 :@return * @返回类型: RenderableLayer ; * @创建人:刘硕; * @创建时间:2015年2月3日 下午5:01:03; * @throws */public RenderableLayer makeBrowserBalloon(WorldWindowGLCanvas windowGLCanvas){// balloonControllerthis.hotSpotController = new HotSpotController(windowGLCanvas);this.balloonController = new BalloonController(windowGLCanvas);RenderableLayer layer = new RenderableLayer();layer.setName(balloonName);String htmlString = null;InputStream contentStream = null;try{// 读取html文件内容contentStream = WWIO.openFileOrResourceStream(balloonContentPath,null);htmlString = WWIO.readStreamToString(contentStream, null);}catch (Exception e){e.printStackTrace();}finally{WWIO.closeStream(contentStream, balloonContentPath);}if (htmlString == null) htmlString = Logging.getMessage("generic.ExceptionAttemptingToReadFile", balloonContentPath);// 创建一个GlobeBrowserBalloonPosition balloonPosition = Position.fromDegrees(balloonLat, balloonLon);AbstractBrowserBalloon balloon = new GlobeBrowserBalloon(htmlString,balloonPosition);// 设置GlobeBrowserBalloon属性BalloonAttributes attrs = new BasicBalloonAttributes();attrs.setSize(new Size(Size.NATIVE_DIMENSION, 0d, null,Size.NATIVE_DIMENSION, 0d, null));balloon.setAttributes(attrs);// 将GlobeBrowserBalloon与PointPlacemark关联起来PointPlacemark placemark = new PointPlacemark(balloonPosition);placemark.setLabelText(balloonName);placemark.setValue(AVKey.BALLOON, balloon);layer.addRenderable(balloon);layer.addRenderable(placemark);return layer;}public double getBalloonLat(){return balloonLat;}public void setBalloonLat(double balloonLat){this.balloonLat = balloonLat;}public double getBalloonLon(){return balloonLon;}public void setBalloonLon(double balloonLon){this.balloonLon = balloonLon;}public String getBalloonContentPath(){return balloonContentPath;}public void setBalloonContentPath(String balloonContentPath){this.balloonContentPath = balloonContentPath;}public String getBalloonName(){return balloonName;}public void setBalloonName(String balloonName){this.balloonName = balloonName;}}调用的时候,只需键入以下代码即可:String htmlPath = System.getProperty("user.dir")+ "\\src\\edu\\whu\\vge\\data\\whu.html";BalloonsUtil balloonsUtil = new BalloonsUtil(30.5271,114.3604, htmlPath, "我在这里");wwPanel.getWorldWindowGLCanvas().getModel().getLayers().add(balloonsUtil.makeBrowserBalloon(wwPanel.getWorldWindowGLCanvas()));另外,,附上whu.html网页的代码以供大家参考。<html><head><style type='text/css'>html, body {margin: 0 0;width: 100%;height: 100%;overflow: hidden}a:link {color: #0000CD;text-decoration: underline}table {font-family: verdana, 黑体, sans-serif;font-size: 12px;color: #4169E1;border-width: 1px;border-color: #a9c6c9;border-collapse: collapse}th {background-color: #4169E1;color: #fff}tr {background-color: #d4e3e5}td {border-width: 1px;border-style: solid;border-color: #a9c6c9}</style><title></title></head><body><table border='0'><tr><th align='center' colspan='2'>武汉大学</th></tr><tr><td rowspan='7'><a href=""> <imgborder='0' alt='' width='300px' height='225px'src=''></a></td></tr></table></body></html>

别想一下造出大海,必须先由小河川开始。

加载热点信息(仿Google Earth)

相关文章:

你感兴趣的文章:

标签云: