从QGIS中最近的点加入属性?


29

我有两层带点的层,分别称为A和B,每个层具有不同的属性。

对于AI中的每个点,想要加入B中最近点的所有属性。

理想地,这还将包括一个测量两点之间距离的字段。

我知道如何在ArcGIS中做到这一点:右键单击A层>联接和关联>联接,然后根据空间位置联接数据并选择从最近的点联接属性。

我在QGIS中找不到类似的功能。有指针吗?

Answers:


26

使用“距离矩阵”可以计算最近的点。确保两个图层都在同一个CRS中!然后,您可以加载结果并将其用于连接表A和B。

在“距离矩阵”中选择:“线性距离矩阵”和“仅使用最近的k个目标点:1”

在此处输入图片说明

使用“添加矢量图层”加载CSV,并在图层A的图层属性-“连接”选项卡中连接图层。

在此处输入图片说明

结果:

在此处输入图片说明


如果您想使用距离矩阵在一层内获得点之间的距离,则应更改k = 2,因为这个已知问题:hub.qgis.org/issues/4761
Celia

1
@underdark似乎此解决方案不再起作用。我能够创建matrix.csv并将其加入我的第一层。在您的示例中,您添加了第二个联接,根据矩阵中的TargetID将第二层连接到第一层。但是连接的字段不会在对话框中显示给我,因此我无法选择TargetID。当然,我可以先将save_as作为该层,然后进行第二次连接...
Bernd

13

NNJoin插件应该做的工作。对于输入层的每个要素,它将在连接层中添加最接近要素的所有属性,还添加一个距离属性以及与该要素的距离。


完美运作。比接受的答案快。请注意,如果是从2011
则可

至少,今天比公认的答案要好得多。快得多。
cag

4

如果您可以仅从“ B”层加入单个属性,请查看mmqgis插件中的“集线距离”工具。

如果需要其余的“ B”属性,则应该能够将其余的“ B”属性重新加入该层。

如果需要,还可以选择生成从A到B的线。这有助于可视化关联要素之间的距离和方向。


0

另一种使用refFunctions插件的方法。

(1)样本数据集

在此处输入图片说明

(2)打开具有更多功能的图层的属性表(points_b在本示例中为图层),以便不会丢失任何对。创建新字段。

  • 另一层的ID字段: geomnearest('points_a', 'id_a')
  • 检测到的对的距离字段: geomnearest('points_a', '$distance')

在此处输入图片说明


-6

使用QGIS 1.7矢量>数据管理>按位置连接属性

在此处输入图片说明


3
我也想到了这一点,但是当我进行测试时,它仅适用于精确匹配,例如点多边形。它找不到与另一个点最近的点。在
v1.7中

1
我有零场比赛。这是行不通的。
Fred
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.