如何在arcgis中生成arcgis创建网络数据集集

ArcGIS教程:创建网络数据集_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ArcGIS教程:创建网络数据集
上传于||文档简介
&&A​r​c​G​I​S​教​程​:​创​建​网​络​数​据​集
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢君,已阅读到文档的结尾了呢~~
【最新精选】arcgis中网络数据集的建立,arcgis建立网络数据集,arcgis网络数据集,arcgis创建网络数据集,建立网络数据集,arcgis数据库建立,arcgis建立拓扑关系,arcgis建立缓冲区,arcgis建立空间数据库,arcgis10建立缓冲区
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
【最新精选】arcgis中网络数据集的建立
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口ArcGIS教程:什么是网络数据集?_地理国情监测云平台_天涯博客
地理国情监测云平台()是以土地利用、生态环境、灾害监测、社会经济和气象气候等系列数据产品为核心,跨领域的集数据查询、检索、交换及共享发布为一体的综合性云服务平台。
今日访问:[$DayVisitCount$]
总访问量:13558
开博时间:
博客排名:86993
(12)(11)(1)(20)(18)(18)(28)(38)(37)(16)(30)(22)(62)(40)(43)
  &&网络数据集非常适合于构建交通网络。它们由包含了简单要素&(线和点)&和转弯要素的源要素创建而成,而且存储了源要素的连通性。使用&ArcGIS&Network&Analyst&扩展模块执行分析时,该分析始终作用于网络数据集。
