【问题标题】:How do I find all nodes within a grid如何找到网格中的所有节点
【发布时间】:2017-01-31 15:38:29
【问题描述】:

对于我所描述的问题,我对关键字/方向有一些疑问。我会尽力描述下面的问题。

我有一张带有节点的地图(例如 4km x 4km)(作为设施 + 带有 GIS 位置)。

我也愿意

1) 在地图上扫描某个固定范围的网格(例如 1km x 1km)并列出网格中的所有节点。最终,我将扫描网格中节点的完整地图范围信息。 使用 4km x 4km 作为地图范围,我将有 4 个 1km x 1km 的固定网格范围,每个网格提供 1km x 1km 网格中节点数量的信息。

2)扫描一个节点特定节点范围内的所有节点(例如距离节点1km半径)并列出网格中的所有节点。

我可以知道一些关键词来推进我的研究吗?

对于(1),我在网上搜索并最初认为“占用网格”可能是我正在寻找的,但我还不确定,因为它似乎与我正在寻找的目标不同。我不限于程序的使用,但希望函数或用户创建的函数可能在 matlab 中。

对于 (2),列出与网格中每个其他节点具有相应距离的所有节点并过滤我的“范围”内的所有节点可能是一个答案。但是,是否有任何既定的算法可供使用?我用谷歌搜索了很多关于“Dijkstra 算法”的结果,但我认为我的问题不是最短路径问题。

就个人而言,我实际上更感兴趣的是找到 (1) 的答案,但在最坏的情况下,可能会使用 (2)。 我现在用的程序是matlab和QGIS。

【问题讨论】:

  • 最终的解决方案很大程度上取决于数据的格式。你有一个点矩阵吗?或者这是例如(纬度,经度)的nx2矩阵吗?或者你有笛卡尔积分吗?我们需要更多细节。
  • 每个单点(节点)都有一些类型属性(如A型节点,B型节点),并具有可以绘制在图上的经纬度信息。它们是笛卡尔坐标系中的点。

标签: algorithm matlab graph grid gis


【解决方案1】:

假设我们有一个网格中的节点矩阵A,其中每一行代表节点的笛卡尔坐标,单位为公里(或任何您想要的单位):

% Generating random nodes... You can easily make these 3D by changing columns from 2 to 3
A = randn(10,2);

此外,假设我们有一个参考点B,我们想在其中找到Bx km 内的所有节点

% Generating a random reference point
B = randn(1,2);

那么A和B中每个点之间的距离向量D由下式给出

D = A - repmat(B,size(A,1),1);

每个向量的范数由

给出
E = sqrt(sum(D.^2,2))

因此,位于 B 的 x km 范围内的所有节点都由

给出
x = 1; % Change to whatever number you want
F = A(E < x,:)

【讨论】:

  • 感谢您对 (2) 的回答。我想你提供的逻辑很简单明了。只是当我想,既然它在 GPS 位置坐标中,如果我只是将距离视为毕达哥拉斯距离而不是球形的地球表面,可能会出现一些准确性问题。 matlab映射工具箱中有一些计算距离的替代计算方法。
  • 信封计算的快速回溯似乎表明球面距离与欧几里得距离的关系为 2 r * asin(E/(2r)) 其中 r 是地球的半径。如果确实如此,则将上面的 E 修改为 ... 2 r * asin(sqrt(sum(D.^2,2))/(2r))
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-17
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多