当前位置:编程学习 > 网站相关 >>

如何用vc++调用mapinfo

   就是vc++调用mapinfo(OLE嵌入)做一个界面,显示数字地图,有对地图的操作(例如:放大 缩小 移动地图 回复地图原来大小 量距离 量面积等等)
   要具体的步骤,有码源更好!!等待好心高人帮我解答!!
   本人新手,诚心求助!! --------------------编程问答-------------------- mark --------------------编程问答-------------------- 要安装MAPX5.0 或MapXtreme2004 以上版本才行。

如果是MAPX5.0,可以直接作为ActiveX控件调用。 --------------------编程问答--------------------   第一步:用MFC应用程序向导新建一个单文档的工程,名字就不妨取为:mapxdemo
  第二步:Project> Add To Project>Files,选择MapX.cpp和MapX.h。同时还要手工将Mapx.h和Mapx.cpp这两个文件复制到你的工程目录中去,不然编译时会报错的

  第三步:在mapxdemoView.h文件中包括它:
    #include "MapX.h"
  
  另外还要在视图类(mapxdemoView.h)中定义一个对象:
    
  class CMapxdemoView : pubic CView
  {
  ......
  CMapX m_ctrlMapX; //这是要添加的
  .....
  ......
  }
  第四步::声明一个常量。View > Resource Symbols>New>name为IDC_MAP。
   第五步:在类向导(ctrl+W)中为mapxdemoView创建WM_SIZE 和 WM_CREATE的处理消息:
void CMapxSampleView::OnCreate(UINT nType, int cx, int cy)
{
  m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,100,100), this,IDC_MAP);
}
void CMapxSampleView::OnSize(UINT nType, int cx, int cy)
{

CView::OnSize(nType, cx, cy);
    
  m_ctrlMapX.MoveWindow(0,0,cx,cy,TRUE);
}

第六步:在类向导中为CMapXSampleView创建WM_SETFOCUS的处理消息,以确保当窗口处于活动状态时得到焦点。
void CMapxSampleView::OnSetFocus(CWnd* pOldWnd)  
  {
  CView::OnSetFocus(pOldWnd);
  m_ctrlMapX.SetFocus();
}

然后编译运行。就可以看到USA的地图了!如果没有就再试试。如果想让程序运行时不显示任何地图数据,需要将gst清空,方法如下:

 

int CMapxSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)  

{

  if (CView::OnCreate(lpCreateStruct) == -1)

  return -1;

    

  //创建mapx控件

  CRect rc(0,0,100,100);

  if( !m_ctrlMapX.Create(NULL, WS_VISIBLE, rc, this, IDC_MAP) )

  return -1;

 

  //清空 gst 地图

  m_ctrlMapX.SetGeoSet("");

    

return 0;

}

当然如果想显示自己的地图的话,在m_ctrlMapX.SetGeoSet("");中写入路径就可以了。
如m_ctrlMapX.SetGeoSet("asia.gst"); 或m_ctrlMapX.SetGeoSet("maps\\asia.gst");
这说明maps文件夹是在工程目录下的.
在地图显示出来后,用户通常要以各种比例查看地图的全局、局部或细部,必须提供诸如放大、缩小和漫游等功能。采用MapX通用工具,可以非常方便地实现上述功能。设定MapX使用标准工具的方法很简单,只需设定地图对象的CurrentTool属性。下面的例子是用标准放大工具实现放大功能。

添加新菜单项资源,输入标题“工具”,在“工具”下添加子菜单,输入标题“放大”及ID 为ID_ZOOM_ IN。打开类向导,选择视图类CMapXSampleView,为菜单项ID_ZOOM_IN 添加COMMAND 消息映射函数OnZoomIn ( ),并编辑码如下。

            void CMapXSampleView::OnZoomIn()

            {

                   m_ctrlMapX.SetCurrentTool(miZoomInTool);// miZoomInTool为放大工具常量

             }

编译运行程序,选择“工具|放大”,就会看到此时光标变为放大镜,单击鼠标就会实现放大功能。可用相同方法实现其他标准工具的功能。MapX提供的可用标准工具如下表。


--------------------编程问答-------------------- 对不起,图实在贴不上,简单说:

工具
 常数
 说明
 
添加线条
 miAddLineTool
 将线条图元添加到插入图层中。
 
添加点
 miAddPointTool
 单击该工具可将点图元添加到插入图层中。
 
添加折线
 miAddPolyLineTool
 将折线图元添加到插入图层中。
 
添加区域
 miAddRegionTool
 将区域图元添加到插入图层中。
 
箭头
 miArrowTool
 单击标题或注释此外,在可编辑图层中移动选定图元或调整选定图元的大小。
 
居中
 miCenterTool
 单击该工具可以重新将地图居中。
 
加标签
 miLabelTool
 在一个图元上单击可以给该图元加标签。
 
平移
 miPanTool
 拖动该工具可以重新将地图居中。
 
多边形选择
 miPolygonSelectTool
 单击该工具可以绘制一个多边形;该多边形内的对象将被选定。
 
半径选择
 miRadiusSelectTool
 拖动该工具可以选择半径内的图元。
 
矩形选择
 miRectSelectTool
 拖动该工具可以选择矩形内的图元。
 
选择工具
 miSelectTool
 单击该工具可以选择图元。
 
符号
 miSymbolTool
 放置符号注释。
 
文本
 miTextTool
 放置文本注释。
 
放大
 miZoomInTool
 放大。
 
缩小
 miZoomOutTool
 缩小。
 
--------------------编程问答-------------------- 我还是个新手,看到这些东西感觉很好!
--------------------编程问答-------------------- LZ,我也刚刚接触这个,单位领导要用mapinfo编一个电子地图的界面。刚好学习学习。不知道这方面有没有教程之类的东西? --------------------编程问答-------------------- 还不如用Mapserver+Openlayers呢,做成跟google map那样,我就是那么做的
补充:企业软件 ,  地理信息系统
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,