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

📄 maptest.js

📁 《SVG开发实践》源代码
💻 JS
📖 第 1 页 / 共 2 页
字号:
			
	}
}

function svgMouseUp(evt)
{
	if(!IsDoing) return;
	switch(MouseCMD)
	{
		case null:
			break;
		case "ZOOM":
			IsDoing=false;
			var x=parseFloat(ZoomRect.getAttributeNS(null,"x"));
			var y=parseFloat(ZoomRect.getAttributeNS(null,"y"));
			var w=evt.clientX*WAmp+vbCX-x;
			var h=evt.clientY*HAmp+vbCY-y;
			var cx=x+w/2;
			var cy=y+h/2;
			if(w<=0||h<=0)
			{
				CurrentAmp=Math.min(CurrentAmp+ZoomStep,MaxAmp);
				cx=evt.clientX*WAmp+vbCX;
				cy=evt.clientY*HAmp+vbCY;
			}
			else
			{
				ZoomRect.setAttributeNS(null,"width",w);
				ZoomRect.setAttributeNS(null,"height",h);
				CurrentAmp=Math.min(SVGW/w,SVGH/h,MaxAmp);
			}
			w=SVGW/CurrentAmp; h=SVGH/CurrentAmp; x=cx-w/2; y=cy-h/2;
			x=Math.min(Math.max(x,0),vbMaxW-w);
			y=Math.min(Math.max(y,0),vbMaxH-h);
			MainSVG.setAttributeNS(null,"viewBox",x+" "+y+" "+w+" "+h);
			ZoomRect.setAttributeNS(null,"visibility","hidden");
			endZoom();
			break;
		case "PAN":
			IsDoing=false;
			break;
		case"RECT":
			IsDoing=false;
			var x=parseFloat(ZoomRect.getAttributeNS(null,"x"));
			var y=parseFloat(ZoomRect.getAttributeNS(null,"y"));
			var w=evt.clientX*WAmp+vbCX-x;
			var h=evt.clientY*HAmp+vbCY-y;
			var cx=x+w/2;
			var cy=y+h/2;
			if(w<=0||h<=0)
			{
				CurrentAmp=Math.min(CurrentAmp+ZoomStep,MaxAmp);
				cx=evt.clientX*WAmp+vbCX;
				cy=evt.clientY*HAmp+vbCY;
			}
			else
			{
				ZoomRect.setAttributeNS(null,"width",w);
				ZoomRect.setAttributeNS(null,"height",h);
				CurrentAmp=Math.min(SVGW/w,SVGH/h,MaxAmp);
			}
			x=x2lon(x);
			y=y2lat(y);
			w = x2lon(evt.clientX*WAmp+vbCX);
			h = y2lat(evt.clientY*HAmp+vbCY);
			
			//alert("右下角坐标"+w+","+h+"/左上角坐标"+x+","+y);
			ZoomRect.setAttributeNS(null,"visibility","hidden");
			parent.document.all.LoadingImg.style.visibility = "visible";
			parent.RectFind(x,y,w,h);
			setCMD("PAN");
			break;
	}
}

function endZoom()
{
	getCurrentVB(); //AntiZoom();
	parent.PullZoomBtn();
	
}

function updateCheckbox(parentobj,name)
{
	parentobj.checked=(SVGDoc.getElementById(name).getAttributeNS(null,"visibility")=="visible");
}

function resetZoom()
{
	MainSVG.setAttributeNS(null,"viewBox","0 0 "+vbMaxW+" "+vbMaxH);
	endZoom();
	parent.document.all.MiniRect.style.visibility="hidden";
}
parent.resetZoom=resetZoom;

function goEast()
{
	getCurrentVB();
	x=Math.min(Math.max(vbCX+MoveStep,0),vbMaxW-vbCW);
	MainSVG.setAttributeNS(null,"viewBox",x+" "+vbCY+" "+vbCW+" "+vbCH);
	parent.MiniRect_Refresh(x/vbMaxW,vbCY/vbMaxH,vbCW/vbMaxW,vbCH/vbMaxH);
}
parent.goEast=goEast;

function goWest()
{
	getCurrentVB();
	x=Math.min(Math.max(vbCX-MoveStep,0),vbMaxW-vbCW);
	MainSVG.setAttributeNS(null,"viewBox",x+" "+vbCY+" "+vbCW+" "+vbCH);
	parent.MiniRect_Refresh(x/vbMaxW,vbCY/vbMaxH,vbCW/vbMaxW,vbCH/vbMaxH);
}
parent.goWest=goWest;

function goNorth()
{
	getCurrentVB();
	y=Math.min(Math.max(vbCY-MoveStep,0),vbMaxH-vbCH);
	MainSVG.setAttributeNS(null,"viewBox",vbCX+" "+y+" "+vbCW+" "+vbCH);
	parent.MiniRect_Refresh(vbCX/vbMaxW,y/vbMaxH,vbCW/vbMaxW,vbCH/vbMaxH);
}
parent.goNorth=goNorth;

function goSouth()
{
	getCurrentVB();
	y=Math.min(Math.max(vbCY+MoveStep,0),vbMaxH-vbCH);
	MainSVG.setAttributeNS(null,"viewBox",vbCX+" "+y+" "+vbCW+" "+vbCH);
	parent.MiniRect_Refresh(vbCX/vbMaxW,y/vbMaxH,vbCW/vbMaxW,vbCH/vbMaxH);
}
parent.goSouth=goSouth;

