public static IRouteLocator2 CreateRouteLocator(this IDataset featureClass, string routeIdFieldName, esriUnits routeMeasureUnit) { IRouteLocatorName routeLocatorName = new RouteMeasureLocatorNameClass { RouteFeatureClassName = featureClass.FullName, RouteIDFieldName = routeIdFieldName, RouteMeasureUnit = routeMeasureUnit }; var rtLocator = (IRouteLocator2)((IName)routeLocatorName).Open(); return(rtLocator); }
/// <summary> /// Gets the name of the route measure locator. /// </summary> /// <param name="source">The source.</param> /// <param name="routeIDFieldName">Name of the route identifier field.</param> /// <param name="routeMeasureUnit">The route measure unit.</param> /// <param name="routeIDIsUnique">if set to <c>true</c> the route identifier is unique.</param> /// <param name="routeWhereClause">The route where clause.</param> /// <returns></returns> private IRouteLocatorName GetRouteMeasureLocatorName(IFeatureClass source, string routeIDFieldName, esriUnits routeMeasureUnit, bool routeIDIsUnique, string routeWhereClause) { IRouteLocatorName locatorName = new RouteMeasureLocatorNameClass(); locatorName.RouteFeatureClassName = ((IDataset)source).FullName; locatorName.RouteMeasureUnit = routeMeasureUnit; locatorName.RouteIDFieldName = routeIDFieldName; locatorName.RouteIDIsUnique = routeIDIsUnique; locatorName.RouteWhereClause = routeWhereClause ?? ""; return(locatorName); }
/// <summary> /// get RouteLocator /// </summary> /// <param name="featureClass">object feature class</param> /// <param name="routeIDFieldNameValue">value of routeIDFieldName</param> /// <param name="routeMeasureUnit">unit of route measure</param> /// <returns>object IRouteLocator2</returns> private static IRouteLocator2 GetRouteLocator(IFeatureClass featureClass, string routeIDFieldNameValue, esriUnits routeMeasureUnit) { IDataset dataset = featureClass as IDataset; IName nameDataset = dataset.FullName; IRouteLocatorName routeMeasureLocatorName = new RouteMeasureLocatorNameClass(); routeMeasureLocatorName.RouteFeatureClassName = nameDataset; routeMeasureLocatorName.RouteIDFieldName = routeIDFieldNameValue; routeMeasureLocatorName.RouteMeasureUnit = routeMeasureUnit; routeMeasureLocatorName.RouteWhereClause = string.Empty; nameDataset = (IName)routeMeasureLocatorName; return(nameDataset.Open() as IRouteLocator2); }
// TODO: make routeIdFieldName configurable instead of hard-coded. public static IRouteLocator2 GetRouteLocator(this IServerObjectHelper serverObjectHelper, long layerId, string routeIdFieldName) { var server = (IMapServer4)serverObjectHelper.ServerObject; var serverDataAccess = (IMapServerDataAccess)server; var dataSet = (IDataset)serverDataAccess.GetDataSource(server.DefaultMapName, Convert.ToInt32(layerId)); var name = dataSet.FullName; IRouteLocatorName routeLocatorName = new RouteMeasureLocatorNameClass { RouteFeatureClassName = name, RouteIDFieldName = routeIdFieldName, RouteMeasureUnit = esriUnits.esriMiles }; name = (IName)routeLocatorName; var routeLocator = (IRouteLocator2)name.Open(); return(routeLocator); }
/// <summary> /// 线性参考代码 /// </summary> /// <param name="_pRouteFC"></param> /// <param name="_pPKName"></param> /// <param name="_pID"></param> /// <param name="_pFrom"></param> /// <param name="_pTo"></param> /// <returns></returns> IPolyline FindRoutByMeasure(IFeatureClass _pRouteFC, string _pPKName,object _pID, double _pFrom, double _pTo) { 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(); IRouteLocation pRouteLoc = new RouteMeasureLineLocationClass(); pRouteLoc.MeasureUnit = esriUnits.esriFeet; pRouteLoc.RouteID = _pID; IRouteMeasureLineLocation rMLineLoc = (IRouteMeasureLineLocation)pRouteLoc; rMLineLoc.FromMeasure = _pFrom; rMLineLoc.ToMeasure = _pTo; IGeometry pGeo = null; esriLocatingError locError; pRouteLocator.Locate(pRouteLoc , out pGeo, out locError); return pGeo as IPolyline; }
/// <summary> /// 动态分段,作者:刘宇 /// </summary> /// <param name="_pRouteFC"></param> /// <param name="_pPKName"></param> /// <param name="_pEventTable"></param> /// <param name="_pFKName"></param> /// <param name="_pFrom"></param> /// <param name="_pTo"></param> /// <returns></returns> IFeatureClass EventTable2FeatureClass(IFeatureClass _pRouteFC, string _pPKName, ITable _pEventTable, string _pFKName, string _pFrom, string _pTo) { 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; IRouteEventProperties2 pRouteProp = new RouteMeasureLinePropertiesClass(); pRouteProp.AddErrorField = true; pRouteProp.EventMeasureUnit = esriUnits.esriFeet; pRouteProp.EventRouteIDFieldName = _pFKName; IRouteMeasureLineProperties rMLineProp = (IRouteMeasureLineProperties)pRouteProp; rMLineProp.FromMeasureFieldName = _pFrom; rMLineProp.ToMeasureFieldName = _pTo; IDataset pDs = (IDataset)_pEventTable; IName pNTableName = pDs.FullName; IRouteEventSourceName pRouteEventSourceName = new RouteEventSourceNameClass(); pRouteEventSourceName.EventTableName = pNTableName; pRouteEventSourceName.EventProperties = (IRouteEventProperties)pRouteProp; pRouteEventSourceName.RouteLocatorName = pRouteLocatorName; pName = (IName)pRouteEventSourceName; IFeatureClass pFeatureClass = (IFeatureClass)pName.Open(); return pFeatureClass; }