运行范例

描述

该范例展示如何通过扩展的方式来实现用户自定义的Action,示例中通过微软脚本库来继承SceneAction类

了解微软脚本库的更多信息请参见微软官方帮助文档.

代码 (文件格式为 UTF-8)


<html> 
	<head> 
		<meta http-equiv="X-UA-Compatible" content="IE=8" />	
		<meta http-equiv="Content-Type" content="text/html; charset = UTF-8" /> 
		<title> MyAction</title> 
		<script type="text/javascript" src="SuperMap.Include.js"> </script> 
		<script type="text/javascript"> 
			var sceneControl = null;
			var scene = null;
			var htmlUrl = document.location.host;
			//判断网页的打开方式是本地打开还是通过网络打开
			//不同的打开方式url赋值不同
			if(htmlUrl == "")
			{
				htmlUrl = "http://localhost:8090";
			}
			else
			{
				htmlUrl = "http://" + htmlUrl;
			}
		    
			function onPageLoad()
			{
				//初始化三维场景控件
				try
				{
					//初始化三维场景控件实例,参数为包含控件的HTML元素
					sceneControl = new SuperMap.Web.UI.Controls.SceneControl($get("sceneControlDiv"), initCallback, failedCallback);
				}
				catch(e)
				{   
					//若没有安装插件,则抛出该异常
					if (e.name == SuperMap.Web.Realspace.ExceptionName.PlugInNotInstalled) 
					{
						var url = htmlUrl + "/iserver/iClient/for3D/plugin/Setup.exe";
						document.write("<a href='"+url+"'>未检测到 SuperMap iClient3D for  Plugin 插件,请单击此处下载并安装插件。</a>");
						return;
					}
					//若使用非IE浏览器,则抛出该异常
					else if (e.name == SuperMap.Web.Realspace.ExceptionName.BrowserNotSupport) 
					{
						document.write("<p>SuperMap iClient3D for  Plugin 目前仅支持 InternetExplorer 浏览器,请更换浏览器后重新尝试加载本页面。</p>");
					return;
					}
					//抛出其他异常
					else
					{
						alert(e.message);
					}
				}	
			}
			
			//控件初始化完成后的回调函数,初始化完成之后才能进行数据加载
			function initCallback() 
			{
				//获取地球控件场景,控件和场景是一对一的捆绑关系
				scene = sceneControl.get_scene();
			}

			//控件初始化失败后的回调函数
			function failedCallback() 
			{
				alert("Realspace initialized failed!");
			}
            
			function pan()
			{
				//设置控件的当前操作为漫游
				var panAction = new SuperMap.Web.UI.Action3Ds.Pan(sceneControl);
				sceneControl.set_sceneAction(panAction); 
			}
			
			function getInfo()
			{
				//设置控件的当前操作为自定义操作
				var myAction = new SuperMap.Web.UI.Action3Ds.MyAction(sceneControl);
				sceneControl.set_sceneAction(myAction); 
			}
	
			//通过继承SceneAction的方式来扩展用户的Action,继承方式采用框架提供的格式
			//扩展Action的构造函数
			SuperMap.Web.UI.Action3Ds.MyAction = function(sceneControl)
			{
				SuperMap.Web.UI.Action3Ds.MyAction.initializeBase(this);

				this._name = "myAction";

				this._sceneControl = sceneControl;

				//对应的场景操作类型为漫游
				this._type = SuperMap.Web.UI.Action3Ds.SceneActionType.PAN;
			};

			//扩展Action的属性和方法
			SuperMap.Web.UI.Action3Ds.MyAction.prototype =
			{
				/*
				* 析构方法
				*/
				dispose:function()
				{
					this._sceneControl = null;
				},
				
				/*
				* 鼠标单击方法
				*/
				onMouseDown:function(e)
				{
					//通过事件对象查询到相关的信息
					alert("经度:"+e.get_longitude()+ "\n" +"纬度:"+e.get_latitude()+"\n"
						+"高度:"+e.get_altitude()+"\n" +"相机高度:"+e.get_camera().get_altitude()
						+"\n" +"键值:"+e.get_flagType());
				}
			};
			SuperMap.Web.UI.Action3Ds.MyAction.registerClass('SuperMap.Web.UI.Action3Ds.MyAction',SuperMap.Web.UI.Action3Ds.SceneAction,Sys.IDisposable);
		</script>
	</head>
	<body onLoad="onPageLoad()"> 
		<div style="style="position:absolute;left:5px;top:35px;bottom:5px;right:5px;float:left;">	
		<input id="" type="button" value="位置信息" onclick="getInfo()">	
		<input id="Pan" type="button" value="漫游" onclick="pan()">	
		</div>
		<div id="sceneControlDiv" style="style="position:absolute;left:5px;top:35px;bottom:5px;right:5px">
		</div>
	</body>
</html>