function ZoomTo(value)
{
	if(value==0) resetZoom();
	else
	{
		getCurrentVB();
		var cx=vbCX+vbCW/2;
		var cy=vbCY+vbCH/2;
		CurrentAmp=value*(MaxAmp-MinAmp)/100+MinAmp;
		w=SVGW/CurrentAmp; h=SVGH/CurrentAmp; x=cx-w/2; y=cy-h/2;
		x=Math.min(Math.max(x,0),vbMaxW-w);
		y=Math.min(Math.max(y,0),vbMaxH-h);
		MainSVG.setAttributeNS(null,"viewBox",x+" "+y+" "+w+" "+h);
		endZoom();
	}
}
parent.ZoomTo=ZoomTo;

var RulerBtnPressed=false;
var IsMessuring=false;

function RulerBtnClick(evt)
{
	RulerBtnPressed=!RulerBtnPressed;
	if(RulerBtnPressed)
	{
		parent.PullZoomBtn();
		setCMD(null);
		parent.document.all.RulerBtn.disabled=true;
		parent.document.all.RulerBtn.src="../images/Map/ruler1.gif";
		rulerbck.setAttributeNS(null,"pointer-events","visiblePainted");
	}
}
parent.RulerBtnClick=RulerBtnClick;

function rulerStart(evt)
{
	if(!RulerBtnPressed) return;
	switch(evt.detail)
	{
		case 1:
			getCurrentVB();
			var xx=vbCX+evt.clientX*WAmp;
			var yy=vbCY+evt.clientY*HAmp;
			if(!IsMessuring)
			{
				IsMessuring=true;
				linepts="M"+xx+" "+yy;
			}
			else
			{
				linepts+=" L"+xx+" "+yy;
			}
			break;
		default:
			IsMessuring=false; RulerBtnPressed=false;
			parent.document.all.RulerBtn.disabled=false;
			parent.document.all.RulerBtn.src="../images/Map/ruler.gif";
			rulerbck.setAttributeNS(null,"pointer-events","none");
			rulerline.setAttributeNS(null,'d','');
			setCMD("PAN");
			hideinfotip(evt);
			break;
	}
}

function rulerMessuring(evt)
{
	if(IsMessuring)
	{
		getCurrentVB();
		var xx=vbCX+evt.clientX*WAmp;
		var yy=vbCY+evt.clientY*HAmp;
		rulerline.setAttributeNS(null,'d',linepts+" L"+xx+" "+yy);
		showinfotip(evt,parseFloat(parseInt(rulerline.getTotalLength()*Scaler)/1000)+"千米");
		//parent.document.all.km.value=parseFloat(parseInt(rulerline.getTotalLength()*Scaler)/1000);
	}
}
/*获得一段路径的长度*/
function getlength(pathname)
{  
	if (len == 0)
	{
		var myline=SVGDoc.getElementById(pathname);
		len = myline.getTotalLength();
		traceLayer.removeChild(myline);
		len = parseInt(len*3);
	}
	return (len);
}
parent.getlength = getlength;

function showinfotip (evt,info)
{
	var splitString;
	splitString = info.split('\n');
	nbsplit = splitString.length;
	var svgdocElement = SVGDoc.getDocumentElement();
	var scale = svgdocElement.getCurrentScale();
	var translateX = svgdocElement.getCurrentTranslate().getX();
	var translateY = svgdocElement.getCurrentTranslate().getY();
	var infotip = 'infotip';
	var infotiprect = 'infotipRect';
	var svgobj = SVGDoc.getElementById (infotip);
	var svgobjtxt = svgobj;
	svgobj.setAttributeNS(null,'x', Math.round(evt.getClientX()+15));
	svgobj.setAttributeNS(null,'y', Math.round(evt.getClientY()));
	var svgstyle = svgobj.getStyle();
	svgstyle.setProperty ('visibility', 'visible');
	svgstyle.setProperty('font-size', 12);
	svgobj1 = svgobj.getFirstChild();
	if (nbsplit == 1)
	{
		svgobj1.setData(info);
	}
	else
	{
		svgobj1.setData(splitString[0]);
		for (k=1; k<nbsplit ; k++)
		{
			myspan = SVGDoc.createElement('tspan');
			myspan.setAttributeNS(null,'dy', 1.2+'em');
			myspan.setAttributeNS(null,'id', k);
			myspan.setAttributeNS(null,'x', Math.round(evt.getClientX()+15));
			myspan.appendChild(SVGDoc.createTextNode(splitString[k]));
			svgobj.appendChild(myspan);
		}
	}
	var txtlen=1.2*svgobj.getBBox().width;
	var svgobj = SVGDoc.getElementById (infotiprect);
	svgobj.setAttributeNS(null,'x', (Math.round(evt.getClientX()+12.5)));
	svgobj.setAttributeNS(null,'y', (Math.round(evt.getClientY()-10)));
	svgobj.setAttributeNS(null,'width', txtlen);
	if (nbsplit >1) svgobj.setAttributeNS(null,'height',1.2*nbsplit+'em');else svgobj.setAttribute ('height',1+'em');
	svgobj.setAttributeNS(null,'rx', 3);
	svgobj.setAttributeNS(null,'ry', 3);
	var svgstyle = svgobj.getStyle();
	svgstyle.setProperty('visibility', 'visible');
}

function hideinfotip(evt)
{
	var svgobj = SVGDoc.getElementById ("infotip");
	svgobj.getStyle().setProperty ('visibility', 'hidden');
	while(svgobj.lastChild.tagName=="tspan")
	{
		try
		{
			svgobj.removeChild(svgobj.lastChild);
		}
		catch(e)
		{
			alert(e);
		}
	}
	SVGDoc.getElementById("infotipRect").getStyle().setProperty ('visibility', 'hidden');
}

⌨️ 快捷键说明

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