在QGIS字段计算器中计算两点之间的距离

Calculate distance between two points in QGIS field calculator

我或多或少是QGIS的初学者,我使用过QGIS 3.10版本。 我想计算一些点到一个特定参考点的距离(以米或公里为单位)。是否可以使用 QGIS 字段计算器来执行此操作?这些点是 WGS84 中具有纬度和经度的几何点。 属性 table 看起来像:

Point_ID Latitude  Longitude   Distance_m
1        46.27789  9.87763     
2        46.27366  9.87701
3        46.27565  9.88045
4        46.27600  9.87822

ID 为#1 的点应该是参考点。点 #1 到所有其他点之间的直线距离是我想要的结果。

我尝试了几个版本,例如:

distance(geom_to_wkt($geometry ), geom_to_wkt(POINT('POINT_ID'='1')))

distance(geom_to_wkt($geometry ), geom_to_wkt(geometry(get_feature_by_id('Point_ID', '1'))))

第一个几何包含属性 table 中列出的所有点,第二个几何是计算距离的参考点。

但结果总是“NULL”。

距离矩阵不是目标,因为我用它得到任何点的任何距离。目标是距离矩阵的子矩阵...

你得到的是空值,因为它找不到参考点。您需要按图层名称而不是字段名称进行搜索。

首先你应该投射你的点,否则你得到的结果将以度而不是米为单位。然后你可以计算距离:

distance(($geometry),geometry(get_feature_by_id('Layer Name', 1)))

其中“图层名称”是图层面板中图层的名称(a.k.a。table 的内容)。

在您的问题中,您使用经度和纬度的 WKT,这可以通过投影的 x 和 y 值(例如 UTM)来完成,如下所示:

distance( geom_from_wkt( 'POINT(' || "x_utm" || ' ' || "y_utm" || ')'), geom_from_wkt( 'POINT(' || attribute(get_feature_by_id('Layer Name', 1),'x_utm') || ' '|| attribute(get_feature_by_id('Layer Name', 1),'y_utm') || ')' ) )

如果需要,您可以像这样进行转换:
x(transform(( geom_from_wkt( 'POINT('||"lon"|| ' '|| "lat" || ')' ) ),'epsg:4326','epsg:code for your UTM zone'))

y(transform(( geom_from_wkt( 'POINT('||"lon"|| ' '|| "lat" || ')' ) ),'epsg:4326','epsg:code for your UTM zone'))

我还没有找到在场计算器中获得大圆距离的方法。