&&下图显示了如何由网络数据集构建街道网络。图形中高亮显示了可以构建的单行道、转弯限制和天桥/隧道。对网络执行的分析(例如从停靠点&1&到停靠点&2&的路径)将遵照这些属性和其他网络数据集属性。
&&为了理解连通性及其重要性,假设要素相互之间通常不能识别。如,两个线要素相交时,任何一条线都不能识别到另一条线。类似地,线要素末端的点要素也不具有能识别线要素的任何固有信息。而网络数据集则会对重合的源要素进行追踪。而且它还具有连通性策略,可进一步定义哪些重合要素是真正连接在一起的(您可以修改该策略)。这样无需将道路连接到一起,就可以构建天桥和地下通道。因此,执行网络分析时,求解程序就会知道沿该网络的哪些路径是可行的。
&&多模式网络数据集
&&诸如多模式交通网络之类的更复杂的连通性情况也是可能的。下面是一个位于巴黎市区的交通网络示例,其中显示了公路、铁路和公交网。
&&网络数据集还有一个丰富的网络属性模型,它有助于为该网络构建阻抗、约束和等级。
&&工作空间
&&在&ARC/INFO&中,可使用&Coverage&动态创建网络。在&ArcView&GIS&中,首次对线&shapefile&运行网络分析功能时将创建一个永久性网络。在&ArcGIS&中,网络数据集可存储这个永久性网络。您可使用网络数据集保存此网络、修改其属性以及构建多种不同的网络。
&&创建网络数据集时有几种选择。最佳选择是通过地理数据库的要素数据集中的要素类创建网络数据集。由于一个要素数据集可以与多个要素类一起存储并可轻松地与这些要素类进行通信,因此网络数据集可以支持多个源并构建多模式网络。基于&shapefile&的网络数据集可为&ArcView&GIS&用户提供快速迁移其数据的机会。shapefile&网络数据集可通过包含网络源(例如街道网络)的折线&shapefile&创建,也可通过&shapefile&转弯要素类创建。此类网络数据集不能支持多个边源,也不能用于构建多模式网络。
&&ArcGIS&Network&Analyst&扩展模块还可读取&SDC&网络数据集。这使您可以对供应商所提供的&SDC&数据执行网络分析,而不必创建其自己的网络数据集。
&&&以上教程来源,更多ArcGIS教程及空间地理信息数据请咨询本平台,电话:010-8。分类: |Arcengine实现创建网络数据集札记(二) - 明基奶茶 - 推酷
Arcengine实现创建网络数据集札记(二) - 明基奶茶
四 ArcEngine实现创建网络数据集
&&&&& ArcEngine创建网络数据集的过程,与ArcMap设置的过程类似,主要通过六个步骤即可以实现。
&&&&& 1 定义网络数据集对象,并设置基本属性,包括网络数据集名称,空间参考,空间范围等内容。
&&&&& 关键代码如下:
/// &summary&
/// 创建网络数据集对象
/// &/summary&
/// &param name=&featureDataset&&包含网络数据集的空间要素集&/param&
/// &param name=&NetworkName&&网络数据集名称&/param&
/// &returns&边线网络数据集&/returns&
public IDENetworkDataset CreateNetworkDataset(IFeatureDataset featureDataset, string NetworkName)
&&&&&&&& if (string.IsNullOrEmpty(NetworkName)||null==featureDataset)
&&&&&&&& {
&&&&&&&&&&&&&&
&&&&&&&& }
&&&&&&& //定义边线网络数据集对象
&&&&&&&& IDENetworkDataset deNetworkDataset = new DENetworkDatasetClass();
&&&&&&&& // 转换为 IGeoDataset 接口
&&&&&&&& IGeoDataset geoDataset = (IGeoDataset)featureD
&&&&&&&& // 设置数据集的空间参考和空间范围
&&&&&&&& IDEGeoDataset deGeoDataset = (IDEGeoDataset)deNetworkD
&&&&&&&& deGeoDataset.Extent = geoDataset.E
&&&&&&&& deGeoDataset.SpatialReference = geoDataset.SpatialR
&&&&&&&& // 设置名称
&&&&&&&& IDataElement dataElement = (IDataElement)deNetworkD
&&&&&&&& dataElement.Name = NetworkN
&&&&&&& // 设置为可创建
&&&&&&& pDENetworkDataset.Buildable =
&&&&&&& //设置数据集类型
&&& &&& pDENetworkDataset.NetworkType = esriNetworkDatasetType.esriNDTG
&&&&&&& return deNetworkD
&&&& 2 创建数据源对象;
&&&& 关键代码如下:
/// &summary&
/// 创建网络源对象
/// &/summary&
/// &param name=&FeatureClassName&&参与网络数据集的空间要素类名称&/param&
/// &returns&源&/returns&
public INetworkSource CreateEdgeFeatureNetworkSource(string FeatureClassName)
&&&&&&&& INetworkSource pEdgeNetworkSource = new EdgeFeatureSourceClass();
&&&&&&&& pEdgeNetworkSource.Name = FeatureClassN
&&&&&&&& //设置类型
&&&&&&&& pEdgeNetworkSource.ElementType = esriNetworkElementType.esriNETE
&&&&&&&& return pEdgeNetworkS
&&&&& 3 设置数据源的属性,主要包括连通性策略,源对象方向;
&&&&& 关键代码如下:
/// &summary&
/// 设置源的连通性,不使用字段值设置
/// &/summary&
/// &param name=&pEdgeNetworkSource&&源对象&/param&
public void SetNetworkSourcewithoutSubtypes(INetworkSource pEdgeNetworkSource)
&&&&&&&& // 源的连通性
&&&&&&& IEdgeFeatureSource pEdgeFeatureSource = (IEdgeFeatureSource)pEdgeNetworkS
&&&&&&& //不使用子类
&&&&&&& pEdgeFeatureSource.UsesSubtypes =
&&&&&&&& //分组
&&&&&&&& pEdgeFeatureSource.ClassConnectivityGroup = 1;
& & & & //使用节点参与
&&&&&&& pEdgeFeatureSource.ClassConnectivityPolicy = esriNetworkEdgeConnectivityPolicy.esriNECPEndV
/// &summary&
/// 设置源对象的方向
/// &/summary&
/// &param name=&StreetFieldName&&道路属性名&/param&
/// &param name=&EdgeNetworkSource&&源对象&/param&
private void SetNetworkSourceDirections(string StreetFieldName, INetworkSource EdgeNetworkSource)
&&&&&&&&&&& // 创建道路名字段类对象
&&&&&&&&& & IStreetNameFields streetNameFields = new StreetNameFieldsClass();
&&&&&&&&& & streetNameFields.Priority = 1;
&&&&&&&&&&& // 设置名称
&&&&&&&&& & streetNameFields.StreetNameFieldName = StreetFieldN
&&&&&&&&&& //添加到集合中
&&&&&&&& & IArray nsdArray = new ArrayClass();
&&&&&&&&&& nsdArray.Add(streetNameFields);
&&&&&&&&&& //创建网络方向对象
&&&&&&&&& & INetworkSourceDirections nsDirections = new NetworkSourceDirectionsClass();
&&&&&&&&&&& nsDirections.StreetNameFields = nsdA
&&&&&&&&&&& //设置源对象的网络方向
&&&&&&&&&&& EdgeNetworkSource.NetworkSourceDirections = nsD
&&&&&&& 4 设置网络数据集的属性,对应ArcMap创建网络数据集的第六步设置;
&&&&&&& 关键代码如下:
/// &summary&
/// 网络权重属性设置,多个源参与同一个网络数据集属性的设置
/// &/summary&
/// &param name=& SourceLst &&参与的所有源对象&/param&
/// &param name=&AttributeName&&属性名称&/param&
/// &param name=&Expression&&设置表达式&/param&
/// &param name=&PreLogic&&设置逻辑表达式,可空&/param&
/// &returns&&/returns&
private IEvaluatedNetworkAttribute CreateNetworkSourceAttribute(List&INetworkSource& SourceLst, string AttributeName, string Expression, string PreLogic)
&&&&&&&&& //定义变量
&&&&&&&&& IEvaluatedNetworkAttribute pEvalNetA
&&&&&&&&& INetworkAttribute2 pNetAttr2;
&&&&&&&&& INetworkFieldEvaluator pNetFieldE
&&&&&&&&& INetworkConstantEvaluator pNetConstE
&&&&&&&&& pEvalNetAttr = new EvaluatedNetworkAttributeClass();
&&&&&&&&& pNetAttr2 = (INetworkAttribute2)pEvalNetA
&&&&&&&&& pNetAttr2.Name = AttributeN
&&&&&&&& //计算类型
&&&&&&&&& pNetAttr2.UsageType = esriNetworkAttributeUsageType.esriNAUTC
&&&&&&&&& //数值类型&&&&&
&&&&&&&&& pNetAttr2.DataType = esriNetworkAttributeDataType.esriNADTD
&&&&&&&&& //单位类型
&&&&&&&&& pNetAttr2.Units = esriNetworkAttributeUnits.esriNAUM
&&&&&&&&& pNetAttr2.UseByDefault =
&&&&&&&&& //计算表达式
&&&&&&&&& pNetFieldEval = new NetworkFieldEvaluatorClass();
&&&&&&&&& pNetFieldEval.SetExpression(Expression, PreLogic);
&&&&&&&&& //参与的每个源的计算表达式设置
&&&&&&&&& SourceLst.ForEach(pEdgeNetworkSource =&
&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& //正向计算表达式
&&&&&&&&&&&&&&&&&& &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);
&&&&&&&& return pEvalNetA
&&&&&& 5 设置网络数据集的方向;
&&&&&& 关键代码如下:
/// &summary&
/// 指定网络数据集的方向属性
/// &/summary&
/// &param name=&deNetworkDataset&&网络数据集&/param&
/// &param name=&UnitsType&&单位类型&/param&
/// &param name=&LengthAttribute&& 创建的长度属性的名称&/param&
/// &param name=&TimeAttribute&& 创建的时间属性名称,可空&/param&
/// &param name=&RoadClassAttribute&&创建的道路类型属性名称,可空&/param&
public void SetNetworkDirction(IDENetworkDataset deNetworkDataset,esriNetworkAttributeUnits UnitsType, string LengthAttribute, string TimeAttribute, string RoadClassAttribute)
&&&&&&&&&&&& // 创建网络方向对象
&&&&&&&&& && INetworkDirections networkDirections = new NetworkDirectionsClass();
&&&&&&&&&&&& networkDirections.DefaultOutputLengthUnits = UnitsT
&&&&&&&&&&&&& //设置长度属性
&&&&&&&&&&&&& if (!string.IsNullOrEmpty(LengthAttribute))
&&&&&&&&& && {
&&&&&&&&&&&&&&&&&& &networkDirections.LengthAttributeName = LengthA
&&&&&&&&&&&&&& }
&&&&&&&&&&&& //设置时间属性
&&&&&&&&&&&&&& if (!string.IsNullOrEmpty(TimeAttribute))
&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&& &networkDirections.TimeAttributeName = TimeA
&&&&&&&&& && }
& & & & & && //设置道路类型属性
&&&&&&&&&&&& if (!string.IsNullOrEmpty(RoadClassAttribute))
&&&&&&&&& && {
&&&&&&&&&&&&&&&&&& &networkDirections.RoadClassAttributeName = RoadClassA
&&&&&&&&& && }
&&&&&&&&&& // 设置网络数据集的方向属性
&&&&&&&&&& deNetworkDataset.Directions = networkD
&&&&& 6 建立网络数据集;
&&&&& 关键代码如下:
/// &summary&
/// 根据网络节点信息,创建网络数据集对象
/// &/summary&
/// &param name=&_pFeatureDataset&&包含网络数据集的空间数据集&/param&
/// &param name=&_pDENetDataset&&源网络&/param&
/// &returns&&/returns&
public INetworkDataset CreateBuildingDataset(IFeatureDataset _pFeatureDataset, IDENetworkDataset2 _pDENetDataset)
&&&&&&&&&&&&&&&&&& IFeatureDatasetExtensionContainer pFeatureDatasetExtensionContainer =& (IFeatureDatasetExtensionContainer)_pFeatureD
&&&&&&&&&&&&&&&&&& IFeatureDatasetExtension pFeatureDatasetExtension =& pFeatureDatasetExtensionContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);
&&&&&&&&&&&&&&&&&& IDatasetContainer2 pDatasetContainer2 =& (IDatasetContainer2)pFeatureDatasetE
&&&&&&&&&&&&&&&&&& IDEDataset pDENetDataset = (IDEDataset)_pDENetD
&&&&&&&&&&&&&&&&&& //创建网络数据集
&&&&&&&&&&&&&&&&&& INetworkDataset pNetworkDataset =& (INetworkDataset)pDatasetContainer2.CreateDataset(pDENetDataset);
&&&&&&&&&&&&&&&&&& return pNetworkD
/// &summary&
/// 生成网络数据集
/// &/summary&
/// &param name=&networkDataset&&网络数据集&/param&
/// &param name=&geoDataset&&空间数据集&/param&
public bool BuildNetwork(INetworkDataset networkDataset, featureDataset)
&&&&&&&&& && // 空间数据集转换为IGeoDataset 接口
&&&&&&&&&&& IGeoDataset geoDataset = (IGeoDataset)featureD
&&&&& & & && if (null==geoDataset)
&&&&&&&&& &&& {
&&&&&&&&&&&&&&&&&& &&&
&&&&&&&&&&&&&&& }
&&&&&&&&& & INetworkBuild networkBuild = (INetworkBuild)networkD
&&&&&&&&&& //构建网络数据集
&&&&&&&&&& networkBuild.BuildNetwork(geoDataset.Extent);
&&&&&&&&& &
五 遇到的难题与解决过程
&&&&& ArcEngine创建网络数据集过程中,遇到一些问题,主要是两部分原因,一是扩展许可问题,二是属性值设置的问题。
&&&&& 1 扩展许可问题:
项目开发过程中,注意到了许可初始化的问题,通过代码实现ArcEngine许可初始化。但是,在IDatasetContainer2接口执行CreateDataset方法时,报错"异常来自HRESULT:0x”。
该异常产生的原因是,由于网络数据集创建功能接口的实现,需要ArcEngine扩展许可初始化,即调用IAoInitialize 接口的CheckOutExtension方法,注册空间分析的扩展许可。
2 属性值设置问题:
1)官网的样例代码对于创建网络数据集属性接口IEvaluatedNetworkAttribute时,都是针对当个参与源对象INetworkSource进行设置的。如果多个源对象参与设置同一个IEvaluatedNetworkAttribute接口设置时,需要遍历每个源对象进行设置。
关键代码段如下:
//参与的每个源的计算表达式设置
&&&&&&&&& SourceLst.ForEach(pEdgeNetworkSource =&
&&&&&&&&& {
&&& & & & & & & & && //正向计算表达式
&&&&&&&&&&&&&&&&&& &pEvalNetAttr.set_Evaluator(pEdgeNetworkSource,& esriNetworkEdgeDirection.esriNEDAlongDigitized, (INetworkEvaluator)pNetFieldEval);
&&&&&&&&&&&&&&&&&&&& //反向计算表达式
&&&&&&&&&&&&&&&&&&&& pEvalNetAttr.set_Evaluator(pEdgeNetworkSource,& esriNetworkEdgeDirection.esriNEDAgainstDigitized, (INetworkEvaluator)pNetFieldEval);
&&&&&&&&& });
&&&&& 2)创建的网络数据集属性IEvaluatedNetworkAttribute,是用在设置网络数据集的方向属性,需要保证名称一致。
&&&&& 例如,定义了名称为“Length”的IEvaluatedNetworkAttribute对象,在设置网络数据集的长度属性为该定义的对象时,需要把INetworkDirections接口的LengthAttributeName属性设置为“Length”。这样,网络数据集在计算长度属性时,根据已定义的接口计算。否则,会报错“The network attribute name is invalid”。
未完待续......
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致(地理国情监测)
(地理国情监测)
(地理国情监测)
(地理国情监测)
(地理国情监测)
第三方登录:

我要回帖

更多关于 arcgis新建网络数据集 的文章

 

随机推荐