山丘哥哥

arcgis server9.2实时显示鼠标在地图中的坐标
在map控件外面加一个div,div的宽度和高度和map一样, <div id="map1" onmousemove="DisplayMp(event)" Height="500px" Width="790px">mapcontrol</div>
function DisplayMp(event)
     {
       // var thisDiv=document.getElementById("map1");
        var thisMesaage;
        thisMessage=event.offsetX+","+event.offsetY;
        getCoords(thisMessage);
     }

今天小试了一下:就是鼠标在map控件上移动的时候,在状态栏显示坐标信息
-------------------------------------------------------------------------------------------------
前台:
function getCoords(xy)
     {
       var argument = "ControlID=Map1&ControlType=Map&Type=getCoords&Args="+xy;
       var context = "Map";
       //m_Callback 由服务端的Page_load事件中生成的,用于请求服务端的js代码
        var script=<%= m_Callback %>
       //用eval执行字符串
       eval(script);
     }

//经纬度转成度分秒格式
      function changeUnit(newValue)
      {
        var du=Math.floor(newValue);
        var xiaoshu=(newValue-du)*60;
        var fen=Math.floor(xiaoshu);
        xiaoshu=(xiaoshu-fen)*60;
        var miao=xiaoshu.toFixed(2);
        return du+"度"+fen+"分"+miao+"秒";
      }


//写入状态栏
     function putOutCoord(thisValue)
     {
       var abc=thisValue.split(',');
       var abcd="经度:"+changeUnit(abc[0]+0)+",纬度:"+changeUnit(abc[1]+0);
       window.status=abcd;
     }

后台代码:
public string m_Callback = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        m_Callback = Page.ClientScript.GetCallbackEventReference(Page, "argument", "processCallbackResult", "content", true);
    }

    #region ICallbackEventHandler 成员
    private string _callbackArg;

    string ICallbackEventHandler.GetCallbackResult()
    {
        return RaiseCallbackEvent(_callbackArg);
    }

    void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
    {
        _callbackArg = eventArgument;
    }

    #endregion

private string RaiseCallbackEvent(string _callbackArg)
    {
        string v = "";
        NameValueCollection keyValColl = CallbackUtility.ParseStringIntoNameValueCollection(_callbackArg);
        if (keyValColl["Type"].ToString() == "getCoords")
        {
            string temp = keyValColl["Args"].ToString();
            string[] coords = temp.Split(new char[] { ',' });
            int xPix = Int32.Parse(coords[0]);
            int yPix = Int32.Parse(coords[1]);
            ESRI.ArcGIS.ADF.Web.Geometry.Point point = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(xPix, yPix, Map2.Extent, (int)Map2.Width.Value, (int)Map2.Height.Value);
            string status = point.X.ToString() + "," + point.Y.ToString();
            CallbackResult cr = new CallbackResult(null, null, "javascript", "putOutCoord('" + status + "');");
            Map2.CallbackResults.Add(cr);
        }
        return Map2.CallbackResults.ToString();
    }

这种方法的弊端:
每次算坐标都是在后台算的,大量的前后台交互,而且在map上move一下,他要算好多次,你停在那,等个2秒种,他就不算了!希望有人帮我找个好的解决办法!
我在网上看到别人获取了map.Extent,然后在前台算,这个方法交互少多了,但没测试过精确不精确http://www.cnblogs.com/lotus_shelly/archive/2009/08/07/1541272.html

posted on 2009-09-05 18:58  科比*布莱恩T  阅读(1160)  评论(0编辑  收藏  举报