构建网络数据集(c#)

简介: 二次开发就是搭积木,但是这种积木在AO中可以成为接口,那么我们二次开发就要想实现我们功能的相关接口组合起来, ArcGIS中有两种网络,无向网络和有向网络,我在这里讨论是无向网络,网络是用来模拟现实世界中的如交通道路等,这也是GIS中的一个精华,ArcGIS中用一组要素对现实世界中的网络进行抽象,比如用线要素来模拟边,用点要素模拟交汇点等,而网络不是要素,是又相关的要素构建而成的“逻辑图“,所有的分析都是在这个逻辑图上进行的,也可以说这个逻辑图是由相互关联的要素结合一定的规则,派生出来的。

二次开发就是搭积木,但是这种积木在AO中可以成为接口,那么我们二次开发就要想实现我们功能的相关接口组合起来,

ArcGIS中有两种网络,无向网络和有向网络,我在这里讨论是无向网络,网络是用来模拟现实世界中的如交通道路等,这也是GIS中的一个精华,ArcGIS中用一组要素对现实世界中的网络进行抽象,比如用线要素来模拟边,用点要素模拟交汇点等,而网络不是要素,是又相关的要素构建而成的“逻辑图“,所有的分析都是在这个逻辑图上进行的,也可以说这个逻辑图是由相互关联的要素结合一定的规则,派生出来的。而在ArcGIS中无向网络可以有shpfile创建也可以由geodatabase中的数据集创建,而有向网络智能由后者。

对ArcMap的熟练程度有助于我们更快速的开发,我们用网络分析的时候,第一步干什么,第二步干什么……也就是这个流程的熟练程度对我们开发是很有帮助的,下面我们用代码来说明下,因为这个代码很长,我只说明原理等

重要接口Inetworkbuild,利用开发帮助也是一种技巧,这种技巧就好比我们遇到问题了Google下。

步骤一 创建网络数据集

IDENetworkDataset deNetworkDataset = new DENetworkDatasetClass();

deNetworkDataset.Buildable = true;

 

// Open the shapefile and cast to the IGeoDataset interface.

IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();

IWorkspace workspace = workspaceFactory.OpenFromFile(@

    "C:\Program Files\ArcGIS\DeveloperKit\SamplesNET\data\CreateNetworkDataset", 0);

IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;

IFeatureClass featureClass = featureWorkspace.OpenFeatureClass("Streets");

IGeoDataset geoDataset = (IGeoDataset)featureClass;

 

IDEGeoDataset deGeoDataset = (IDEGeoDataset)deNetworkDataset;

deGeoDataset.Extent = geoDataset.Extent;

deGeoDataset.SpatialReference = geoDataset.SpatialReference;

 

// Specify the name of the network dataset.

IDataElement dataElement = (IDataElement)deNetworkDataset;

dataElement.Name = "Streets_ND";

步骤二:

刚才我们创建了网络,但是并没有和相关的要素关联

网络数据集建立了,我们说过网络数据集中应该包含相互关联的要素,而这种主要体现在边和交汇点这两个之上,同时还有一定的规则,比如道路的联通规则,所以我刚才说了逻辑图是由相互关联的要素结合一定的规则,派生出来的


[C#]

// Create a new EdgeFeatureSource object and point it to the Streets shapefile.

IEdgeFeatureSource streetsEdgeFeatureSource = new EdgeFeatureSourceClass();

INetworkSource streetsNetworkSource = (INetworkSource)streetsEdgeFeatureSource;

streetsNetworkSource.Name = "Streets";

streetsNetworkSource.ElementType = esriNetworkElementType.esriNETEdge;

 

// Set the connectivity settings for the edge feature source.

streetsEdgeFeatureSource.UsesSubtypes = false;

streetsEdgeFeatureSource.ClassConnectivityGroup = 1;

streetsEdgeFeatureSource.ClassConnectivityPolicy =

    esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex;

streetsEdgeFeatureSource.FromElevationFieldName = "F_ZLEV";

streetsEdgeFeatureSource.ToElevationFieldName = "T_ZLEV";

ArcGIS的强大在于他能跟准确的模拟这个显示,通过搞成字段可以区分立交桥


图片

步骤三,方向设置

// Create a StreetNameFields object and populate its settings.

IStreetNameFields streetNameFields = new StreetNameFieldsClass();

streetNameFields.Priority = 1; // Priority 1 indicates the primary street name.

streetNameFields.PrefixDirectionFieldName = "PREFIX";

streetNameFields.PrefixTypeFieldName = "PRE_TYPE";

streetNameFields.StreetNameFieldName = "NAME";

streetNameFields.SuffixTypeFieldName = "TYPE";

streetNameFields.SuffixDirectionFieldName = "SUFFIX";

 

// Add the StreetNameFields object to a new NetworkSourceDirections object,

// then add it to the EdgeFeatureSource created earlier.

INetworkSourceDirections networkSourceDirections = new NetworkSourceDirectionsClass()

    ;

IArray streetNameFieldsArray = new ArrayClass();

streetNameFieldsArray.Add(streetNameFields);

networkSourceDirections.StreetNameFields = streetNameFieldsArray;

streetsNetworkSource.NetworkSourceDirections = networkSourceDirections;

 

// Add the EdgeFeatureSource object to the data element as a source in the network dataset.

IArray sourceArray = new ArrayClass();

sourceArray.Add(streetsEdgeFeatureSource);

deNetworkDataset.Sources = sourceArray;

 

步骤四,可以有turn,也可以没有

 

步骤五 网络权重设置

// Create a new EvaluatedNetworkAttribute object and populate its settings.

IEvaluatedNetworkAttribute minutesEvaluatedNetworkAttribute = new

    EvaluatedNetworkAttributeClass();

INetworkAttribute2 minutesNetworkAttribute2 = (INetworkAttribute2)

    minutesEvaluatedNetworkAttribute;

minutesNetworkAttribute2.Name = "Minutes";

minutesNetworkAttribute2.UsageType = esriNetworkAttributeUsageType.esriNAUTCost;

minutesNetworkAttribute2.DataType = esriNetworkAttributeDataType.esriNADTDouble;

minutesNetworkAttribute2.Units = esriNetworkAttributeUnits.esriNAUMinutes;

minutesNetworkAttribute2.UseByDefault = true;

 

// Create evaluator objects and set them on the EvaluatedNetworkAttribute object.

INetworkFieldEvaluator minutesFTNetworkFieldEvaluator = new

    NetworkFieldEvaluatorClass();

minutesFTNetworkFieldEvaluator.SetExpression("[FT_Minutes]", "");

INetworkEvaluator minutesFTNetworkEvaluator = (INetworkEvaluator)

    minutesFTNetworkFieldEvaluator;

minutesEvaluatedNetworkAttribute.set_Evaluator(streetsNetworkSource,

    esriNetworkEdgeDirection.esriNEDAlongDigitized, minutesFTNetworkEvaluator);

 

INetworkFieldEvaluator minutesTFNetworkFieldEvaluator = new

    NetworkFieldEvaluatorClass();

minutesTFNetworkFieldEvaluator.SetExpression("[TF_Minutes]", "");

INetworkEvaluator minutesTFNetworkEvaluator = (INetworkEvaluator)

    minutesTFNetworkFieldEvaluator;

minutesEvaluatedNetworkAttribute.set_Evaluator(streetsNetworkSource,

    esriNetworkEdgeDirection.esriNEDAgainstDigitized, minutesTFNetworkEvaluator);

 

INetworkConstantEvaluator minutesNetworkConstantEvaluator = new

    NetworkConstantEvaluatorClass();

minutesNetworkConstantEvaluator.ConstantValue = 0;

INetworkEvaluator minutesConstantNetworkEvaluator = (INetworkEvaluator)

    minutesNetworkConstantEvaluator;

minutesEvaluatedNetworkAttribute.set_DefaultEvaluator

    (esriNetworkElementType.esriNETEdge, minutesConstantNetworkEvaluator);

minutesEvaluatedNetworkAttribute.set_DefaultEvaluator

    (esriNetworkElementType.esriNETJunction, minutesConstantNetworkEvaluator);

minutesEvaluatedNetworkAttribute.set_DefaultEvaluator

    (esriNetworkElementType.esriNETTurn, minutesConstantNetworkEvaluator);

 

// Add the attribute to the array.

attributeArray.Add(minutesEvaluatedNetworkAttribute);

 

步骤六 建立网络

// Create a new UID that references the NetworkDatasetWorkspaceExtension.

UID ndWorkspaceExtensionUID = new UIDClass();

ndWorkspaceExtensionUID.Value = "esriGeoDatabase.NetworkDatasetWorkspaceExtension";

 

// Get the workspace extension and create the network dataset based on the data element.

IWorkspaceExtensionManager workspaceExtensionManager = (IWorkspaceExtensionManager)

    workspace;

IWorkspaceExtension workspaceExtension = workspaceExtensionManager.FindExtension

    (ndWorkspaceExtensionUID);

IDatasetContainer2 datasetContainer2 = (IDatasetContainer2)workspaceExtension;

IDEDataset deDataset = (IDEDataset)deNetworkDataset;

INetworkDataset networkDataset = (INetworkDataset)datasetContainer2.CreateDataset

    (deDataset);

 

// Once the network dataset is created, build it.

INetworkBuild networkBuild = (INetworkBuild)networkDataset;

networkBuild.BuildNetwork(geoDataset.Extent);

 

相关文章
|
17天前
|
边缘计算 安全 算法
阿里云CDN:构建全球化智能加速网络的数字高速公路
阿里云CDN构建全球化智能加速网络,拥有2800多个边缘节点覆盖67个国家,实现毫秒级网络延迟。其三级节点拓扑结构与智能路由系统,结合流量预测模型,确保高命中率。全栈式加速技术包括QUIC协议优化和Brotli压缩算法,保障安全与性能。五层防御机制有效抵御攻击,行业解决方案涵盖视频、物联网及游戏等领域,支持新兴AR/VR与元宇宙需求,持续推动数字内容分发技术边界。
60 13
|
1月前
|
安全 自动驾驶 物联网
新四化驱动,如何构建智能汽车的“全场景”可进化互联网络?
在智能化、电动化、网联化、共享化的时代浪潮中,汽车正从单纯的 “机械产品” 进化为先进的 “移动智能终端”。在软件定义汽车(SDV)的崭新时代,每一次 OTA 升级的顺利完成、每一秒自动驾驶的精准决策、每一帧车载娱乐交互的流畅呈现,都离不开一张实时响应、全域覆盖、安全可靠的广域网络。
|
1月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
云安全 人工智能 安全
构建云上安全共同体 | 阿里云亮相2024年(第十三届)电信和互联网行业网络安全年会
构建云上安全共同体 | 阿里云亮相2024年(第十三届)电信和互联网行业网络安全年会
|
1月前
|
缓存 监控 算法
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
48 2
|
1月前
|
人工智能 运维 API
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
云栖大会 | Terraform从入门到实践:快速构建你的第一张业务网络
|
2月前
|
云安全 人工智能 安全
阿里云网络安全体系解析:如何构建数字时代的"安全盾牌"
在数字经济时代,阿里云作为亚太地区最大的云服务提供商,构建了行业领先的网络安全体系。本文解析其网络安全架构的三大核心维度:基础架构安全、核心技术防护和安全管理体系。通过技术创新与体系化防御,阿里云为企业数字化转型提供坚实的安全屏障,确保数据安全与业务连续性。案例显示,某金融客户借助阿里云成功拦截3200万次攻击,降低运维成本40%,响应时间缩短至8分钟。未来,阿里云将继续推进自适应安全架构,助力企业提升核心竞争力。
|
2月前
|
Shell 网络架构 计算机视觉
RT-DETR改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络
RT-DETR改进策略【模型轻量化】| ShufflenetV2,通过通道划分构建高效网络
59 5
|
4月前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
118 17
|
4月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
88 10
下一篇
oss创建bucket