• 创建路径(c#)动态分段


    public void CreateRoutesUsing2Fields(string sAccessWS, string sLineFC, string sOutRouteFC, string sWhereClause, string sRouteIDField, string sFromMeasureField, string sToMeasureField)
            {
                try
                {
                    //  VARIABLES
                    //  sAccessWS - access workspace (i.e. "http://www.cnblogs.com/zuiyirenjian/admin/file://burt/data/dyndata/pitt.mdb")
                    //  sLineFC - the input line feature class ("base_roads")
                    //  sOutRouteFC - the output route feature class name ("routes")
                    //  sWhereClause - query filter for line feature class if needed (i.e. "[RKey] <> 0")
                    //  sRouteIDField - route ID field (i.e "Rkey")
                    //  sFromMeasureField - the from-measure field (i.e. "BegMP")
                    //  sToMeasureField - the to-measure field (i.e "EndMP")
     
                    //Get the line feature class
                    IWorkspaceFactory wsf = new AccessWorkspaceFactoryClass();
                    IWorkspace ws = wsf.OpenFromFile(sAccessWS, 0);
                    IFeatureWorkspace fws = (IFeatureWorkspace)ws;
                    IFeatureClass lineFC = fws.OpenFeatureClass(sLineFC);
     
                    // Create an output feature class name object. We'll write to a stand alone feature class in the
                    // the same workspace as the inputs
                    IDataset ds = (IDataset)ws;
                    IWorkspaceName outWSN = (IWorkspaceName)ds.FullName;
                    IFeatureClassName outFCN = new FeatureClassNameClass();
                    IDatasetName outDSN = (IDatasetName)outFCN;
                    outDSN.WorkspaceName = outWSN;
                    outDSN.Name = sOutRouteFC; //This name should not already exist
     
                    // Create a geometry definition for the new feature class. For the most part, we will copy the geometry
                    // definition from the input lines. We'll explicitly set the M Domain, however. You should always set an
                    // M Domain that is appropriate to your data. What is below is just a sample.
                    IFields flds = lineFC.Fields;
                    Int32 i = flds.FindField(lineFC.ShapeFieldName);
                    IField fld = flds.get_Field(i);
                    IClone GDefclone = (IClone)fld.GeometryDef;
                    IGeometryDef gDef = (IGeometryDef)GDefclone.Clone();
                    ISpatialReference2 srRef = (ISpatialReference2)gDef.SpatialReference;
                    srRef.SetMFalseOriginAndUnits(-1000, 10000);

                    // Create a selection set to limit the number of lines that will be used to create routes
                    IQueryFilter qFilt = new QueryFilterClass();
                    qFilt.WhereClause = sWhereClause;
                    ISelectionSet2 selSet = (ISelectionSet2)lineFC.Select(qFilt, esriSelectionType.esriSelectionTypeIDSet, esriSelectionOption.esriSelectionOptionNormal, ws);
     
                    // Create a new RouteMeasureCreator object. Note that below, we use the selection set and not the
                    // InputFeatureClass property
                    IRouteMeasureCreator routeCreator = new RouteMeasureCreatorClass();
                    routeCreator.InputFeatureSelection = selSet;
                    routeCreator.InputRouteIDFieldName = sRouteIDField;
                    IEnumBSTR errors = routeCreator.CreateUsing2Fields(sFromMeasureField, sToMeasureField, outFCN, gDef, "", null);
     
                    // The results of running CreatingUsing2Fields returns IEnumBSTR, which is a container
                    // for a list of error strings indicating why certain lines could not be used to create routes.
                    string sError = errors.Next();
                    do
                    {
                        System.Windows.Forms.MessageBox.Show(sError);
                        sError = errors.Next();
                    } while (sError.Length != 0);
                }
                catch(Exception e)
                {
                    System.Windows.Forms.MessageBox.Show(e.Message);
                }

  • 相关阅读:
    设计模式:单一职责原则
    多线程的创建
    Android开发基础(java)14
    面向对象编程的思想(6)
    面向对象编程的思想(5)未完成
    面向对象编程的思想(4)
    面向对象编程的思想(3)
    面向对象编程的思想(2)
    面向对象编程的思想(1)
    GDB 命令详细解释
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/1898994.html
Copyright © 2020-2023  润新知