思路是在地图的Extent的改变的时候,将Extent的XMin,YMin,Width,Height的值传到客户端,客户端调再根据这几个值经过换算得到当前点的经纬度。这样只有在Extent改变是才与服务器交互,经纬度的获取都是在客户端计算所得。
1.为Map控件添加鼠标滑动的客户端事件
Map1.Attributes.Add("onmousemove", "GetPosition(event)");
2.在Map的ExtentChanged事件中将相应的值传到客户端
protected void Map1_ExtentChanged(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ExtentEventArgs args)
{
String script;
script = "lat=" + args.NewExtent.YMin.ToString() + ";lon=" + args.NewExtent.XMin.ToString() + ";latWidth="+args.NewExtent.Width.ToString()+";lonHeight="+args.NewExtent.Height.ToString()+";";
ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult s = new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(null, null, "javascript", script);
Map1.CallbackResults.Add(s);
}
{
String script;
script = "lat=" + args.NewExtent.YMin.ToString() + ";lon=" + args.NewExtent.XMin.ToString() + ";latWidth="+args.NewExtent.Width.ToString()+";lonHeight="+args.NewExtent.Height.ToString()+";";
ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult s = new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(null, null, "javascript", script);
Map1.CallbackResults.Add(s);
}
3.添加客户端处理事件
var lon='0.00';//经度
var lat='0.00';//纬度
var lonHeight='0.00'//高度
var latWidth='0.00'//宽度
//------------------------------------
function GetPosition(evt)
{
evt=(evt)?evt:window.event;
var map=document.getElementById('Map1');
var mapx=getLeft(map);
var mapy=getTop(map);
var maph=map.clientHeight;
var mapw=map.clientWidth;
var mapleftbottom=maph+mapy;
var posi=document.getElementById('position');
var evtx=(evt.x)?evt.x:evt.pageX;
var evty=(evt.y)?evt.y:evt.pageY;
var y=parseFloat(lat); //纬度
var x=parseFloat(lon); //经度
var height=parseFloat(lonHeight);
var width=parseFloat(latWidth);
var ratex=(evtx-mapx)/mapw;
var ratey=(mapleftbottom-evty)/maph;
var templon=Math.round((width*ratex+x)*100)/100;
var templat=Math.round((height*ratey+y)*100)/100;
posi.innerHTML='经度:'+templon+' '+'纬度:'+templat;
}
//获取元素的纵坐标
function getTop(e)
{
var offset=e.offsetTop;
if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
return offset;
}
//-----------------------------
//获取元素的横坐标
function getLeft(e)
{
var offset=e.offsetLeft;
if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
return offset;
}
var lat='0.00';//纬度
var lonHeight='0.00'//高度
var latWidth='0.00'//宽度
//------------------------------------
function GetPosition(evt)
{
evt=(evt)?evt:window.event;
var map=document.getElementById('Map1');
var mapx=getLeft(map);
var mapy=getTop(map);
var maph=map.clientHeight;
var mapw=map.clientWidth;
var mapleftbottom=maph+mapy;
var posi=document.getElementById('position');
var evtx=(evt.x)?evt.x:evt.pageX;
var evty=(evt.y)?evt.y:evt.pageY;
var y=parseFloat(lat); //纬度
var x=parseFloat(lon); //经度
var height=parseFloat(lonHeight);
var width=parseFloat(latWidth);
var ratex=(evtx-mapx)/mapw;
var ratey=(mapleftbottom-evty)/maph;
var templon=Math.round((width*ratex+x)*100)/100;
var templat=Math.round((height*ratey+y)*100)/100;
posi.innerHTML='经度:'+templon+' '+'纬度:'+templat;
}
//获取元素的纵坐标
function getTop(e)
{
var offset=e.offsetTop;
if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
return offset;
}
//-----------------------------
//获取元素的横坐标
function getLeft(e)
{
var offset=e.offsetLeft;
if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
return offset;
}