Рассчитайте расстояние между двумя точками в калькуляторе полей QGIS - PullRequest
0 голосов
/ 03 августа 2020

Я более-менее новичок в QGIS, использовал версию QGIS 3.10. Я хотел бы рассчитать расстояния (в метрах или километрах) от ряда точек до одной определенной контрольной точки. Можно ли это сделать с помощью калькулятора полей QGIS? Точки - это геометрические точки с широтой и долготой в WGS84. Таблица атрибутов выглядит следующим образом:

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

Point с ID # 1 должен быть точкой отсчета. Линейное расстояние между точкой №1 и всеми остальными точками - это мой желаемый результат.

Я пробовал несколько версий, например:

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

или

* ** 1013 1014 * * * 1015 в то время как первая геометрия включает в себя все точки, перечисленные в таблице атрибутов, а вторая геометрией является опорной точкой, из которой расстояние должно быть вычислено.

, но результат всегда «NULL ".

Матрица расстояний не является целью, так как с ее помощью я могу получить любое расстояние до любой точки. Целью является подматрица матрицы расстояний ...

1 Ответ

0 голосов
/ 20 августа 2020

Вы получаете null, потому что не можете найти точку отсчета. Вам нужно искать по имени слоя, а не по имени поля.

Сначала вы должны спроецировать свои точки, иначе вы получите результаты в градусах, а не в метрах. Затем вы можете рассчитать расстояние:

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

Где «Имя слоя» - это имя слоя на панели «Слои» (также известное как таблица содержания).

В вашем вопросе вы используете 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'))

Я не нашел способа получить расстояние по большому кругу в калькуляторе поля.

...