最近用了MapWinGIS做了一个项目,把在开发中使用到的东西分享一下吧。MapWinGIS 是一个基于微软的COM思想编写的相当高效的地图引擎,放大、缩小、漫游速度很快。系统来说,MapWinGis 是一套类似于AO的二次开发组件库(只是没有AO那么强大),其核心库是一个名字为MapWinGIS的 ActiveX控件,把MapwinGIS.ocx注册到VS中即可使用,在这里,我使用的是VS2010+C#进行开发。MapWinGIS的相关操作可以查看点击打开链接。
在实际开发中Shp文件的使用时比较多的,先来介绍一下关于Shp文件与MapWinGIS控件本身的相关操作。
1.定义shp图层变量与代表shp标识的索引,由于对于Shp的操作很多是用索引来进行操作。
public MapWinGIS.Shapefile shp = new MapWinGIS.Shapefile(); public int hndshp=-1;定义一个Shapefile类型的变量进行操作shp,再定义一个hndshp来作为shp问文件的索引,默认从0开始,如果没有加载该shp索引为0,加载之后shp的索引也为0,这样就不太好进行区分是否加载了该shp,这里可以把shp文件的索引定义为-1,加载后索引为0,如果移除该shp,再手动设置shp为-1,这样就能很容易判断shp的加载状态。
2.加载shp文件到MapWinGIS控件
MapWinGIS控件名字为axMap,首先读取shp的存储路径,如果不存在则返回,存在shp文件则打开该shp文件然后加载。
string SHPPath = Path.Combine(Application.StartupPath, @"shp\Shp.shp"); if (!System.IO.File.Exists(SHPPath)) return; shp.Open(SHPPath); hndshp = axMap.AddLayer(shp, true);3. MapWinGIS控件的放大,缩小,平移,全图等操作。
上述操作均是对MapWinGIS控件的操作,注意与Shp的操作区分开来, MapWinGIS控件名字为axMap。
放大操作:
axMap1.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn;缩小操作:
axMap.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut;平移操作:
axMap.CursorMode = MapWinGIS.tkCursorMode.cmPan;恢复全图操作:
axMap.ZoomToMaxExtents();4 .shp图层的放置与显隐
在实际操作过程中,MapWinGIS控件往往不止放置一个shp文件,比如说放置一副tif影像文件和一个shp文件,如果随意放置可能会出现shp文件被影像遮挡的现象,这里就需要对MapWinGIS多个图层进行位置的放置。多个图层放在MapWinGIS控件中,可能只需要观察某一些图层,隐藏掉其他图层,这时需要控制显影。
放置图层首先要获取图层的位置,这里就需要对MapWinGIS中的图层索引进行操作了,比如现在有一张shp文件和一副tif文件。
int position = axMap.get_LayerPosition(hndshp);获取到图层位置后,可以选择放置在底部还是顶部:
axMap.MoveLayerBottom(position);
axMap.MoveLayerTop(position);控制图层显影:
axMap.set_LayerVisible(hndshp, true);
axMap.set_LayerVisible(hndshp, false);