• 创建网络数据集


    /// <summary>
    /// 创建自定义网络数据集
    /// </summary>
    /// <param name="_pWsName"></param>
    /// <param name="_pDatasetName"></param>
    /// <param name="_pNetName"></param>
    /// <param name="_pFtName"></param>

    void CreateNetworkDataset(string _pWsName, string _pDatasetName,string _pNetName, string _pFtName)
    {
      IDENetworkDataset pDENetworkDataset = new DENetworkDatasetClass();
      pDENetworkDataset.Buildable = true;
      IWorkspace pWs = GetWorkspace(_pWsName);
      IFeatureWorkspace pFtWs = pWs as IFeatureWorkspace;
      IFeatureDataset pFtDataset = pFtWs.OpenFeatureDataset(_pDatasetName);

      // 定义空间参考,负责会出错
      IDEGeoDataset pDEGeoDataset = (IDEGeoDataset)pDENetworkDataset;

      IGeoDataset pGeoDataset = pFtDataset as IGeoDataset;
      pDEGeoDataset.Extent = pGeoDataset.Extent;
      pDEGeoDataset.SpatialReference = pGeoDataset.SpatialReference;

      // 网络数据集的名称
      IDataElement pDataElement = (IDataElement)pDENetworkDataset;
      pDataElement.Name = _pNetName;

      // 参加建立网络数据集的要素类
      INetworkSource pEdgeNetworkSource = new EdgeFeatureSourceClass();
      pEdgeNetworkSource.Name = _pFtName;
      pEdgeNetworkSource.ElementType = esriNetworkElementType.esriNETEdge;

      // 要素类的连通性
      IEdgeFeatureSource pEdgeFeatureSource = (IEdgeFeatureSource)pEdgeNetworkSource;
      pEdgeFeatureSource.UsesSubtypes = false;
      pEdgeFeatureSource.ClassConnectivityGroup = 1;

      pEdgeFeatureSource.ClassConnectivityPolicy =esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex;

      //不用转弯数据
      pDENetworkDataset.SupportsTurns = false;
      IArray pSourceArray = new ArrayClass();
      pSourceArray.Add(pEdgeNetworkSource);
      pDENetworkDataset.Sources = pSourceArray;

      //网络数据集的属性设置

      IArray pAttributeArray = new ArrayClass();

      // Initialize variables reused when creating attributes:
      IEvaluatedNetworkAttribute pEvalNetAttr;
      INetworkAttribute2 pNetAttr2;
      INetworkFieldEvaluator pNetFieldEval;
      INetworkConstantEvaluator pNetConstEval;

      pEvalNetAttr = new EvaluatedNetworkAttributeClass();
      pNetAttr2 = (INetworkAttribute2)pEvalNetAttr;
      pNetAttr2.Name ="Meters";
      pNetAttr2.UsageType = esriNetworkAttributeUsageType.esriNAUTCost;
      pNetAttr2.DataType = esriNetworkAttributeDataType.esriNADTDouble;
      pNetAttr2.Units = esriNetworkAttributeUnits.esriNAUMeters;
      pNetAttr2.UseByDefault = false;

      pNetFieldEval = new NetworkFieldEvaluatorClass();
      pNetFieldEval.Setexpression_r("[METERS]", "");
      //方向设置
      pEvalNetAttr.set_Evaluator(pEdgeNetworkSource,esriNetworkEdgeDirection.esriNEDAlongDigitized, (INetworkEvaluator)pNetFieldEval);
      pEvalNetAttr.set_Evaluator(pEdgeNetworkSource,esriNetworkEdgeDirection.esriNEDAgainstDigitized, (INetworkEvaluator)pNetFieldEval);


      pNetConstEval = new NetworkConstantEvaluatorClass();
      pNetConstEval.ConstantValue = 0;
      pEvalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETEdge,(INetworkEvaluator)pNetConstEval);
      pEvalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETJunction,(INetworkEvaluator)pNetConstEval);
      pEvalNetAttr.set_DefaultEvaluator(esriNetworkElementType.esriNETTurn,(INetworkEvaluator)pNetConstEval);

      // 一个网络数据集可以有多个属性,我只添加了一个
      pAttributeArray.Add(pEvalNetAttr);
      pDENetworkDataset.Attributes = pAttributeArray;

      // 创建网络数据集,注意在创建几何网络的时候会锁定相应的要素类,因此不要用ArcMap或者catalog等打开参相应的数据
      INetworkDataset pNetworkDataset = Create(pFtDataset, pDENetworkDataset);

      //建立网络
      INetworkBuild pNetworkBuild = (INetworkBuild)pNetworkDataset;
      pNetworkBuild.BuildNetwork(pGeoDataset.Extent);
    }


    /// <summary>
    /// 创建无向网络
    /// </summary>
    /// <param name="_pFeatureDataset"></param>
    /// <param name="_pDENetDataset"></param>
    /// <returns></returns>
    public INetworkDataset Create(IFeatureDataset _pFeatureDataset, IDENetworkDataset2  _pDENetDataset)
    {
          IFeatureDatasetExtensionContainer pFeatureDatasetExtensionContainer = (IFeatureDatasetExtensionContainer) _pFeatureDataset;
          IFeatureDatasetExtension pFeatureDatasetExtension = pFeatureDatasetExtensionContainer.FindExtension (esriDatasetType.esriDTNetworkDataset);
          IDatasetContainer2 pDatasetContainer2 = (IDatasetContainer2)pFeatureDatasetExtension;
          IDEDataset pDENetDataset = (IDEDataset)_pDENetDataset;
          INetworkDataset pNetworkDataset = (INetworkDataset)pDatasetContainer2.CreateDataset(pDENetDataset);
       return pNetworkDataset

    }

  • 相关阅读:
    dp第三题
    近期(2012/5/15)
    HTML5 地理位置定位(HTML5 Geolocation)原理及应用【转】
    xml 中如何正确使用 & 符号
    Python进阶07 函数对象【转】
    Android 快捷小工具
    解决数据库乱码问题【转】
    Android APK反编译详解(附图)
    字符串转日期【20080808080808】
    HTML+5+从入门到精通
  • 原文地址:https://www.cnblogs.com/vichang/p/6061001.html
Copyright © 2020-2023  润新知