如何用MFC实现鹰眼功能

时间:2022-11-24 10:18:05
我想做个类似百度,google地图的平面地图,有鹰眼功能,我在网上找了下基本上都是MAPX和MAPINFO,不过MAPINFO要安装软件就算了,用MAPX创建的时候总是跳出建立空文档失败,也不知道哪里出错。。。谁知道该怎么做?最好发个例子给我,要看的到地图那种,邮箱xjlzyi@126.com,谢谢!

26 个解决方案

#1


是不是有空对象啊。我以前也遇到过。
你设断点看一下。

#2


我重新建了个工程,创建的时候倒是不会跳出空对象了,不过显示的程序创建与不创建没什么区别。。。。
我参照http://topic.csdn.net/t/20031024/16/2391592.html这里的代码,在运行到m_eagleMapx.GetLayers().CreateLayer( "RectLayer "); 这一步的时候出错了。。。。

#3


还有我不知道用MAPX是怎么显示出地图的?这个控件是不是只要加上MAPX.H和MAP.CPP两个文件就可以了?

#4


是大地图上放个小地图的那个?

#5


引用 4 楼 freelaxy 的回复:
是大地图上放个小地图的那个?


是啊 

#6


本人去年做过GIS开发一年,这样,你可以把大图的内容可以放到一个悬浮的CBCGDockingbar里面(我们以前的项目中用的是BCG的悬浮BAR控件实现的),在里面用一个试图存放这个小地图。

#7


你的平面地图是什么格式的?

#8


引用 7 楼 freelaxy 的回复:
你的平面地图是什么格式的?


.tab和.ID和.MAP格式  我下的是

#9


引用 6 楼 jianghandaxue 的回复:
本人去年做过GIS开发一年,这样,你可以把大图的内容可以放到一个悬浮的CBCGDockingbar里面(我们以前的项目中用的是BCG的悬浮BAR控件实现的),在里面用一个试图存放这个小地图。


我都不知道怎么去显示出大的地图。。。

#10


这个我不会,帮顶一下.....

#11


我玩google的地图比较在行.上个月的作业:
http://hi.csdn.net/space-5748136-do-album-picid-596842.html

#12


我不需要3维的地图,只要平面的电子地图就行,你这是用什么写的?

#13


lz,你发错地方了,应该去GIS论坛那里去找,这个功能n年前就有了...

#14



CMapX m_map;
CRect rect;
GetClientRect(&rect);
if (!m_map.Create(NULL, WS_VISIBLE, CRect(0,0,rect.Width()-130,rect.Height()), this,100))
    return -1;
............
    m_map.SetBackColor(RGB(49, 209, 231));
char appPath[256];
GetCurrentDirectory(256,appPath); //取得应用程序当前路径
CString  filePath; //保存Ini文件名
filePath.Format("%s",appPath);
filePath += "\\";
filePath += "map.gst";

m_map.SetGeoSet(filePath); 

#15



//添加图层  CMapXLayer lymem;
CMapXLayers allLr=m_map.GetLayers();

CMapXLayerInfo LayerInfo;
LayerInfo.CreateDispatch(LayerInfo.GetClsid());

CString str("stLrNa"); 

VARIANT ParamVt;
ParamVt.vt = VT_BSTR;
ParamVt.bstrVal =str.AllocSysString(); 

LayerInfo.AddParameter(_T("name"),ParamVt); // name
LayerInfo.SetType(miLayerInfoTypeTemp); // type

CMapXLayer hideLayer = m_map.GetLayers().Item(1);

VARIANT features;
CMapXFeatures newFS = hideLayer.AllFeatures().Clone();
features.vt = VT_DISPATCH;
features.pdispVal = newFS.m_lpDispatch;
LayerInfo.AddParameter(_T("FeatureS"),features); // Features

ParamVt.vt = VT_BSTR;
ParamVt.bstrVal = CString("MemTable").AllocSysString(); 
LayerInfo.AddParameter(_T("TableStorageType"),ParamVt);

CMapXLayers lys = m_map.GetLayers();
lymem = lys.Add(LayerInfo.m_lpDispatch);

#16


我想问下,这个地图格式只能是gst的吗?其他格式打不开?

#17


引用 16 楼 xjlzyi 的回复:
我想问下,这个地图格式只能是gst的吗?其他格式打不开?

我记得好像是。

#18


网上貌似没免费的gst地图可以下载,rebort_Q  你有吗?有的话发我份可以吗?

#19


引用 14 楼 rebort_q 的回复:
C/C++ code

CMapX m_map;
CRect rect;
    GetClientRect(&rect);
    if (!m_map.Create(NULL, WS_VISIBLE, CRect(0,0,rect.Width()-130,rect.Height()), this,100))
    return -1;


当我运行完这步的时候跳出了建立空文档失败,这是怎么回事啊?

#20


mapx的安装包有吧。

#21


要安装那个版本的啊?

#22


