MapX经纬度定位问题

child_leo 2008-12-11 10:18:11
想问一下 如何将已经获得的经纬度的位置信息在地图上显示出来呢?有什么思路 或者有什么现成的函数么 我在网上查到ConvertCoord 是实现这个功能的么
...全文
459 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglei5695312 2010-04-03
  • 打赏
  • 举报
回复
真是太强了!
lovechangrui 2009-04-18
  • 打赏
  • 举报
回复
请问,得知一个经纬度点后,如何在地图上一层一层的找到离这个经纬度最近的点呀?就是说先找到省界,再找到市界,.....最终找到地标点,离已知经纬度最近的地标点?
child_leo 2008-12-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 Tinary3v0 的回复:]
你如果想在地图上显示经纬度信息(文字) 可以直接使用MapX 的Feature 就可以了 而且坐标不用使用ConvertCoord转换。

如果你想让经纬度的显示更加的灵活 就要添加用户图层:

C/C++ codeCMapXLayers layers;
layers = m_CtrMap.GetLayers();
layers.Add("CHINAHWY.TAB");
//------------------Add User DrawLayer------------------------------------------
CMapXLayer Mylayer;
Mylayer=layers.AddUserDrawLayer(…
[/Quote]
按照这个做法 在刷新屏幕的一瞬间会看到我绘制的直线,但是之后就消失了,怎样才能一直看到我画的直线呢??
child_leo 2008-12-29
  • 打赏
  • 举报
回复
呵呵 又来麻烦你了 你说的
添加用户图层
CMapXLayer Mylayer;
Mylayer=layers.AddUserDrawLayer("MyLayer",1);
那么这个MyLayer是怎么实现的呢? 又是怎么和OnDrawUserLayerMap1关联的呢?
恳请详细的解答
Tinary3v0 2008-12-11
  • 打赏
  • 举报
回复
鼠标移动的闪烁需要使用内存绘图
用一般的内存绘图不行,因为对MapX来说背景不是单一颜色 而是地图
我这里有个内存绘图的代码给你看看 当然我这个可能不是很好:
CDC *pdc=m_ctrlMapX.GetDC();

CDC dcmem;
dcmem.CreateCompatibleDC(pdc);

CBitmap bmp;
CBitmap* pOldBmp = NULL;
CRect rc;

GetClientRect(&rc);
bmp.CreateCompatibleBitmap(pdc,1280,1024);
pOldBmp=dcmem.SelectObject(&bmp);
dcmem.BitBlt(0,0,rc.Width(),rc.Height(),pdc,0,0,SRCCOPY);
//这里一般都是用单色清屏 而这里是先将原DC的内容贴到内存里面
//这样就将地图的内容最为了背景了
//------------------------------------------------------------------
//在这里绘图
//------------------------------------------------------------------
pdc->BitBlt(0,0,1280,1024,&dcmem,0,0,SRCCOPY);

dcmem.SelectObject(pOldBmp);
dcmem.DeleteDC();
bmp.DeleteObject();
m_ctrlMapX.ReleaseDC(pdc);

楼主试试吧。
child_leo 2008-12-11
  • 打赏
  • 举报
回复
哦 已经解决了 呵呵 但是还有个问题 就是如何克服鼠标移动时的闪烁呢??
Tinary3v0 2008-12-11
  • 打赏
  • 举报
回复
你如果想在地图上显示经纬度信息(文字) 可以直接使用MapX 的Feature 就可以了 而且坐标不用使用ConvertCoord转换。

如果你想让经纬度的显示更加的灵活 就要添加用户图层:
CMapXLayers layers;
layers = m_CtrMap.GetLayers();
layers.Add("CHINAHWY.TAB");
//------------------Add User DrawLayer------------------------------------------
CMapXLayer Mylayer;
Mylayer=layers.AddUserDrawLayer("MyLayer",1);


添加用户图层以后:
就需要去响应MapX控件的OnDrawUserLayerMap1
void CMetCenView::OnDrawUserLayerMap1(LPDISPATCH Layer, long hOutputDC, long hAttributeDC, LPDISPATCH RectFull, LPDISPATCH RectInvalid) 
{
float x,y;
m_CtrMap.ConvertCoord(); //通过ConvertCoord将你要显示文字的经纬度转换成屏幕坐标
CDC* pdc = m_CtrMap.GetDC(); //取得控件的绘图DC,千万不要是View或者Dialog的DC
pdc->MoveTo();
pdc->LineTO();
pdc->TextOut(x,y,"sfsd"); //在屏幕位置上绘制文字
}


在Dialog上增加DrawUserLayer可以直接使用ClassWizard,添加控件的事件响应即可,
如果是在CView类下,使用整个的消息映射过程要自己手动完成。

2,142

社区成员

发帖
与我相关
我的任务
社区描述
它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
社区管理员
  • 地理信息系统
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