mapx 怎么将某个区域在地图中居中显示

sin816 2008-11-23 12:22:56
通过SelectByRegion()将某个区域选中后
1.怎么将该区域在地图居中显示
2.地图进行适当的缩放,以使得该区域全部显示,同时占据显示地图的主要部分

每小问50分。(请提供思路和相关的函数名)
...全文
328 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sin816 2008-11-23
  • 打赏
  • 举报
回复
哈哈 又是Tinary3v0 啊 太好了
我先试试看
Tinary3v0 2008-11-23
  • 打赏
  • 举报
回复
你说的这两个问题其实就是一个问题么,除非是你选中的区域对居中有特别的要求。
1.你既然选中了区域,那么就应该知道这个区域的CMapXFeature吧,我们姑且定义它为:CMapXFeature SelectFtr;
2.没一个CMapXFeature 都有一个Bounds属性,我用的是VC,所以是这样得到这个Feature的Bouds的:
CMapXRectangle ftrBouds;          //Bounds实际上是一个CMapXRectangle类型变量
ftrBouds.CreateDispatch( ftrBouds.GetClsid());
ftrBouds = selectftr.GetBounds(); //取得选中区域的Bounds

这个Bounds属性实际上就是选中图形的矩形外界,它是跟随着地图的放大缩小等不停变化的。
3.MapX控件m_ctrlMapX本身也有一个Bounds属性,它标明了当前mapx窗口显示的矩形到底应该有多大(也就是显示多大的范围)。
如果你要想显示你选中区域在整个的窗口当中,实际上就是一个将选中区域的Bounds赋值给mapX控件的Bounds然后更新控件视图就能达到效果了。

验证代码:
CMapXLayers allLr=m_ctrlMapX.GetLayers();

CMapXLayer Lyr = allLr.Item("Asia");

if ( Lyr.GetSelection().GetCount() != 0 )
{
CMapXFeature selectftr = Lyr.GetSelection().Item( 1 ); //取得CMapXFeature
CMapXRectangle ftrBouds;
ftrBouds.CreateDispatch( ftrBouds.GetClsid());
ftrBouds = selectftr.GetBounds(); //取得CMapXFeature的Bounds
m_ctrlMapX.SetBounds( ftrBouds ); //设定MapX的Bounds
}


我试验了一下,这样是可行的,选中的CMapXFeature确实显示在整个MapX窗口,至于居中么,我想这样应该已经算是居中了,除非你有特殊要求。

另外,在取得CMapXFeature的Bounds后,你可以进行调整,将这个Bounds变大或者变小 来决定你当前窗口的视口。

最后,要让MapX的视图进行调整 ,所以这个代码要放在你触发MapX视图变化的地方。

2,141

社区成员

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

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