流水账~~

导航

移动 嵌入式 GIS - 享受 移动 GIS(2) 用C#在手机上编辑电子地图

引言:本文是《享受移动GIS(1) 用C#建立手机上的电子地图程序》的后续。本文将介绍如何使用C#基于HiMap控件在手机上编辑ESRI的.shp地图文件。
本文相关下载:代码 myHiMapAdvanced.zip ,地图文件 maps.zip ,演示动画 myHiMapVideo2.gif

一、系统需求:
开发环境:Windows XP, .NET Compact Framework 2.0, Windows Mobile 5 SDK, HiMap Beta1 runtime
运行环境:DOPOD D600手机(Windows Mobile 5.0)

二、程序功能列表:

1、绘制几何图形----Draw Geometry
2、编辑几何图形----Edit Geometry
3、删除几何图形----Delete Geometry
4、设置几何图形属性----Edit Property

 

三、实现方法简介 

首先,简要介绍实现这些功能的基本方法。具体函数说明请参考《HiMap帮助》。

//1.新建要素

//取得一个图层
IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);
//取得一个元数据
IFeatureClass cls = (IFeatureClass)lyr.Class;
//建立一个要素
IFeature feat = cls.CreateFeature();
//保存要素的修改
feat.Save();

//2.删除一个要素

//取得一个图层
IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);
//取得一个元数据
IFeatureClass cls = (IFeatureClass)lyr.Class;
//建立一个过滤器
IQueryFilter qf=new QueryFilterClass();
//设置条件
qf.WhereClause="id =1";
//查询数据
IFeatureCursor cur = cls.Search(qf);
//取得一个要素
IFeature feat = cur.Next();
//删除一个要素
if (feat != null)
{
      cls.DeleteFeature(feat);
}

//3.修改要素的属性值

//取得一个图层
IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);
//取得一个元数据
IFeatureClass cls = (IFeatureClass)lyr.Class;
//建立一个过滤器
IQueryFilter qf=new QueryFilterClass();
//设置条件
qf.WhereClause="id =1";
//查询数据
IFeatureCursor cur = cls.Search(qf);
//取得一个要素
IFeature feat = cur.Next();
if (feat != null)
{
        //写入值
        feat.SetValue(cls.Fields.FindField("name"), "测试数据");
      //保存
        feat.Save();
}

//4.修改要素的几何图形

//取得一个图层
IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);
//取得一个元数据
IFeatureClass cls = (IFeatureClass)lyr.Class;
//建立一个过滤器
IQueryFilter qf=new QueryFilterClass();
//设置条件
qf.WhereClause="id =1";
//查询数据
IFeatureCursor cur = cls.Search(qf);
//取得一个要素
IFeature feat = cur.Next();
if (feat != null)
{
      //图层为线形Shape,所以使用IPolyline取得图形
      HiMap.Geometry.IPolyline line = (HiMap.Geometry.IPolyline)feat.Shape;
      IPointCollection chline = (IPointCollection)line;
      //建立点(测试数据)
    IPoint pt1 = new PointClass();
     pt1.X = "111.2345556";
     pt1.Y = "23.2345556";
    IPoint pt2 = new PointClass();
     pt2.X = "112.2345556";
     pt2.Y = "23.3345556";
     //添加点到线中
     chline.AddPoint(pt1);
    chline.AddPoint(pt2);
    //将修改后的图形赋给要素
      feat.Shape = (IGeometry)line;
    //保存
    feat.Save();
}

//5.为线或面添加新的部分

//取得一个图层
IFeatureLayer lyr = (IFeatureLayer)mapControl1.Map.GetLayer(0);
//取得一个元数据
IFeatureClass cls = (IFeatureClass)lyr.Class;
//建立一个过滤器
IQueryFilter qf=new QueryFilterClass();
//设置条件
qf.WhereClause="id =1";
//查询数据
IFeatureCursor cur = cls.Search(qf);
//取得一个要素
IFeature feat = cur.Next();
if (feat != null)
{
       //图层为线形Shape,所以使用IPolyline取得图形
       HiMap.Geometry.IPolyline line = (HiMap.Geometry.IPolyline)feat.Shape;
       //建立一条新的线
       IPointCollection chline = new PolylineClass();
     //建立点(测试数据)
       IPoint pt1 = new PointClass();
       pt1.X = "111.2345556";
     pt1.Y = "23.2345556";
     IPoint pt2 = new PointClass();
      pt2.X = "112.2345556";
       pt2.Y = "23.3345556";
       //添加点到线中
       chline.AddPoint(pt1);
       chline.AddPoint(pt2);       
     HiMap.Geometry.IGeometryCollection geoColl = (HiMap.Geometry.IGeometryCollection)line;
       //将新的线添加到原有的线中
       geoColl.AddGeometry((IGeometry)chline);
       //将修改后的图形赋给要素
       feat.Shape = (IGeometry)line;
     //保存
       feat.Save();
}

 

四、示例程序运行动画

下载演示动画myHiMapVideo2.gif
下载示例程序myHiMapAdvanced.zip

posted on 2008-11-10 21:17  dyh  阅读(2496)  评论(0编辑  收藏  举报