经纬度随鼠标在地图上移动随时显示

本文介绍了一种在GIS开发中实现鼠标移动时实时显示地图上经纬度的方法。通过特定的事件处理机制,在地图视图上捕捉鼠标移动,并转换屏幕坐标为地理坐标,最后在状态栏展示出来。

在GIS开发中,地图上的位置信息是很重要的,很多时候都想随时知道某一点的具体地理位置信息。

下面的代码用来实现当鼠标在地图上移动时随时将经纬度显示在状态栏上。

/////1在事件槽中加入事件/////////////////////
ON_EVENT(CSampView, IDC_MAP, DISPID_MOUSEMOVE,OnMouseMoveInMap,VTS_I2 VTS_I2

VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
////2在头文件中加入函数定义///////////////
BOOL OnMouseMoveInMap(short Button, short Shift, OLE_XPOS_PIXELS x, OLE_YPOS_PIXELS y);
///3加入实现函数////////////////////////////////
//鼠标在地图上移动时随时将经纬度显示在状态栏上
BOOL CSampView::OnMouseMoveInMap(short Button, short Shift, OLE_XPOS_PIXELS x,

OLE_YPOS_PIXELS y)
{
/*#if DO_TRACE
 TRACE("OnMouseMoveInMap/r/n");
 TRACE("Button = %d/r/n",Button);
 TRACE("Shift = %d/r/n",Shift);
 TRACE("X = %g/r/n",x);
 TRACE("Y = %g/r/n",y);
#endif//DO_TRACE
*/
 //if(m_ctrlMapX.GetCurrentTool() == miArrowTool)
 //{
  float fXn,fYn;
 double dfXn,dfYn;
 CPoint pt;
 GetCursorPos(&pt);
    fXn = (float)pt.x;
 fYn = (float)pt.y;
    m_ctrlMapX.ConvertCoord(&fXn,&fYn,&dfXn,&dfYn,miScreenToMap);
 CString str;
 CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
 CStatusBar* pStatusBar = &(pMainFrame->m_wndStatusBar);
 if(NULL != pStatusBar)
 {
  str.Format("longitude = %f   latitude = %f",dfXn,dfYn);
 // CClientDC dc(this);
 // CSize sz=dc.GetTextExtent(str);
        pStatusBar->SetPaneInfo(1,ID_ONMAP_CURRENT_LOCATION,SBPS_NORMAL,sz.cx);
  pStatusBar->SetPaneText(1,str);
 }
 //}
    return TRUE;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值