GVKun编程网logo

arcgis engine计算点到线的最短距离(arcgis计算点到线的最小距离)

15

本篇文章给大家谈谈arcgisengine计算点到线的最短距离,以及arcgis计算点到线的最小距离的知识点,同时本文还将给你拓展ArcGIS10影像分析工具及ArcGISEngine的实现、ArcG

本篇文章给大家谈谈arcgis engine计算点到线的最短距离,以及arcgis计算点到线的最小距离的知识点,同时本文还将给你拓展ArcGIS 10 影像分析工具及ArcGIS Engine的实现、ArcGIS Engine 中如何获取 Map 中已经选择的要素呢(转)、ArcGIS Engine 中实现右键出现快捷键菜单栏、ArcGIS Engine 对要素操作等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

arcgis engine计算点到线的最短距离(arcgis计算点到线的最小距离)

arcgis engine计算点到线的最短距离(arcgis计算点到线的最小距离)

IProximityOperator接口用于获取两个几何图形的距离,以及给定一个Point,求另一个几何图形上离离给定点最近的点。IProximityOperator接口的主要方法有:QueryNearesPoint,ReturnDistance, ReturnNearestPoint
ReturnDistance方法用于返回两个几何对象间的最短距离,QueryNearesPoint方法用于查询获取几何对象上离给定输入点的最近距离的点的引用,ReturnNearestPoint方法用于创建并返回几何对象上离给定输入点的最近距离的点

  1. IMap pMap = axMapControl1.Map;
  2.            ILayer pLayer = null;
  3.            IPoint po=null;
  4.            IPolyline pl=null;
  5.            IFeatureLayer featurelayer=null;
  6.            IFeatureClass featureclass = null;
  7.            IGraphicsContainer gra;
  8.            IElement ptele;
  9.            IPointCollection lineptcol;
  10.            gra = axMapControl1.Map as IGraphicsContainer;
  11.            lineptcol = new PolylineClass();
  12.            for (int i = 0; i < pMap.LayerCount; i++)
  13.            {
  14.                pLayer = pMap.get_Layer(i);
  15.                 featurelayer = pLayer as IFeatureLayer;
  16.                 featureclass = featurelayer.FeatureClass;
  17.                IFeature feature = featureclass.GetFeature(0);
  18.  
  19.                if (feature.Shape is IPoint)
  20.                {
  21.                    po = feature.Shape as IPoint;
  22.                }
  23.                else {
  24.                     pl = feature.Shape as IPolyline;
  25.                }
  26.                //MessageBox.Show("qqqq");
  27.            }
  28.  
  29.            double dis = GetTwoGeometryDistance(po, pl);
  30.            IPoint po2 = NearestPoint(po, pl);
  31.            object a = Type.Missing;
  32.            lineptcol.AddPoint(po, ref a, ref a);
  33.            lineptcol.AddPoint(po2, ref a, ref a);
  34.            IElement lineele = new LineElementClass();
  35.            IPolyline pline = new PolylineClass();
  36.            pline = lineptcol as IPolyline;
  37.            lineele.Geometry = pline as IGeometry;
  38.            gra.AddElement(lineele, 0);
  39.            axMapControl1.Refresh();
  40.            MessageBox.Show(dis.ToString());

计算几何图形之间的距离

  1. public double GetTwoGeometryDistance(IGeometry pGeometryA, IGeometry pGeometryB)
  2.         {
  3.             IProximityOperator pProOperator = pGeometryA as IProximityOperator;
  4.             if (pGeometryA != null || pGeometryB != null)
  5.             {
  6.                 double distance = pProOperator.ReturnDistance(pGeometryB);
  7.                 return distance;
  8.             }
  9.             else
  10.             {
  11.                 return 0;
  12.             }
  13.         }

离给定的几何图形最近的点

  1. //离给定的几何图形最近的点
  2.         public IPoint NearestPoint(IPoint pInputPoint, IGeometry pGeometry)
  3.         {
  4.             try
  5.             {
  6.                 IProximityOperator pProximity = (IProximityOperator)pGeometry;
  7.                 IPoint pNearestPoint = pProximity.ReturnNearestPoint(pInputPoint, esriSegmentExtension.esriNoExtension);
  8.                 return pNearestPoint;
  9.             }
  10.             catch (Exception Err)
  11.             {
  12.                 MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  13.                 return null;
  14.             }
  15.         }

计算出来最近的点,然后和初始的那个点连成一个线,也就做出了直线的中垂线

ArcGIS 10 影像分析工具及ArcGIS Engine的实现

ArcGIS 10 影像分析工具及ArcGIS Engine的实现

 

在影像数据分析,对于使用ENVI等遥感软件比较熟悉的人来说,我们经常要对影像做拉伸操作,融合操作,卷积运算,NDVI(归一化植被指数)裁剪,波段组合,正射矫正等,关于这术语请参看和遥感相关的书籍.ArcGIS 10中的影像分析工具包含了这些常见的对遥感数据和栅格数据操作的方法。

