做了线性参考的线要素,可否指定该线上一点,找到该点处的测量值?

做了线性参考的线要素,可否指定该线上一点,返回其测量值?
已邀请:

朱新颖

赞同来自:

【解决办法】:
可以,使用IRouteLocator2.Identify 方法,参数输入的是IEnvelope(可以将IPoint做一个很小的缓冲区,然后获取Envelope),该方法的返回值为IRouteLocation,将其转为IRouteMeasurePointLocation,获取其Measure属性,即为该点的测量值。可以参考下面代码:


 private void FindRout(IFeatureClass _pRouteFC, string _pPKName, object _pID)
        {
            IDataset pDataset = (IDataset)_pRouteFC;
            IName pName = pDataset.FullName;
            IRouteLocatorName pRouteLocatorName = new RouteMeasureLocatorNameClass();
            pRouteLocatorName.RouteFeatureClassName = pName;

            pRouteLocatorName.RouteIDFieldName = _pPKName;
            pRouteLocatorName.RouteMeasureUnit = esriUnits.esriFeet;
            pName = (IName)pRouteLocatorName;
            IRouteLocator2 pRouteLocator = (IRouteLocator2)pName.Open();
         
            IPoint point = new PointClass();
            point.PutCoords(2481479.3658, 758698.4729);
            ITopologicalOperator topo = point as ITopologicalOperator;

            IEnvelope enve = topo.Buffer(0.1).Envelope;
           IEnumRouteIdentifyResult enumresult = pRouteLocator.Identify(enve,);
           enumresult.Reset();
           if (enumresult != null)
           {
               IRouteLocation pRouteLoc1 = new RouteMeasurePointLocationClass();
               IFeature fea = null;
               enumresult.Next(out pRouteLoc1,out fea);
               IRouteMeasurePointLocation rMLineLoc1 = (IRouteMeasurePointLocation)pRouteLoc1;
               double mea = rMLineLoc1.Measure;
           }
         
        }
IFeatureLayer pFeatureLayer = axMapControl1.get_Layer(0) as IFeatureLayer;
            FindRout(pFeatureLayer.FeatureClass, ROUTE1, 20000013);

要回复问题请先登录注册