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 }