MapWinGIS教学.docx
- 文档编号:4611939
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:12
- 大小:686.07KB
MapWinGIS教学.docx
《MapWinGIS教学.docx》由会员分享,可在线阅读,更多相关《MapWinGIS教学.docx(12页珍藏版)》请在冰豆网上搜索。
MapWinGIS教学
本文来源于:
从此学习网原文:
MapWinGIS是一个不错的开源GIS项目,开发语言是VC,基于微软的COM思想编写,团队的开发人员主要来自美国爱荷华大学,开发团队中还有一位中国人。
系统来讲,MapWinGIS是一套类似于AO的二次开发组件库(只是没有AO那么强大),其核心库是一个名字为MapWinGIS的ActiveX控件,开发人员可以利用这个ActiveX组件在自己的系统中添加GIS的相关功能,例如地图显示;在图层上标绘点,线,图形;计算长度,存取GIS数据等相关工作。
ESRI在AO的基础之上开发了ArcGIS的桌面产品,类似的,他们也在MapWinGIS这套组件库的基础上,二次开发了MapWindowGIS,这是一套桌面GIS系统,相当于一个简化版的ArcMap,桌面GIS系统的开发语言使用的是VB.NET。
用户可以直接通过它浏览数据,并通过一系列插件来完成其他功能。
还有一套MapWinX,是DOTNET平台下的一个辅助工具。
MapWinGIS的底层开发环境是VC.NET2003,代码大约有15万行,注释很丰富。
它的官方网站是http:
//www.maporg/,在网站上提供了已经发布的控件下载,源代码下载,例子下载等,并且有相关的论坛和文档,资料算是比较丰富的。
二次开发环境支持VB、C#、VB.NET等,对VC的支持不是很好,不过我曾经看到过有人已经解决了在VC下使用MapWinGIS的问题,XX一下就可以找到解决方案。
MapWinGIS的主要功能包括:
直接打开,编辑,保存Image,Grid,Shapfile,TIN,DBF格式的文件。
在地图中对图形进行浏览,标注,支持矢量数据的符号化,栅格数据的透明显示。
在地图中对矢量数据进行空间数据查询。
动态的在图层上标绘空间数据。
存取地图中的相关数据。
对不同的格式进行转换,例如从TIN到GIRD等。
MapWinGIS中对Shapfile的操作并不是通过OGR来实现的,工程代码中有完整的打开、浏览、编辑SHP文件的代码,对想SHP格式的人来说,看MapWinGIS的代码也是个不错的选择,起码比看枯燥的shapefile白皮书强多了。
同时在效率方面,个人感觉比用OGR要好一点。
打开一个相对较大的图层,与ArcGIS相比几乎感觉不到差别。
对影像数据,MapWinGIS是使用GDAL来实现读取的。
一.准备工作
1.注册com组件
http:
//www.mapwindow.org/获取最新控件.
Regsvr32.exe路径/MapWinGIS.ocx
2..新建项目,添加引用
3.添加控件
二.正式编程
1.载入地图
MapControl控件拖入windowform,取名:
mainMap。
//图层1返回句柄
Intinthandler1;
//实例化形状文件
MapWinGIS.Shapefileshapefile1=newMapWinGIS.Shapefile();
//打开文件
shapefile1.Open(@"D:
\GISSampleData\base.shp",null);
//载入地图文件,true显示
intHandler1=mainMap.AddLayer(shapefile1,true);
载入成功
2.缩放功能
mainMap.CursorMode=MapWinGIS.tkCursorMode.xxx;
tkCursorModem枚举:
•cmZoomIn放大
•cmZoomOut缩小
•cmPan手装选择
•cmSelection选中
•cmNone无状态
3设置点图层的颜色大小类型
//设置点的颜色,大小,类型方法(map对象的方法)
mainMap.set_ShapeLayerPointSize(pointHandle,5);
mainMap.set_ShapeLayerPointColor(pointHandle,(uint)ColorTranslator.ToOle(Color.FromA#ff0000));
mainMap.set_ShapeLayerPointType(pointHandle,tkPointType.ptCircle);
显示出红色的点
4设置图层填充颜色线颜色宽度
//设置背景填充色,线颜色,线宽方法(map对象的方法)
mainMap.set_ShapeLayerFillColor(cityHandle,(uint)ColorTranslator.ToOle(Color.FromA#37172c));
mainMap.set_ShapeLayerLineColor(cityHandle,(uint)ColorTranslator.ToOle(Color.FromA#9b643c));
mainMap.set_ShapeLayerLineWidth(cityHandle,5);
效果图
5给点加上自定义图片
给点加上图片:
//实例化图片类型
MapWinGIS.ImagepointImage=newMapWinGIS.Image();
pointImage.Open(@"C:
\DocumentsandSettings\lyp\MyDocuments\VisualStudio2008\Projects\MapDemo\MapDemo\ico\hand1.JPG",ImageType.JPEG_FILE,true,null);
//设置使用自定义类型
mainMap.set_ShapeLayerPointType(pointHandle,tkPointType.ptUserDefined);
//设置用户自定义的点图片类型
mainMap.set_UDPointType(pointHandle,pointImage);
参考效果
6给不同类型的点,加上自定义图片
//定义两张不同的图片
MapWinGIS.ImagecityImage=newMapWinGIS.Image();
MapWinGIS.ImagenormalImage=newMapWinGIS.Image();
cityImage.Open(“路径”);
normalImage.Open(“图片路径”);
//获得index
intintCityIndex;
intintNormalIndex
intCityIndex=mainMap.set_UDPointImageListAdd(cityHandle,cityImage);
intNormalIndex=mainMap.set_UDPointImageListAdd(NormalHandle,normalImage);
//在数据库中字段的排号,这儿假设为2
intfiledNum=3
intisCity;
//sf前缀表示shapefile类型
for(intShapeNum=0;ShapeNum { isCity=sfCitys.CellValue(filedNum,ShapeNum); if(isCity==1) { mainMap.set_ShapePointImageListID(cityHandle,ShapeNum,intCityIndex); } Else { mainMap.set_ShapePointImageListID(NormalHandle,ShapeNum,intNormalIndex); } }; 效果图: 7显示标签 stringlabelText=string.Empty; for(inti=0;i { labelText=pointShape.get_CellValue(filedNum,i).ToString(); x=pointShape.get_Shape(i).get_Point(0).x; y=pointShape.get_Shape(i).get_Point(0).y; mainMap.AddLabel(pointHandle,labelText,(uint)ColorTranslator.ToOle(Color.FromA#000000),x,y,tkHJustification.hjCenter); } //设置碰撞检测 mainMap.set_UseLabelCollision(pointHandle,true); 参考效果图: 8LegendControl控件,显示图层 1.引用MapWinInterfaces.dll文件 2.控件栏添加该控件 3.拖入windowform LegendControl.Legendlegend; legend.Map=(MapWinGIS.Map)mainMap.GetOcx(); //设置图层名称 legend.Map.set_LayerName(cityHandle,System.IO.Path.GetFileNameWithoutExtension(city.Filename)); legend.Map.set_LayerName(pointHandle,System.IO.Path.GetFileNameWithoutExtension(pointShape.Filename)); 对于map,相当于代理,里面的方法,属性都相差无几。 效果图 9map上画线 1.地图上要激发鼠标事件,必须先设置endMouseXXX事件 mainMap.SendMouseDown=true; mainMap.SendMouseMove=true; mainMap.SendMouseUp=true; 2.画线获取起点 privatevoidmainMap_MouseDownEvent(objectsender,AxMapWinGIS._DMapEvents_MouseDownEvente) { mainMap.PixelToProj(e.x,e.y,refstartX,refstartY); draw=true; } PixelToProj()方法转换为地图相对应的点。 (startX,startY)起点,startX就是地图的经度,startY就是纬度。 于是在移动的时候做了个显示经纬度的。 4.获取终点 intdraw_hndl; privatevoidmainMap_MouseUpEvent(objectsender,AxMapWinGIS._DMapEvents_MouseUpEvente) { mainMap.PixelToProj(e.x,e.y,refendX,refendY); //画图之前,必须有这段代码 draw_hndl=mainMap.NewDrawing(MapWinGIS.tkDrawReferenceList.dlSpatiallyReferencedList); //画线 mainMap.DrawLine(startX,startY,endX,endY,1,(uint)ColorTranslator.ToOle(Color.FromA#000000)); } 效果图: 10获取地图数据 11.经纬度定位 //获取地图区域 MapWinGIS.ExtentsmyExtents=(Extents)mainMap.Extents; //设置经纬度范围 myExtents.SetBounds(114.38,30.62,0,114.39,30.632956891957239,0); //定位该范围 mainMap.Extents=myExtents; //设置缩放级别,因为定位的不同,缩放级别肯定不同,比如城市,小区,的缩放级别不同 mainMap.CurrentScale=0.025; 地名定位: 获取数据库中该地名的shape的ID,然后获取该shape的xy(经纬度),然后在用该方法定位。 从此学习网
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MapWinGIS 教学