我安装的是mapx4

#23


upupupupupupupupup!

#24


没用过 不太清楚~~~~~~~~~·

#25


怎么还不可以用别的类似百度地图那样的直接调用API就可以了。这个google怎么还没有出现这个功能啊 

#1


是不是有空对象啊。我以前也遇到过。
你设断点看一下。

#2


我重新建了个工程,创建的时候倒是不会跳出空对象了,不过显示的程序创建与不创建没什么区别。。。。
我参照http://topic.csdn.net/t/20031024/16/2391592.html这里的代码,在运行到m_eagleMapx.GetLayers().CreateLayer( "RectLayer "); 这一步的时候出错了。。。。

#3


还有我不知道用MAPX是怎么显示出地图的?这个控件是不是只要加上MAPX.H和MAP.CPP两个文件就可以了?

#4


是大地图上放个小地图的那个?

#5


引用 4 楼 freelaxy 的回复:
是大地图上放个小地图的那个?


是啊 

#6


本人去年做过GIS开发一年,这样,你可以把大图的内容可以放到一个悬浮的CBCGDockingbar里面(我们以前的项目中用的是BCG的悬浮BAR控件实现的),在里面用一个试图存放这个小地图。

#7


你的平面地图是什么格式的?

#8


引用 7 楼 freelaxy 的回复:
你的平面地图是什么格式的?


.tab和.ID和.MAP格式  我下的是

#9


引用 6 楼 jianghandaxue 的回复:
本人去年做过GIS开发一年,这样,你可以把大图的内容可以放到一个悬浮的CBCGDockingbar里面(我们以前的项目中用的是BCG的悬浮BAR控件实现的),在里面用一个试图存放这个小地图。


我都不知道怎么去显示出大的地图。。。

#10


这个我不会,帮顶一下.....

#11


我玩google的地图比较在行.上个月的作业:
http://hi.csdn.net/space-5748136-do-album-picid-596842.html

#12


我不需要3维的地图,只要平面的电子地图就行,你这是用什么写的?

#13


lz,你发错地方了,应该去GIS论坛那里去找,这个功能n年前就有了...

#14



CMapX m_map;
CRect rect;
GetClientRect(&rect);
if (!m_map.Create(NULL, WS_VISIBLE, CRect(0,0,rect.Width()-130,rect.Height()), this,100))
    return -1;
............
    m_map.SetBackColor(RGB(49, 209, 231));
char appPath[256];
GetCurrentDirectory(256,appPath); //取得应用程序当前路径
CString  filePath; //保存Ini文件名
filePath.Format("%s",appPath);
filePath += "\\";
filePath += "map.gst";

m_map.SetGeoSet(filePath); 

#15



//添加图层  CMapXLayer lymem;
CMapXLayers allLr=m_map.GetLayers();

CMapXLayerInfo LayerInfo;
LayerInfo.CreateDispatch(LayerInfo.GetClsid());

CString str("stLrNa"); 

VARIANT ParamVt;
ParamVt.vt = VT_BSTR;
ParamVt.bstrVal =str.AllocSysString(); 

LayerInfo.AddParameter(_T("name"),ParamVt); // name
LayerInfo.SetType(miLayerInfoTypeTemp); // type

CMapXLayer hideLayer = m_map.GetLayers().Item(1);

VARIANT features;
CMapXFeatures newFS = hideLayer.AllFeatures().Clone();
features.vt = VT_DISPATCH;
features.pdispVal = newFS.m_lpDispatch;
LayerInfo.AddParameter(_T("FeatureS"),features); // Features

ParamVt.vt = VT_BSTR;
ParamVt.bstrVal = CString("MemTable").AllocSysString(); 
LayerInfo.AddParameter(_T("TableStorageType"),ParamVt);

CMapXLayers lys = m_map.GetLayers();
lymem = lys.Add(LayerInfo.m_lpDispatch);

#16


我想问下,这个地图格式只能是gst的吗?其他格式打不开?

#17


引用 16 楼 xjlzyi 的回复:
我想问下,这个地图格式只能是gst的吗?其他格式打不开?

我记得好像是。

#18


网上貌似没免费的gst地图可以下载,rebort_Q  你有吗?有的话发我份可以吗?

#19


引用 14 楼 rebort_q 的回复:
C/C++ code

CMapX m_map;
CRect rect;
    GetClientRect(&rect);
    if (!m_map.Create(NULL, WS_VISIBLE, CRect(0,0,rect.Width()-130,rect.Height()), this,100))
    return -1;


当我运行完这步的时候跳出了建立空文档失败,这是怎么回事啊?

#20


mapx的安装包有吧。

#21


要安装那个版本的啊?

#22


我安装的是mapx4

#23


upupupupupupupupup!

#24


没用过 不太清楚~~~~~~~~~·

#25


怎么还不可以用别的类似百度地图那样的直接调用API就可以了。这个google怎么还没有出现这个功能啊