阅读:1864回复:0
[原创]享受移动GIS(2) 用C#在手机上编辑电子地图
<P>引言:本文是《<a href="http://www.gisempire.com/bbs/dispbbs.asp?boardID=31;ID=69180;page=1" target="_blank" >享受移动GIS(1) 用C#建立手机上的电子地图程序</A>》的后续。本文将介绍如何使用C#基于<a href="http://www.k-work.cn/pages/HiMapPages/ch/default.htm" target="_blank" >HiMap</A>控件在手机上编辑ESRI的.shp地图文件。<BR>本文相关下载:代码 <a href="http://www.k-work.cn/download/Product/HiMap/myHiMapAdvanced.zip" target="_blank" >myHiMapAdvanced.zip</A> ,地图文件 <a href="http://www.k-work.cn/download/Product/HiMap/maps.zip" target="_blank" >maps.zip</A> ,演示动画 <a href="http://www.k-work.cn/download/Product/HiMap/myHiMapVideo2.gif" target="_blank" >myHiMapVideo2.gif</A>。</P>
<P>一、系统需求:<BR>开发环境:Windows XP, .NET Compact Framework 2.0, Windows Mobile 5 SDK, <a href="http://www.k-work.cn/download/Product/HiMap/HiMapBeta1-Runtime.zip" target="_blank" >HiMap Beta1 runtime</A><BR>运行环境:DOPOD D600手机(Windows Mobile 5.0)</P> <P>二、程序功能列表:</P> <P>1、绘制几何图形----Draw Geometry<BR>2、编辑几何图形----Edit Geometry<BR>3、删除几何图形----Delete Geometry<BR>4、设置几何图形属性----Edit Property<BR><BR><IMG src="http://www.k-work.cn/download/Product/HiMap/myHiMapPic1.jpg" border=0></P> <br> <P>三、实现方法简介</P> <p> <P>首先,简要介绍实现这些功能的基本方法。具体函数说明请参考《<a href="http://www.k-work.cn/pages/HiMapHelp/ch/目录.html" target="_blank" >HiMap帮助</A>》。<BR><BR>//1.<STRONG>新建要素<BR></STRONG><BR>//取得一个图层<BR>IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);<BR>//取得一个元数据<BR>IFeatureClass cls = (IFeatureClass)lyr.Class;<BR>//建立一个要素<BR>IFeature feat = cls.CreateFeature();<BR>//保存要素的修改<BR>feat.Save();</P> <P>//2.<STRONG>删除一个要素<BR></STRONG><BR>//取得一个图层<BR>IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);<BR>//取得一个元数据<BR>IFeatureClass cls = (IFeatureClass)lyr.Class;<BR>//建立一个过滤器<BR>IQueryFilter qf=new QueryFilterClass();<BR>//设置条件<BR>qf.WhereClause="id =1";<BR>//查询数据<BR>IFeatureCursor cur = cls.Search(qf);<BR>//取得一个要素<BR>IFeature feat = cur.Next();<BR>//删除一个要素<BR>if (feat != null) <BR>{<BR> cls.DeleteFeature(feat);<BR>}</P> <P>//3.<STRONG>修改要素的属性值<BR></STRONG><BR>//取得一个图层<BR>IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);<BR>//取得一个元数据<BR>IFeatureClass cls = (IFeatureClass)lyr.Class;<BR>//建立一个过滤器<BR>IQueryFilter qf=new QueryFilterClass();<BR>//设置条件<BR>qf.WhereClause="id =1";<BR>//查询数据<BR>IFeatureCursor cur = cls.Search(qf);<BR>//取得一个要素<BR>IFeature feat = cur.Next();<BR>if (feat != null) <BR>{<BR> //写入值<BR> feat.SetValue(cls.Fields.FindField("name"), "测试数据");<BR> //保存<BR> feat.Save();<BR>}</P> <P>//4.<STRONG>修改要素的几何图形</STRONG><BR><BR>//取得一个图层<BR>IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);<BR>//取得一个元数据<BR>IFeatureClass cls = (IFeatureClass)lyr.Class;<BR>//建立一个过滤器<BR>IQueryFilter qf=new QueryFilterClass();<BR>//设置条件<BR>qf.WhereClause="id =1";<BR>//查询数据<BR>IFeatureCursor cur = cls.Search(qf);<BR>//取得一个要素<BR>IFeature feat = cur.Next();<BR>if (feat != null) <BR>{<BR> //图层为线形Shape,所以使用IPolyline取得图形<BR> HiMap.Geometry.IPolyline line = (HiMap.Geometry.IPolyline)feat.Shape;<BR> IPointCollection chline = (IPointCollection)line;<BR> //建立点(测试数据)<BR> IPoint pt1 = new PointClass();<BR> pt1.X = "111.2345556";<BR> pt1.Y = "23.2345556";<BR> IPoint pt2 = new PointClass();<BR> pt2.X = "112.2345556";<BR> pt2.Y = "23.3345556";<BR> //添加点到线中<BR> chline.AddPoint(pt1);<BR> chline.AddPoint(pt2);<BR> //将修改后的图形赋给要素<BR> feat.Shape = (IGeometry)line;<BR> //保存<BR> feat.Save(); <BR>}</P> <P>//5.<STRONG>为线或面添加新的部分</STRONG><BR><BR>//取得一个图层<BR>IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);<BR>//取得一个元数据<BR>IFeatureClass cls = (IFeatureClass)lyr.Class;<BR>//建立一个过滤器<BR>IQueryFilter qf=new QueryFilterClass();<BR>//设置条件<BR>qf.WhereClause="id =1";<BR>//查询数据<BR>IFeatureCursor cur = cls.Search(qf);<BR>//取得一个要素<BR>IFeature feat = cur.Next();<BR>if (feat != null) <BR>{<BR> //图层为线形Shape,所以使用IPolyline取得图形<BR> HiMap.Geometry.IPolyline line = (HiMap.Geometry.IPolyline)feat.Shape;<BR> //建立一条新的线<BR> IPointCollection chline = new PolylineClass();<BR> //建立点(测试数据)<BR> IPoint pt1 = new PointClass();<BR> pt1.X = "111.2345556";<BR> pt1.Y = "23.2345556";<BR> IPoint pt2 = new PointClass();<BR> pt2.X = "112.2345556";<BR> pt2.Y = "23.3345556";<BR> //添加点到线中<BR> chline.AddPoint(pt1);<BR> chline.AddPoint(pt2); <BR> HiMap.Geometry.IGeometryCollection geoColl = (HiMap.Geometry.IGeometryCollection)line;<BR> //将新的线添加到原有的线中<BR> geoColl.AddGeometry((IGeometry)chline);<BR> //将修改后的图形赋给要素<BR> feat.Shape = (IGeometry)line;<BR> //保存<BR> feat.Save();<BR>}</P> <p> <P>四、示例程序运行动画</P> <P>下载演示动画<a href="http://www.k-work.cn/download/Product/HiMap/myHiMapVideo2.gif" target="_blank" >myHiMapVideo2.gif</A><BR>下载示例程序<a href="http://www.k-work.cn/download/Product/HiMap/myHiMapAdvanced.zip" target="_blank" >myHiMapAdvanced.zip</A></P> |
|