刚注册博客,不让发附件,抱歉,所以请到 下面地址下载:http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid=110484

微博下载地址:http://vdisk.weibo.com/s/2Mn8s/1330181298


原文链接: http://blog.csdn.net/arcgis_all/article/details/8215051

ArcGIS Engine 中如何获取 Map 中已经选择的要素呢(转)

ArcGIS Engine 中如何获取 Map 中已经选择的要素呢(转)

ArcGIS Engine 中如何获取 Map 中已经选择的要素呢

 

1、使用 IEnumFeturea 对象获取 map 中的 FeatureSelection,该方法可以获取所有图层的选择要素。IMap 中的 FeatureSelection 可不是 IFeatureSelection,而是 ISelection。

 

2、使用 ISelectionSet,IEnumIDs,FeatureClass.GetFeature () 方法获取某个图层中的选择要素

 

在 map 中获取要素时,这样是可以的,不过不能得到要素的完整属性信息,貌似只能拿到 ID 值。

ISelection pSelection = pMap.FeatureSelection;

           IEnumFeature enumFeature = pSelection asIEnumFeature;

           IFeature feature = enumFeature.Next();

            while (feature != null)

            {

               array.Add(feature);

               feature=enumFeature.Next();

            }

那如果要得到完整的属性信息怎么办呢?IEnumFeatureSetup 起到大作用了。如下所示:

ISelection selection = pMap.FeatureSelection;

IEnumFeatureSetup enumFeatureSetup = selection as IEnumFeatureSetup;    // 这里很必要

enumFeatureSetup.AllFields = true;                                      // 这里很必要

IEnumFeature enumFeature = enumFeatureSetup as IEnumFeature;

enumFeature.Reset(); 

IFeature feature = enumFeature.Next();

while (feature != null)

      {

        stringvalue = feature.get_Value (index).ToString ();// 就可以得到任意字段的值了 

        feature = enumFeature.Next();

       }

 

ArcGIS Engine 中实现右键出现快捷键菜单栏

ArcGIS Engine 中实现右键出现快捷键菜单栏

先看看效果过图

实现是上图的效果主要需要用到 axMapControl1_OnMouseDown 事件,在点击事件中判断是点击的右键还是左键,进行弹出

