欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏ArcGIS应用与开发AO开发 → 正文
使用ArcGISEngine导出要素为图形
07-12-12 00:00:00 作者:未知 出处:GIS空间站
我以前写过一篇文章《ArcEngine中将地图导出为图片》是关于如何将当前视图内的地图输出为一个图片的。
    昨天有个同事让我帮下忙,写一段代码将某个特定的。或某几个特定的要素导出为一个图片。
    我想到了我们的代码中有一段是将一个符号转化为一个图片的。当时就想能不能修改一下那个代码来提供这个功能。结果还真是搞出来了。
   完整的代码如下:
    /**这个方法使用HDC、图形的范围和要输出的图片的大小来构造一个 ITransformation.
    */
    public ITransformation CreateTransformation(IntPtr hdc,IEnvelope geomEnv,int imageWidth,int imageHeight)
{
   tagRECT frame=new tagRECT ();
   frame.left=0;
   frame.top =0;
   frame.right=imageWidth;
   frame.bottom=imageHeight;
   double dpi=Graphics.FromHdc (HDC).DpiY;
   long lDpi=(long)dpi;
   if(lDpi==0)
   {
    System.Windows .Forms .MessageBox .Show ("获取设备比例尺失败!");
    return null;
   }
   IDisplayTransformation dispTrans=new DisplayTransformationClass();
   dispTrans.Bounds =geomEnv;
   dispTrans.VisibleBounds =geomEnv;
   dispTrans.set_DeviceFrame(ref frame);
   dispTrans.Resolution =dpi;
   return dispTrans;
}
/**
*这个方法将多个Geometry输出到一个Bitmap文件中,文件路径为filePath,图片的大小为width*height。
*/
  public void SaveGeometryToImage(ArrayList geomCol,int width,int height,String filePath)
{
   //首先处理一下列表,去掉有问题的数据。
   int geomCount=geomCol.Count;
   for(int geomIndex=geomCount-1;geomIndex>=0;geomIndex--)
   {
      IGeometry selGeom =geomCol[geomIndex] as IGeometry;
      if(selGeom==null||selGeom.isEmpty())
      {
        geomCol.Remove(geoIndex);
       }
   }
   //看看还有没有图形
   geomCount=geomCol.Count;
   if(geomCount<=0)
   {
     MessageBox.Show("指定的图形对象有问题,不能输出");
     return ;
   }
    //开始计算总体范围
    IEnvelope totalEnv=(geomCol[0] as IGeometry).Envelope;
    for(int geomIndex=1;geomIndex<geomCount;geomIndex++)
    { 
       totalEnv.Union(geomCol[geomIndex] as IGeometry).Envelope);
    }
    Image image=new Bitmap(width,height);
    Graphics gc=Graphics.FromImage(image);
    IntPtr hdc=gc.GetHdc();
    ITransformation transformation=this.CreateTransformation(hdc,totalEnv,width,height);
   for(int geomIndex=0;geomIndex<geomCount;geomIndex++)
   {//一个一个输出了。
      IGeometry drawGeom=geomCol[geomIndex] as IGeometry;
    //根据几何图形来构造不同的符号。点有点的符号,线有线的符号,面有面的符号。
      ISymbol drawSym=this.CreateSymbol(drawGeom);
      drawSym.SetupDC((int)hdc,transformation);
      drawSym.Draw(drawGeom);
      drawSym.ReleaseDC();
   }
   //默认保存为Bmp也可以保存为其他的格式。
   image.Save(filePath,System.Drawing.Imaging.ImageFormat.Bmp);
 }
}
    /**
    *只输出一个图形的快捷方法
    */
   public void SaveGeometryToImage(IGeometry geom,int width,int height,String filePath)
  {
    ArrayList list=new ArrayList();
    list.add(geom);
    this.SaveGeometryToImage(list,width,height,filePath);
  }
    这里还有一个方法没有写出来 CreateSymbol 就是根据一个IGeometry来建立一个符号,应该不很难就不写了。
    对这个功能可能的扩展包括输出的时候是参数为Feature,而不是Geometry,那么就可以在建立符号的时候,根据Feature的内容来判断,可以达到不同的要素使用不同的符号输出的效果。

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    ArcGIS Engine(.NET)中枚举和字符串的互操作
    使用Installshield给AE程序打包
    AE 执行sql获得返回值
    AE建立拓扑的完整例子
    AE中的橡皮线
    ae指定字段转成注记
    AE创建Annotation

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号