📄 smismapcontrolns.js
字号:
///// 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 + -