直接贴代码:

      private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
        {
            #region  主窗体右键
            /////地图视窗鼠标事件
            IToolbarMenu mapPopMenu = null;
            mapPopMenu = new ToolbarMenu();//这个很关键,主要应用SDK封装的工具类似于C#的OpenDialog
            if (e.button == 2)
            {
                /* IMap pMap = axMapControl1.Map;
                 IActiveView pActiveView = pMap as IActiveView;
                 IEnvelope pEnv = axMapControl1.TrackRectangle();
                 pActiveView.Extent = pEnv;
                 pActiveView.Refresh();*/

                //地图视窗右键菜单功能

                mapPopMenu.AddItem(new ControlsSelectTool(), -1, 0, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.AddItem(new ControlsMapPanTool(), -1, 1, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.AddItem(new ControlsMapFullExtentCommand(), -1, 2, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.AddItem(new ControlsMapIdentifyTool(), -1, 3, false, esriCommandStyles.esriCommandStyleIconAndText);//识别工具
                mapPopMenu.AddItem(new ControlsMapZoomInFixedCommand(), -1, 4, false, esriCommandStyles.esriCommandStyleIconAndText);//
                mapPopMenu.AddItem(new ControlsMapZoomInFixedCommand(), -1, 5, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.AddItem(new ControlsSelectFeaturesTool(), -1, 6, false, esriCommandStyles.esriCommandStyleIconAndText);//选择要素工具
                mapPopMenu.AddItem(new ControlsClearSelectionCommand(), -1, 7, false, esriCommandStyles.esriCommandStyleIconAndText);//缩放所选要素
                mapPopMenu.AddItem(new ControlsZoomToSelectedCommand(), -1, 8, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.AddItem(new ControlsMapZoomToLastExtentBackCommand(), -1, 9, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.AddItem(new ControlsMapZoomToLastExtentForwardCommand(), -1, 10, false, esriCommandStyles.esriCommandStyleIconAndText);
                mapPopMenu.SetHook(axMapControl1);//// 得到地图视窗右键菜单
                mapPopMenu.PopupMenu(e.x, e.y, axMapControl1.hWnd);//弹出显示菜单
            }
            /*  if (e.button == 1)//左键因为右键要取消
              {
                  IMap pMap = axMapControl1.Map;
                   IActiveView pActiveView = pMap as IActiveView;
                   IEnvelope pEnv = axMapControl1.TrackRectangle();
                   pActiveView.Extent = pEnv;
                   pActiveView.Refresh();
              }
             * */
            //此事件不会触发
            if (e.button == 3)//如果鼠标中间改为ControlsMapPanTool会更好
            {
                IMap pMap = axMapControl1.Map;
                IActiveView pActiveView = pMap as IActiveView;
                IEnvelope pEnv = axMapControl1.TrackRectangle();
                pActiveView.Extent = pEnv;
                pActiveView.Refresh();
            }
 
        }


ArcGIS Engine 对要素操作

ArcGIS Engine 对要素操作

获取所有要素集

/// <summary>
/// 获取所有要素集
/// </summary>
/// <param name="workspace">工作空间对象</param>
/// <returns>要素集列表</returns>
public static List<IFeatureDataset> GetAllFeatureClass(IWorkspace workspace)
{
    IEnumDataset dataset = workspace.get_Datasets(esriDatasetType.esriDTFeatureDataset);
    IFeatureDataset featureDataset = dataset.Next() as IFeatureDataset;
    List<IFeatureDataset> featureDatasetList = new List<IFeatureDataset>();
    while (featureDataset != null)
    {
        featureDatasetList.Add(featureDataset);
        featureDataset = dataset.Next() as IFeatureDataset;
    }
    return featureDatasetList;
}

获取所有要素类

/// <summary>
/// 获取所有要素类
/// </summary>
/// <param name="featureDataset">要素集</param>
/// <returns>要素类列表</returns>
public static List<IFeatureClass> GetAllFeatureClass(IFeatureDataset featureDataset)
{
    IFeatureClassContainer featureClassContainer =(IFeatureClassContainer)featureDataset;
    IEnumFeatureClass enumFeatureClass = featureClassContainer.Classes;
    IFeatureClass featureClass = enumFeatureClass.Next();
    List<IFeatureClass> featureClassList = new List<IFeatureClass>();
    while (featureClass != null)
    {
        featureClassList.Add(featureClass);
        featureClass = enumFeatureClass.Next();
    }
    return featureClassList;
}

获取所有要素

/// <summary>
/// 获取所有要素
/// </summary>
/// <param name="featureClass">要素类</param>
/// <returns>要素列表</returns>
public static List<IFeature> GetAllFeatureClass(IFeatureClass featureClass)
{
    List<IFeature> featureList = new List<IFeature>();
    IFeatureCursor featureCursor = featureClass.Search(null, false);
    IFeature feature = featureCursor.NextFeature();
    while (feature != null)
    {
        featureList.Add(feature);
        feature = featureCursor.NextFeature();
    }
    return featureList;
}

通过名称来删除要素类

//注: 在程序运行中往往有些要素类因为出错而无法删除,这时IDataset.Delete这个方法则无法成功,可以用轻量级的名称对象来完成这个任务
//删除要素类
public static bool DeleteFeatureDataset(IWorkspace ws, string name)
{
    if (ws == null || string.IsNullOrEmpty(name))
    {
        ErrMsg = "工作空间或要素类名称不能为空!";
        return false;
    }
    IFeatureDataset pFeaDataSet;
    IEnumDatasetName pEnumDatasetName;
    IFeatureWorkspace pFeaWorkspace;
    IDatasetName pDatasetName;
    try
    {
        pFeaWorkspace = ws as IFeatureWorkspace;
        pEnumDatasetName = ws.get_DatasetNames(esriDatasetType.esriDTFeatureClass ^ esriDatasetType.esriDTFeatureDataset);
        pEnumDatasetName.Reset();
        pDatasetName = pEnumDatasetName.Next();
        while (pDatasetName != null)
        {
            if (pDatasetName.Type == esriDatasetType.esriDTFeatureDataset)
            {
                //如果是要素集,则对要素集内的要素类进行查找
                IEnumDatasetName pEnumFcName = (pDatasetName as IFeatureDatasetName).FeatureClassNames;
                IDatasetName pFcName = pEnumFcName.Next();
                while (pFcName != null)
                {
                    if (pFcName.Name.IndexOf(name) >= 0)
                    {
                        DeleteByName(pFeaWorkspace, pFcName);
                        return true;
                    }
                    pFcName = pEnumFcName.Next();
                }
            }
            else
            {
                if (pDatasetName.Name.IndexOf(name) >= 0)
                {
                    DeleteByName(pFeaWorkspace, pDatasetName);
                    return true;
                }
            }
            pDatasetName = pEnumDatasetName.Next();
        }
        return false;
    }
    catch (Exception ex)
    {
        ErrMsg = ex.Message;
        return false;
    }
}
//删除名称对象
public static void DeleteByName(IFeatureWorkspace pFeaWorkspace, IDatasetName pDatasetName)
{
    IFeatureWorkspaceManage pWorkspaceManager = pFeaWorkspace as IFeatureWorkspaceManage;
    pWorkspaceManager.DeleteByName(pDatasetName);
}

关于arcgis engine计算点到线的最短距离arcgis计算点到线的最小距离的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于ArcGIS 10 影像分析工具及ArcGIS Engine的实现、ArcGIS Engine 中如何获取 Map 中已经选择的要素呢(转)、ArcGIS Engine 中实现右键出现快捷键菜单栏、ArcGIS Engine 对要素操作等相关内容,可以在本站寻找。

本文标签: