matlab压缩邻接表转矩阵,arcgis如何生成邻接矩阵/邻接关系分析

arcgis如何生成邻接矩阵/邻接关系分析

arcgis如何生成邻接矩阵/邻接关系分析

作者:地理小子

链接:https://www.zhihu.com/question/38477549/answer/213151180

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这里借鉴知乎,加以补充操作步骤:

我现在有一个区域内的点和线的矢量信息,点位于线的交点上,想得到整个图的邻接矩阵。

比如这个图中:

17efb972913a0ef5a28949d4d422ffda.png

有三个点,1,2,3,。1与2相连,2与3相连。邻接矩阵为:

cf04728c924c80dda5b1532e89a88d96.png

分析:这里的邻接矩阵生成前提条件可由ArgGis生成节点与线段的空间邻近关系得到,以下是一位朋友的分析,但是没有加上操作步骤,也没有加上由节点与选段之间的空间邻近关系获得邻接矩阵。

1、【实验数据】首先动手制作一个样例数据:

说明:黑色数字为节点编号。粉色数字为线编号。

de0225631c7e85e9cf8d70adc8094a16.png

2、【问题分析】既然要求每个节点与线的邻接矩阵,则就是一个临近度分析,但由于这里的“邻近”实际上是相连的,即“什么在什么上”的问题,那么又是一个叠加分析。所以,直接用叠加分析的思路即可解决。

3、【解决方案】如果用过ArcGIS,必定经常用一个强大的基础矢量数据叠加空间,即【空间连接】用这个工具即可解决。

4、【操作方法】输入要素是节点,连接要素是线,连接方式选one_to_many(关键)。然后保持默认。运行即可得到邻接表。

57a2e13b9d6c70f378748d57b9ac84d5.png

5、【分析结果】j打开生成的属性表,即可得到邻接要素ID映射表。至于变换为矩阵,ArcGIS也可以,Excel也可以。

注:为什么节点3和节点5只有两个邻接边,那是因为我的实验数据中线段1-6是一条线,并没有打断。

5c7d032e62fe17881c0816eefbde504f.png

2ArcGis中操作步骤:

1以下以ArcMap10.6分析,加载节点数据和路段数据之后点击工具箱

437a67f3b93d4d59ae21251b59418fef.png

2找到空间邻近分析

ba179c1ffc2afbdff38a82f5448be47f.png

3选择你要的效果

a1cdff1b1818f3f9e090874334c8e4fc.png

3.结果

当选择节点与线段的邻接关系生成的表结果如下:

0d243a0affa8e8667f686ebe1620a907.png                   

782e5371d73e16d8849aafc1331438e6.png

4.总结

1.第一种图可以生成上面的邻接矩阵,博主已经用matlab实现,并不难,后面将会更新。

2.第二种图可表示单向路径邻接关系

arcgis如何生成邻接矩阵/邻接关系分析相关教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
邻接矩阵是图论中常用的一种表示图结构的方法,而邻接表则是另一种常见的形式。在Matlab中,我们可以使用一些简单的代码将邻接矩阵换成邻接表。 首先,我们需要创建一个邻接矩阵。我们可以使用Matlab矩阵表示方法,其中矩阵的行和列代表的是图中的节点,而矩阵中的元素则表示节点之间是否存在边。边存在时,该元素的值为1,边不存在时,该元素的值为0。 接下来,我们要创建一个空的邻接表。在Matlab中,我们可以使用cell数组来实现邻接表。每个节点对应一个cell,cell中存放的是与该节点相邻的节点。 然后,我们可以使用一个for循环来遍历邻接矩阵中的每个元素。对于邻接矩阵中的非零元素,我们可以将其对应的节点添加到邻接表中的对应节点cell中。 最后,我们可以输出邻接表来查看换结果。 以下是用Matlab代码实现邻接矩阵换成邻接表的过程: ```matlab % 创建邻接矩阵 adjacencyMatrix = [0 1 1; 1 0 0; 1 0 0]; % 获取节点数量 numNodes = size(adjacencyMatrix, 1); % 创建空的邻接表 adjacencyList = cell(numNodes, 1); % 遍历邻接矩阵 for i = 1:numNodes for j = 1:numNodes if adjacencyMatrix(i, j) == 1 % 将相邻节点添加到邻接表中 adjacencyList{i} = [adjacencyList{i} j]; end end end % 输出邻接表 disp('邻接表:'); for i = 1:numNodes disp(['节点 ' num2str(i) ': ' num2str(adjacencyList{i})]); end ``` 运行上述代码后,将会在命令窗口中输出邻接表,展示邻接矩阵换的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值