⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smismapcontrolns.js

📁 使用ASP.NET 2.0 (c#) 实现的gis 的地图系统
💻 JS
📖 第 1 页 / 共 4 页
字号:
/////       Last Update @ 2006-05-26               /////
/////       Version: 5.2.0.27731                   /////
////////////////////////////////////////////////////////
//////  SuperMap IS WebControl Client JavaScript  //////
//////       For Netscape and Mozilla browser     //////
////////////////////////////////////////////////////////

function SetMVIMAGE(mapId)
{
	var drawlayerid = mapId +"_drawlayer";
	var drawlayer = document.getElementById(drawlayerid);
	if(!drawlayer){
		drawlayer = document.createElement(drawlayerid);
		var worklayer = SMISGetWorkLayer(mapId); 
		worklayer.appendChild(drawlayer);
		drawlayer.style.width =worklayer.style.width;
		drawlayer.style.height = worklayer.style.height;
		drawlayer.style.left = worklayer.style.left;
		drawlayer.style.top = worklayer.style.top;
		drawlayer.style.position = "absolute";
		drawlayer.style.visibility = "visible";
		drawlayer.id = drawlayerid;
		var jg = new jsGraphics(drawlayerid);
		drawlayer.jg = jg;
	}
	var map = document.getElementById(mapId +"_MVIMAGE");
	var mapcontrol = document.getElementById(mapId);
	mapcontrol.removeChild(map);
	mapcontrol.appendChild(map);
}

function SplitX(PointsValue, offsetX)
{
	if(typeof(offsetX) =="undefined"){offsetX = 0;}
	var Xpoints = new Array();
	var ArrPoints = PointsValue.split(",");
	for(var i=0; i<ArrPoints.length/2; i++){
		Xpoints[i] = parseInt(ArrPoints[2*i])+offsetX; 
	}
	return Xpoints;
}

function SplitY(PointsValue,offsetY )
{
	if(typeof(offsetY) =="undefined"){offsetY = 0;}
	var Ypoints = new Array();
	var ArrPoints = PointsValue.split(",");
	for(var i=0; i<ArrPoints.length/2; i++){
		Ypoints[i] =parseInt(ArrPoints[2*i+1])+offsetY; 
	}
	return Ypoints;
}

// 获取 map image 对象.  //
function SMISGetMap(mapId)
{
	var _map = document.getElementById(mapId +"_MVIMAGE");
	if(!_map)   _map = document.getElementById(mapId);
	if(!_map)   return null;
	if(!_map.mapId){ _map.mapId = mapId; }
	return _map;
}

function Map_DoCallback(methodName, methodParameters)
{
    showBusyFlag(this.mapId);
    // "PAN|33&33"
    var argument = methodName + "|" + methodParameters;
    WebForm_DoCallback(this.mapId, argument, MapControl_Callback, null, null, false);
}	

// Action 
function SMISActionStart(mapID, action)
{
	var editLineId = "SMISEditLine";
	var line = document.getElementById(editLineId);
	if(line){
		document.forms[0].removeChild(line);
	}
	mapID = mapID.replace("_MVIMAGE", "");
	
	var _map = SMISGetMap(mapID);
	if(!BeforeActionStart(_map)){ return; }
	// 用于解决在 MyIE2 中出现的 ActionStart 之后,地图图片消失的异常bug。 //
	//var v = _map.style.visibility;
	//_map.CurrentAction = "";
	eval(mapID + "_SMISMapActionStart(_map, action)");
	//_map.style.visibility = v;
	AfterActionStarted(_map);
	_map.DoCallback = Map_DoCallback;
}

function SMISMapActionStop(map)
{
	if(!BeforeActionStop(map)){ return; }
	
	map.onmousedown = null;
	map.onmousemove = null;
	map.onmouseup = null;
	map.onclick = null;
	map.ondblclick = null;
	map.style.cursor = "";
	map.bActionStarted = false;
	
	AfterActionStopped(map);
}

//***************************** Mouse Event ********************************

function SMISOnMouseDown(evt)
{
	this.bActionStarted = true;
	var relativePos = SMISGetMouseMapRelativePosition(evt,this.map?this.map:this);
	this.PointsParam.AddPoint(relativePos.x, relativePos.y);
	return false;
}

function SMISPanOnMouseDown(evt)
{
	this.bActionStarted = true;
	// hide the customLayer. --ahnan 2004-07-08
	var customLayerID = this.id.replace("_MVIMAGE","") + "_divCustomLayer";
	var customLayer = document.getElementById(customLayerID);
	if (customLayer){ customLayer.style.visibility = "hidden";}
	var relativePos = SMISGetMouseMapRelativePosition(evt,this.map?this.map:this);
	this.PointsParam.AddPoint(relativePos.x, relativePos.y);

	window.status = this.PointsParam.GeneratePointsString();
	
	// set to absolute
	//this.style.position = "absolute";
	return false;
}

function SMISOnMouseUp(evt)
{
	var map = this;
	if(this.map){map = this.map;}
	if(!this.bActionStarted){return;}

	SMISMapActionStop(map);
	var relativePos = SMISGetMouseMapRelativePosition(evt,map);
	this.PointsParam.AddPoint(relativePos.x, relativePos.y);
	var theform = document.forms[0];
	SMISCreateHiddenField(theform, map.id + "_Action", map.id + "_Action", map.CurrentAction);
	var pointsString = this.PointsParam.GeneratePointsString();
	SMISCreateHiddenField(theform, map.id + "_PointsParam", map.id + "_PointsParam",pointsString);
	//  debug script callback. --ahnan 2005-06-15
	map.DoPostBack();
	this.bActionStarted = false;
	return;

	var startPoint = this.PointsParam.GetPoint(0);
	
	var argument = "";
	var params = "";
	switch(map.CurrentAction){
		case "PAN"		: 
			argument = "PanByPixel"; 
			var offsetX = relativePos.x - startPoint.x;
			var offsetY = relativePos.y - startPoint.y;
			params = offsetX + "&" + offsetY;
			break;
		case "ZOOMIN"	: 
			argument = "ZoomIn";
			params = startPoint.x + "&" + startPoint.y + "&" + relativePos.x + "&" + relativePos.y;
			SMISRemoveRect(map);
			break;
		case "ZOOMOUT"	: 
			argument = "ZoomOut";
			params = startPoint.x + "&" + startPoint.y + "&" + relativePos.x + "&" + relativePos.y;
			SMISRemoveRect(map);
			break;
		default:
			map.DoPostBack();
			return;
			break;
	}
	
	map.DoCallback(argument, params);
	
	while(this.PointsParam.Points.length > 0){
		this.PointsParam.Points.pop();
	}
	SMISCreateHiddenField(theform, map.id + "_Action", map.id + "_Action", "");
	SMISCreateHiddenField(theform, map.id + "_PointsParam", map.id + "_PointsParam", "");

	SMISActionStart(evt,map.id, map.CurrentAction);
}

function SMISCircleOnMouseUp(evt)
{
	if(!this.bActionStarted){return;}
	var posEnd = SMISGetMouseMapRelativePosition(evt,this.map?this.map:this);
	SMISMapActionStop(this);
	this.PointsParam.AddPoint(posEnd.x, posEnd.y);
	var theform = document.forms[0];
	SMISCreateHiddenField(theform, this.id + "_Action", this.id + "_Action", this.CurrentAction);
	var pointsString = this.PointsParam.GeneratePointsString();
	SMISCreateHiddenField(theform, this.id + "_PointsParam", this.id + "_PointsParam",pointsString);
	
	this.DoPostBack();
}

function SMISRectOnMouseMove(evt)
{
	if(!this.bActionStarted){return false;}
	var startPoint = this.PointsParam.GetPoint(0);
	if(startPoint){
		startPoint.x += this.origin.x;
		startPoint.y += this.origin.y;
	}
	if((evt.button == 0|evt.button ==65535) &&  startPoint != null){
		var absolutePos = SMISGetMouseAbsolutePosition(evt);
		SMISDrawingRect(this, startPoint, absolutePos);
	}
	return false;
}

//must return false ,otherwise mouseup event will not be invoked
function SMISPanOnMouseMove(evt)
{	
	if(!this.bActionStarted){return false;}
	var startPoint = this.PointsParam.GetPoint(0);
	if(startPoint){
		startPoint.x += this.origin.x;
		startPoint.y += this.origin.y;
	}
	//if(evt.button == 0 && startPoint != null)先设为65535,不知道为什么会变成65535 
	if((evt.button == 0|evt.button ==65535) && startPoint != null){
		var absolutePos = SMISGetMouseAbsolutePosition(evt);
		if(!SMISCheckMousePosition(evt,this)){
			return false;
		}
		SMISPaningImage(this,startPoint,absolutePos);
	}
	return false;
}

//must return false ,otherwise mouseup event will not be invoked
function SMISCircleOnMouseMove(evt)
{
	if(!this.bActionStarted){return false;}
	var startPoint = this.PointsParam.GetPoint(0);
	if(startPoint){
		startPoint.x += this.origin.x;
		startPoint.y += this.origin.y;
	}
	if((evt.button == 0|evt.button ==65535) &&  startPoint != null){
		var absolutePos = SMISGetMouseAbsolutePosition(evt);
		SMISDrawingCircle(this, startPoint, absolutePos);
	}
	return false;
}

function SMISPolygonOnMouseMove(evt)
{
	if(!this.bActionStarted){return false;}
	var map = SMISGetInnerMap(this);
	var absolutePos = SMISGetMouseAbsolutePosition(evt);
	SMISDrawingPolygon(map, absolutePos, map.PolygonClosed);
	return false;
}

function SMISPolygonOnMouseClick(evt)
{
	this.bActionStarted = true;
	var map = SMISGetInnerMap(this);
	var relativePos = SMISGetMouseMapRelativePosition(evt,map);
	map.PointsParam.AddPoint(relativePos.x, relativePos.y);
	return false;
}

function SMISPolygonOnDblClick(evt)
{
	var map = SMISGetInnerMap(this);
	SMISMapActionStop(this);
	SMISMapActionStop(map);
	var theform = document.forms[0];
	SMISCreateHiddenField(theform, map.id + "_Action", map.id + "_Action", map.CurrentAction);
	// OnMouseClick 会被调用两次,这里去掉最后的那一次。 
	map.PointsParam.Points.pop();
	var pointsString = map.PointsParam.GeneratePointsString();
	SMISCreateHiddenField(theform, map.id + "_PointsParam", map.id + "_PointsParam",pointsString);
	map.DoPostBack();
}

//***************************** End Mouse Event ****************************

//Paning Image
function SMISPaningImage(map, startPoint, curPoint)
{
	//PanWorkLayer(map, startPoint, curPoint);
	if(!map.map){
	    PanMapCells(map, startPoint, curPoint);
    	return;
	}
	var clipTop, clipRight, clipBottom, clipLeft;
	var currentLeft, currentTop, currentRight, currentBottom;
	
	// Calculate absolute current coordinates of the image
	currentLeft = map.offset.x + (curPoint.x - startPoint.x);
	currentTop = map.offset.y + (curPoint.y - startPoint.y);
	if(map.map){
		map.style.left = (currentLeft+map.origin.x)+"px";
		map.style.top = (currentTop+map.origin.y)+"px"; 
		SMISClipPolygon(map, true, curPoint.x - startPoint.x, curPoint.y - startPoint.y);
		return;
	}
	try{
		currentRight = currentLeft + map.width;
		currentBottom = currentTop + map.height;
	}
	catch(e){
		currentRight = currentLeft + map.map.width;
		currentBottom = currentTop + map.map.height;
	}
		// Check to see if image goes out of bounds, and if so, set the clipping parameters
	if ( currentTop > map.offset.y ) clipTop = 0;
	else clipTop = map.offset.y - currentTop;
			
	if (currentRight > (map.offset.x + map.width)) clipRight = (map.offset.x + map.width) - currentLeft;
	else clipRight = currentRight - currentLeft;
		
	if (currentBottom > (map.offset.y + map.height)) clipBottom = (map.offset.y + map.height) - currentTop;
	else clipBottom = currentBottom - currentTop;
			
	if (currentLeft > map.offset.x) clipLeft = 0;
	else clipLeft = map.offset.x - currentLeft;
	// Set the map image's style parameters to actually move the image	
	map.style.left = currentLeft + "px"; 
	map.style.top = currentTop + "px";	
	map.style.clip = 'rect(' + clipTop + ' ' +  clipRight + ' ' + clipBottom + ' ' + clipLeft +')';
}

//***************************** Drawing ************************************
//Enable VML support
function SMISEnableVML()
{
	// todo: support ie5.0, ie5.5
	if(document.namespaces)
	{
		document.namespaces.add("v", "urn:schemas-microsoft-com:vml")
	}
	if(document.styleSheets.length < 1)
	{
		var _oStyle = document.createElement("style");
		document.body.appendChild(_oStyle);
	}
	document.styleSheets.item(0).addRule("v\\:*", "behavior:url(#default#VML)");
}

function SMISDrawingRect(map, startPoint, curPoint)
{
	curPoint.x = Math.max(map.origin.x, Math.min(curPoint.x, map.origin.x + map.offsetWidth+2));
	curPoint.y = Math.max(map.origin.y, Math.min(curPoint.y, map.origin.y + map.offsetHeight+2));
	var left = Math.min(startPoint.x, curPoint.x);
	var top = Math.min(startPoint.y, curPoint.y);
	var width = Math.abs(curPoint.x - startPoint.x);
	var height =  Math.abs(curPoint.y - startPoint.y);
	
	var drawlayerId = map.id.replace("_MVIMAGE","") + "_drawlayer";
	var drawlayer =document.getElementById(drawlayerId);
	drawlayer.jg.clear();
	drawlayer.jg.setColor("#ff0000"); // red 
	drawlayer.jg.drawRect(left-map.origin.x,top-map.origin.y,width,height); 
	drawlayer.jg.paint();
	
	
}

function SMISRemoveRect(map)
{
	var rect = document.getElementById("SMISRect");
	if(rect) { document.body.removeChild(rect);	}
	rect = null;
}


function SMISDrawingCircle(map, startPoint, curPoint)
{
	
	curPoint.x = Math.max(map.origin.x, Math.min(curPoint.x, map.origin.x + map.offsetWidth+2));
	curPoint.y = Math.max(map.origin.y, Math.min(curPoint.y, map.origin.y + map.offsetHeight+2));
	var radius = Math.sqrt(Math.pow((curPoint.x - startPoint.x), 2) + Math.pow((curPoint.y - startPoint.y), 2))
	var left = startPoint.x - radius;
	var top = startPoint.y -radius;
	
	var drawlayerId = map.id.replace("_MVIMAGE","") + "_drawlayer";
	var drawlayer =document.getElementById(drawlayerId);
	drawlayer.jg.clear();
	drawlayer.jg.setColor("#ff0000"); // red 
	drawlayer.jg.drawEllipse(left-map.origin.x,top-map.origin.y,radius*2,radius*2);
	drawlayer.jg.paint();
}

function SMISRemoveCircle(map)
{
	var circle = document.getElementById("SMISCircle");
	if(circle) { document.body.removeChild(circle);	}
	circle = null;
}

function SMISDrawingPolygon(map,curPoint,polygonClosed)
{
	var pointsValue = map.PointsParam.GetPointsString(map.origin);
	var index = map.PointsParam.Points.length-1;
	var lastPoint = map.PointsParam.GetPoint(index);
	pointsValue += ","+ curPoint.x+","+curPoint.y; 
	var drawlayerId = map.id.replace("_MVIMAGE","") + "_drawlayer";
	var drawlayer =document.getElementById(drawlayerId);
	drawlayer.jg.clear();
	var Xpoints = SplitX(pointsValue,-map.origin.x);
	var Ypoints = SplitY(pointsValue,-map.origin.y);
	drawlayer.jg.setColor("#ff0000"); // red

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -