• 找个输入IPoint在某个FeatureClass上距离最近的要素


     

     

     1 /// <summary>
     2         /// 得到输入点在输入图层上的最近点
     3         /// </summary>
     4         /// <param name="randomPoints">输入的点,注意小数位数不能太长,具体支持多长没有测试,我用小数点2位可以成功,但是七八位肯定不行</param>
     5         /// <param name="feaPoints">输出在featureclass上距离最近的要素,这里是点类型输出的是点</param>
     6         /// <param name="length">输入点到featureclass上最近点的距离</param>
     7         /// <returns></returns>
     8         public bool NearestPoint(IPoint[] randomPoints, out IPoint[] feaPoints, out double length)
     9         {
    10             feaPoints = new IPoint[randomPoints.Length];
    11             length = 0;
    12             try
    13             {
    14                 fd = (LinkReady.ReadPipeLineWorkspace() as IFeatureWorkspace).OpenFeatureDataset(LY.UG.Common.DictionaryConfig.DatasetName["道路网络数据集名称"]);//("SDE.地下管线");
    15                 nc = fd as INetworkCollection;
    16                 IFeatureClass feaRoadJunction = (fd as IFeatureClassContainer).get_ClassByName(LY.UG.Common.DictionaryConfig.DatasetName["道路网络点图层"]);
    17 
    18                 int[] feaID = new int[randomPoints.Length];
    19                 double[] feaDis = new double[randomPoints.Length];
    20                 IFeatureIndex pFeatureIndex = new FeatureIndex();
    21                 IIndexQuery pIndexQuery;
    22                 IGeoDataset geodataset = (IGeoDataset)feaRoadJunction;
    23 
    24                 ITrackCancel trackCancel = new TrackCancel();
    25                 pFeatureIndex.FeatureClass = feaRoadJunction;//.setFeatureClassByRef(pFeatureClass1);
    26 
    27                 pFeatureIndex.Index(trackCancel, geodataset.Extent);
    28                 pIndexQuery = pFeatureIndex as IIndexQuery;
    29                 for (int i = 0; i < randomPoints.Length; i++)
    30                 {
    31                     pIndexQuery.NearestFeature(randomPoints.GetValue(i) as IPoint, out feaID[i], out feaDis[i]);
    32                     feaPoints[i] = new PointClass();
    33                     feaPoints[i] = feaRoadJunction.GetFeature(feaID[i]).ShapeCopy as IPoint;
    34                     length = length + feaDis[i];
    35                 }
    36 
    37                 return true;
    38             }
    39             catch (Exception ee)
    40             {
    41                 return false;
    42             }
    43         }

     

  • 相关阅读:
    关于MySql中的varchar类型
    分享15个HTML5工具
    MVC的路径查找顺序
    html5画布的旋转效果
    C#将集合快速排序
    一个不错的php验证码的类
    新学C++的for,switch和随机数
    高效率去掉js数组中重复项
    js带上框架和防止被iframe的代码
    请不要对我说“你要马上把这个小问题修改好”
  • 原文地址:https://www.cnblogs.com/fatherZyl/p/3642885.html
Copyright © 2020-2023  润新知