sy_lgz_800
路人甲
路人甲
  • 注册日期2004-02-16
  • 发帖数20
  • QQ
  • 铜币190枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1718回复:0

[原创]享受移动GIS(2) 用C#在手机上编辑电子地图

楼主#
更多 发布于:2008-11-11 09:14
<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>
喜欢0 评分0
游客

返回顶部