在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'))
我还没有找到在场计算器中获得大圆距离的方法。
我或多或少是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'))
我还没有找到在场计算器中获得大圆距离的方法。