精华内容
下载资源
问答
  • C# ArcEngine二次开发

    2017-12-14 19:02:43
    课程老师布置的期末大作业,实现C# ArcEngine二次开发,功能: ①代开mxd文件 ②鹰眼、同步缩放 ③制图日期输出 ④自定义工具集【圆、矩形等等】 ⑤坐标实时显示 ⑥右键菜单栏的实现 。。。。。。。
  • C# Arc Engine二次开发

    2014-07-31 15:42:35
    我现在做到了选中图层中的要素,但是如何把选中要素作为shp文件输出,请简要说明一下思路 [img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/3.gif][/img]
  • 基于C#arcengine二次开发的几个简单程序
  • 使用C#进行ArcEngine二次开发,鹰眼的实现的源程序,希望对大家有帮助
  • 本次实习通过编写AE二次开发,我们需要掌握地理信息系统开发的基本步骤,具备使用c#语言的基本能力,最终设计编写信息学部地图查询小型系统,实现基本功能、属性查询、空间分析等功能,能够方便新生入学时查询信息...
  • 基于ArcEngine10.2和VS2012进行C#ArcEngine二次开发 创建与调用AOI书签 在如图所示的程序主窗体菜单栏中添加一个菜单项“创建书签”,其控件名为“miCreateBookmark”,用于调用“创建书签”窗体;在“创建书签”...

    基于ArcEngine10.2和VS2012进行C#ArcEngine二次开发

    创建与调用AOI书签

    在如图所示的程序主窗体菜单栏中添加一个菜单项“创建书签”,其控件名为“miCreateBookmark”,用于调用“创建书签”窗体;在“创建书签”边上再添加一个组合框,其控件名为“cbBookmarkList”,用于保存已创建的书签名,并且能够在选中某书签名时,缩放到该书签对应的地图区域。

    (一)添加类库和引用

    在VS2012的资源管理器中添加ArcGIS引用,将ESRI.ArcGIS.Geometry类库的引用添加进项目。在主窗体的代码(即MainForm.cs)中导入ESRI.ArcGIS.Geometry

    输入代码:using ESRI.ArcGIS.Geometry

    这时如果发现VS提示代码中的Path类冲突,可以改成System.I/O.Path的形式避免冲突

    (二)添加创建书签函数

    在MainForm类中添加一个成员函数CreateBookmark,用来创建书签

     public void CreateBookmark(string sBookmarkName) {
                IAOIBookmark aoiBookmark = new AOIBookmarkClass();
    
                //
                if (aoiBookmark != null) { 
                aoiBookmark.Location=axMapControl1.ActiveView.Extent;
                aoiBookmark.Name = sBookmarkName;
                }
    
                //add aoibookmark to map
                IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;
                if(bookmarks != null){
                    bookmarks.AddBookmark(aoiBookmark);
                }
                //add aoibookmark to the comboxitem
                cbBookmarkList.Items.Add(aoiBookmark.Name);
            }

    (三)添加窗体

    在VS2012的“项目”菜单下的“添加Windows窗体”中,添加一个Windows窗体,将窗体文件命名为”AdmitBookmarkName.cs“.该窗体用于获取用户定义的书签名称,并传递入主窗体。

    向窗体中添加两个控件,一个TextBox,用于输入书签名称,控件名为"tbBookmarkName";一个Button,控件名为"btnAdmit"。

    接着双击Button,自动生成"Click"事件的缺省的响应函数。

    在当前窗体的代码中,添加一个主窗体类型的成员变量m_frmMain,并新建一个构造函数,以主窗体类型对象为参数,用于调用主窗体的相关成员。修改Click事件响应函数,实现书签名的传递。

    代码如下:

    public MainForm m_frmMain;
            
            public AdmitBookmarkName(MainForm  frm)
            {
                InitializeComponent();
                if (frm != null) {
                    m_frmMain = frm;
                }
            }
    
    
    private void btnAdimit_Click(object sender, EventArgs e)
            {
                if (m_frmMain != null || tbBookmarkname.Text == "") {
    
                    m_frmMain.CreateBookmark(tbBookmarkname.Text);
                }
                this.Close();
            }

    (四)实现创建书签和调用书签功能

    为主窗体的”创建书签“按钮生成"Click"事件响应函数并添加代码以实现确认书签名称功能。

    private void miCreateBookmark_Click(object sender, EventArgs e)
            {
                AdmitBookmarkName frmABN = new AdmitBookmarkName(this);
                frmABN.Show();
            }

    为组合框"cbBookmarkList"生成"SelectedIndexChanged"事件响应函数,添加代码使当组合框中被选中项改变时,地图可以缩放至书签所在区域。

    private void cbBookmarkList_SelectedIndexChanged(object sender, EventArgs e)
            {
                //get bookmark_list
                IMapBookmarks bookmarks = axMapControl1.Map as IMapBookmarks;
                IEnumSpatialBookmark enumSpatialBookmark = bookmarks.Bookmarks;
    
                //
                enumSpatialBookmark.Reset();
                ISpatialBookmark spatialBookmark = enumSpatialBookmark.Next();
                while (spatialBookmark != null) {
                    if (cbBookmarkList.SelectedItem.ToString() == spatialBookmark.Name)
                    {
                        spatialBookmark.ZoomTo((IMap)axMapControl1.ActiveView);
                        axMapControl1.ActiveView.Refresh();
                        break;
                    }
                    spatialBookmark = enumSpatialBookmark.Next();
                }
            }

     

    (五)如图所示,创建与调用AOI书签功能添加完毕。

    参考书目:《GIS程序设计教程——基于ArcGIS Engine的C#开发实例》张丰,杜震洪,刘仁义 编著

    展开全文
  • ArcEngine搭载C#进行GIS的二次开发,关于目标显示的问题,由于考虑到设置定时器刷新目标位置和方向,因此在显示图层上采用的是动态图层DynamicLayer,主要用到的dll文件是ESRI.ArcGIS.ADF.BaseClasses,通过继承...

      ArcEngine搭载C#进行GIS的二次开发,关于目标显示的问题,由于考虑到设置定时器刷新目标位置和方向,因此在显示图层上采用的是动态图层DynamicLayer,主要用到的dll文件是ESRI.ArcGIS.ADF.BaseClasses,通过继承BaseDynamicLayer设计一个自己的动态图层基类,这样在加载其他图层时可以很方便的调用。先上基类的代码

    using ESRI.ArcGIS.ADF.BaseClasses;
    using ESRI.ArcGIS.Display;
    using ESRI.ArcGIS.Geometry;
    using System;
    using System.Windows.Forms;
    
    namespace GIS
    {
        public abstract class myDynamicLayer : BaseDynamicLayer
        {
            protected IDynamicGlyph DynamicGlyph;
    
            private readonly Timer timer = new Timer();
            private bool isUpdate;
    
            public IColor TransparenyColor { get; set; }
    
            public int Level { get; set; }
    
            public double Scale
            {
                get { return MapElement.GetScale(Level); }
            }
    
            public IPoint MouseMvePoint { get; set; }
    
    
            public string LayerName
            {
                get { return m_sName; }
                set { m_sName = value; }
            }
    
            public int TimerInterval
            {
                get { return timer.Interval; }
                set
                {
                    timer.Enabled = false;
                    timer.Interval = value;
                    timer.Enabled = true;
                }
            }
    
            public void BeginUpdate()
            {
                isUpdate = true;
            }
    
            public void EndUpdate()
            {
                isUpdate = false;
            }
    
            protected FisDynamicLayer()
            {
                Level = 11;
                timer.Interval = 15;
                timer.Tick += timer_Tick;
                timer.Enabled = true;
                TransparenyColor = MapElement.SetColor(255, 255, 255, 64);
            }
    
            public override void DrawDynamicLayer(esriDynamicDrawPhase DynamicDrawPhase, IDisplay Display, IDynamicDisplay DynamicDisplay)
            {
                if (!m_bIsImmediateDirty) return;
    
                if (DynamicDrawPhase != esriDynamicDrawPhase.esriDDPImmediate)
                {
                    return;
                }
    
                if (!m_bValid || !m_visible)
                {
                    return;
                }
    
                if (isUpdate)
                {
                    return;
                }
    
                IDynamicSymbolProperties2 DynamicSymbolProps = DynamicDisplay as IDynamicSymbolProperties2;
                IDynamicGlyphFactory2 DynamicGlyphFactory2 = DynamicDisplay.DynamicGlyphFactory as IDynamicGlyphFactory2;
    
                if (DynamicSymbolProps == null || DynamicGlyphFactory2 == null)
                {
                    return;
                }
    
                DrawDynamicLayerEx(DynamicDisplay, DynamicGlyphFactory2, DynamicSymbolProps);
    
                m_bIsImmediateDirty = false;
            }
            private void timer_Tick(object sender, EventArgs e)
            {
                if (!m_bIsImmediateDirty)
                    m_bIsImmediateDirty = true;
            }
       }
    }

    此外需要在动态图层基类中创建一个abstract方法以方便继承时写入不同图层的需要

    public abstract void DrawDynamicLayerEx(IDynamicDisplay DynamicDisplay, IDynamicGlyphFactory2 DynamicGlyphFactory2, IDynamicSymbolProperties2 DynamicSymbolProps);
    

      这样你就有了一个可以继承的动态图层基类了,生成新图层时重写上面的抽象方法即可,例如:

    public override void DrawDynamicLayerEx(IDynamicDisplay DynamicDisplay, IDynamicGlyphFactory2 DynamicGlyphFactory2, IDynamicSymbolProperties2 DynamicSymbolProps)
            {
                if (MouseMvePoint == null)
                {
                    return;
                }
    
                if (!IsClicked)
                {
                    return;
                }
    
                if (pPointCollection.PointCount > 1)
                {
                    pPointCollection.RemovePoints(0, pPointCollection.PointCount);
                }
    
                if (pPointCollection.PointCount > 0)
                {
                    if (IsMoved)
                    {
                        Radius = CircleRadius(pPointCollection.Point[0], MouseMvePoint);
    
                    }
    
                    points = CirclePointCollection(pPointCollection.Point[0], Radius, 80);
                }
    
                DynamicSymbolProps.SetScale(esriDynamicSymbolType.esriDSymbolMarker, 6.0f, 6.0f);
                DynamicSymbolProps.SetColor(esriDynamicSymbolType.esriDSymbolMarker, 255.0f, 0.0f, 0.0f, 1.0f);
                DynamicDisplay.DrawMarker(CenterPoint);
    
                DynamicSymbolProps.SetScale(esriDynamicSymbolType.esriDSymbolMarker, 1.0f, 1.0f);
                DynamicSymbolProps.SetColor(esriDynamicSymbolType.esriDSymbolMarker, 255.0f, 0.0f, 0.0f, 1.0f);
                DynamicDisplay.DrawPolyline(points);
    
                DynamicSymbolProps.SetScale(esriDynamicSymbolType.esriDSymbolMarker, 1.0f, 1.0f);
                DynamicSymbolProps.SetColor(esriDynamicSymbolType.esriDSymbolMarker, 255.0f, 0.0f, 0.0f, 0.5f);
                DynamicDisplay.DrawPolygon(points);
            }

     

    转载于:https://www.cnblogs.com/zfygiser/p/6603694.html

    展开全文
  • 计算多边形的面积,直接调用Iarea接口的area属性得到的面积和在arcgis里计算的面积不一样,请问怎么回事,是不是代码中需要设置坐标系统,请高人指点,谢谢! 部分代码 IFeatureClass pafeature = pFeatCl as ...
  • ArcEngine二次开发时,如何在AxSceneControl中清除所选。C#代码实现工具,点击清除场景中所选的要素。一开始想要调用ICommand 接口,调用工具命令,以为可以跟二维开发时一样,于是写的代码如下:axSceneControlMain...
    ArcEngine二次开发时,如何在AxSceneControl中清除所选。C#代码实现工具,点击清除场景中所选的要素。一开始想要调用ICommand 接口,调用工具命令,以为可以跟二维开发时一样,于是写的代码如下:
    
    axSceneControlMain.CurrentTool = null;
                ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsClearSelectionCommandClass();
                pCommand.OnCreate(axSceneControlMain.Object);
                pCommand.OnClick();

    但是发现并没有效果,而且会报错,如图所示。



    关键是该接口中也只有一个与清除选择有关的就是ControlsClearSelectionCommandClass()。既然这个报错,那究竟是为什么呢?

    后来终于发现,其实在AxSceneControl中定义了专门的清除所选要素方法,并不是封装在ICommand接口中的,直接这样写就可以了:

                axSceneControlMain.CurrentTool = null;
                this.axSceneControlMain.Scene.ClearSelection();///与二维不同
                axSceneControlMain.SceneGraph.RefreshViewers();

    最后来个刷新。

    这样就可以啦。点击按钮,清除选择。效果很棒!


    展开全文
  • 前两,在项目中遇到了窗体之间参数传递的问题,今天稍作总结,以方便后面使用。 第一种方法 子窗体传递参数的方法 下面是子窗体的代码。 namespace OilTeaPIS {  public partial class frmThematicQuery :...

    前两次,在项目中遇到了窗体之间参数传递的问题,今天稍作总结,以方便后面使用。

    第一种方法

    子窗体传递参数的方法

    下面是子窗体的代码。

     

    namespace OilTeaPIS {     public partial class frmThematicQuery : Form     {         private AxMapControl pAxMap;         public frmThematicQuery(AxMapControl pMainMap)         {             InitializeComponent();             //把主窗体内的axmapcontrol传给子窗体             pAxMap = pMainMap;         }

            private void frmThematicQuery_Load(object sender, EventArgs e)         {                       }

    }

    }

     在主窗体中实例化子窗体

    代码如下:

        //弹出专题信息查询窗体
            private void menu_Q_ThematicQuery_Click(object sender, EventArgs e)
            {
                    frmThematicQuery frmThemQuery = new frmThematicQuery(axMapControl1);
                    frmThemQuery.Show();  
            }

     

     

    第二种方法:

    自定义类里面设置属性,类设置成public,属性也是public

    namespace OilTeaPIS
    {
        /// <summary>
        /// 使用本类可以新建点、线、面
        /// 移动点、线、面
        /// 编辑线、面的节点
        /// 使用时需设置Map和CurrentLayer
        /// </summary>
        public class AoEditor
        {
            private ILayer m_pCurrentLayer;
            private IMap m_pMap;
              /// <summary>
            /// 当前图层,只写
            /// </summary>
            public ILayer CurrentLayer
            {
                set
                {
                    m_pCurrentLayer = (ILayer)value;
                }
            }
    
            /// <summary>
            /// 地图对象,只写
            /// </summary>
            public IMap Map
            {
                set
                {
                    m_pMap = (IMap)value;
                }
            }
    


    在主窗体里面给自定义类赋值

       private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                    AoEditor  pEditor = new AoEditor();
                    pEditor.Map = axMapControl1.Map;

                 }

              catch (System.Exception err)
                {
                    MessageBox.Show(this, err.Message.ToString());
                }

    }

    展开全文
  • 里面有详细的二次开发的讲解,对我学习ArcEngine十分有用,希望对大家也有所帮助。
  • arcengine二次开发

    2016-12-21 16:37:40
    arcengine 二次开发c#语言,SDE数据库的连接断开,shp图层的加载移除,图层的属性查看,图层的放大缩小漫游全屏,还有图层的增删要素操作
  • 该文档讲述了基于Visual C#ArcEngine二次开发,主要包含一些基础GIS功能按钮的添加,简单图查属性功能的实现以及简单属性查图功能的实现。
  • ArcEngine二次开发实例

    2018-05-25 08:51:35
    基于C#ArcEngine二次开发,内容简明扼要,适合初学者快速入门。
  • 最近一段时间在写C#arcengine二次开发,期间遇到许多问题,有搜罗全网找到的解决办法,也有自己想到的解决办法,特此汇总便于查看。本帖不定时更新补充。 目录 Q1:C#&arcengine如何遍历mapcontrol中加载...
  • arcengine二次开发调用在线的天地图服务和ESRI服务的方法
  • 基于C#ArcEngine二次开发——创建一个基本的ArcMap界面 首先,下载安装好**ArcGIS10.x**和**Visual Studio 2012**。==VS版本不能高于2012==,否则arc engine的控件无法安装进去。 安装好这两个软件之后,打开VS,...
  • 基于C#ArcEngine二次开发——创建一个基本的ArcMap界面 using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; u...
  • Arcengine二次开发过程中,需要创建GDB临时文件处理某些中间结果,但是临时文件用完之后,需要删除这些文件,本文旨在探讨如何清理程序创建的GDB文件
  • Engine+开发手册ArcEngine 10.0 C#二次开发.pdf
  • ArcEngine二次开发教程

    2013-07-10 10:34:16
    ArcEngine二次开发,运用C#内有详细步骤说明
  • arcengine 二次开发

    2012-08-02 21:27:35
    基于C#arcengine 二次开发 初学者很好的资料
  • 介绍了一些GIS开发大神的专栏和自己收藏的一些文档
  • 介绍ArcEngine进行拓扑关系检查的基本入门架构和测试示例,交代了新手入门拓扑检查的可能遇见的几个异常及处置方法
  • 使用vs软件实现ArcEngine二次开发,具体包括地图的放大缩小、平移、全局视图,地图渲染与符号化,克里金插值、样条函数插值和反距离权重插值
  • 包含了的各种功能代码,以及专题图、空间分析!
  • 目录 1 准备工作 2 类和接口的实现 2.1 定义接口IArea 2.2 定义接口ILength 2.3 定义类calc并显式实现IArea和ILength接口 ...即:在一个类实现了多个接口,从类中的一个接口跳转到另外一个接口的过程就是QI(接口...
  • ArcEngine二次开发中AOI书签开发实现的样例代码,是自己《GIS程序设计》课程中写的作业,应该具有参考价值。相互分享,一起成长。
  • arcengine二次开发的课程资源,这是初学者的很好的开始,在ARCGIS二次开发
  • 介绍了C#+ArcEngine开发过程中与空值相关的操作及总结

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 891
精华内容 356
关键字:

c#arcengine二次开发

c# 订阅