【原创】随鼠标移动显示地图经纬度

本文介绍了一种通过地图Extent改变时,在客户端计算当前鼠标位置经纬度的方法。具体步骤包括:为Map控件添加鼠标滑动事件;在Extent改变时传递XMin、YMin、Width和Height值到客户端;最后,客户端通过计算获得当前点的经纬度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路是在地图的Extent的改变的时候,将Extent的XMin,YMin,Width,Height的值传到客户端,客户端调再根据这几个值经过换算得到当前点的经纬度。这样只有在Extent改变是才与服务器交互,经纬度的获取都是在客户端计算所得。

1.为Map控件添加鼠标滑动的客户端事件

None.gifMap1.Attributes.Add("onmousemove""GetPosition(event)");

2.在Map的ExtentChanged事件中将相应的值传到客户端

None.gifprotected void Map1_ExtentChanged(object sender, ESRI.ArcGIS.ADF.Web.UI.WebControls.ExtentEventArgs args)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gifString script;
InBlock.gifscript 
= "lat=" + args.NewExtent.YMin.ToString() + ";lon=" + args.NewExtent.XMin.ToString() + ";latWidth="+args.NewExtent.Width.ToString()+";lonHeight="+args.NewExtent.Height.ToString()+";";
InBlock.gif
InBlock.gifESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult s 
= new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(nullnull"javascript", script);
InBlock.gifMap1.CallbackResults.Add(s);
ExpandedBlockEnd.gif}

3.添加客户端处理事件

None.gifvar lon='0.00';//经度
None.gif
var lat='0.00';//纬度
None.gif
var lonHeight='0.00'//高度
None.gif
var latWidth='0.00'//宽度
None.gif
//------------------------------------
None.gif
function GetPosition(evt)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gifevt
=(evt)?evt:window.event;
InBlock.gifvar map
=document.getElementById('Map1');
InBlock.gifvar mapx
=getLeft(map);
InBlock.gifvar mapy
=getTop(map);
InBlock.gif
InBlock.gif
InBlock.gifvar maph
=map.clientHeight;
InBlock.gifvar mapw
=map.clientWidth;
InBlock.gifvar mapleftbottom
=maph+mapy;
InBlock.gif
InBlock.gifvar posi
=document.getElementById('position');
InBlock.gifvar evtx
=(evt.x)?evt.x:evt.pageX;
InBlock.gifvar evty
=(evt.y)?evt.y:evt.pageY;
InBlock.gif
InBlock.gifvar y
=parseFloat(lat); //纬度
InBlock.gif
var x=parseFloat(lon); //经度
InBlock.gif
var height=parseFloat(lonHeight);
InBlock.gifvar width
=parseFloat(latWidth);
InBlock.gif
InBlock.gifvar ratex
=(evtx-mapx)/mapw;
InBlock.gifvar ratey
=(mapleftbottom-evty)/maph;
InBlock.gif
InBlock.gifvar templon
=Math.round((width*ratex+x)*100)/100;
InBlock.gifvar templat
=Math.round((height*ratey+y)*100)/100;
InBlock.gifposi.innerHTML
='经度:'+templon+' '+'纬度:'+templat;
ExpandedBlockEnd.gif}

None.gif
//获取元素的纵坐标
None.gif
        function getTop(e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            var offset
=e.offsetTop;
InBlock.gif            
if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
InBlock.gif            
return offset;
ExpandedBlockEnd.gif        }

None.gif        
//-----------------------------
None.gif        
//获取元素的横坐标
None.gif
        function getLeft(e)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif{
InBlock.gif            var offset
=e.offsetLeft;
InBlock.gif            
if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
InBlock.gif            
return offset;
ExpandedBlockEnd.gif        }


 

转载于:https://www.cnblogs.com/danni5678/archive/2008/05/10/1190900.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值