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

30 篇文章 1 订阅
29 篇文章 0 订阅

在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)
	{
		// ע��balloonController
		this.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);

		// 创建一个GlobeBrowserBalloon
		Position 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="http://www.whu.edu.cn/index.htm"> <img
						border='0' alt='' width='300px' height='225px'
						src='http://news.whu.edu.cn/_mediafile/whu_news/2015/02/02/1eq0euop1q.jpg'>
				
			</a></td>
		</tr>

	</table>
</body>
</html>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值