QGIS рассчитать радиус дуги до атрибутов

9

У меня установлен QGIS 2.18.16. Моя проблема заключается в том, как рассчитать радиус элемента дуги / кривой (линии)? Строки происходят из файла .dgn, который я прочитал с помощью FME и записал в базу данных PostGis. Я создал первичные ключи и т. Д., И таблица полностью редактируема. Я рассчитал длины для дуг успешно, но не могу понять, как рассчитать радиус для этих кривых. Это ( https://www.mathopenref.com/arcradius.html ) может дать некоторое представление о математике, хотя я не могу понять, как использовать его в калькуляторе QGIS. Поэтому мне нужно рассчитать «R» для всех строк, которые у меня есть в БД.

Ниже приведен пример. Мои данные имеют Дуги / Кривые в другой таблице, чем "нормальные" полилинии.

введите описание изображения здесь

Sisuaski
источник
Когда я нажимаю на дугу с помощью инструмента «Идентифицировать», одним из перечисленных производных атрибутов является «радиус ближайшей вершины». Таким образом, нет необходимости вычислять радиус, вам нужно только выяснить, как получить доступ к этому свойству в полевом калькуляторе. Или просто скопируйте его из инструмента идентификации.
csk
Вы также можете просмотреть свойства вершины, когда слой находится в режиме редактирования, выбрав вершины с помощью Node Tool. Затем координаты вершины (x, y, r) отображаются на панели редактора вершин.
ЦСК
Приятно знать, что по крайней мере можно увидеть радиус с помощью инструмента идентификации. Только с несколькими дугами копирование-вставка может быть вариантом, но я планирую использовать это для всех данных, которые у меня есть, поскольку в них слишком много дуг, которые нельзя сделать вручную. : /
Sisuaski
Я немного погуглил, и кажется, что в QGIS не так много людей используют функции круглых строк, поэтому в полевом калькуляторе нет готового инструмента или функции. Вам может потребоваться определить пользовательскую функцию Python. Если вы хотите пойти по этому пути, добавьте тег pygis к своему вопросу.
csk
Сколько вершин у вас есть для функции? Что вы видите Vertex Editorпри нажатии Node Tool?
Марко

Ответы:

6

Далее следуют слегка проверенные формулы, поэтому действуйте с осторожностью. Но следуя вместе с примером здесь: https://www.mathopenref.com/arcradius.html введите описание изображения здесь

Если у ваших дуг окружности есть вершина в средней точке вдоль дуги (на рисунке я говорю x1, y1), вы можете использовать ее вместе с начальной и конечной точками, чтобы вычислить длину хорды " W " и высоту « h » для получения радиуса «R» по следующей формуле:

введите описание изображения здесь

и говорю

введите описание изображения здесь

W =

sqrt(
     ( $x_at(-1) - $x_at(0) )^2 +
     ( $y_at(-1) - $y_at(0) )^2
    )

а также

введите описание изображения здесь

H =

sqrt(
    ( $x_at(1) - ( $x_at(-1) + $x_at(0) )/2 )^2
    + ( $y_at(1) - ( $y_at(-1) + $y_at(0) )/2 )^2
)

в вашем диалоге выражений калькулятора полей вы получите это длинное уравнение для расчета радиуса:

введите описание изображения здесь

R =

sqrt( 
    ( $x_at(1) - ($x_at(-1) + $x_at(0) )/2 )^2 
    + ( $y_at(1) - ($y_at(-1) + $y_at(0))/2 )^2
     ) /2
+
(   ( $x_at(-1) - $x_at(0) )^2 )  + 
    ( $y_at(-1) - $y_at(0) )^2 )  )
/ ( 8 * sqrt(
            ( ($x_at(1) - ($x_at(-1) + $x_at(0) )/2 )^2
            + ( $y_at(1) - ($y_at(-1) + $y_at(0) )/2 )^2
             )
   )
cm1
источник
1
В LaTe X $$W= \sqrt {(x_{-1} - x_0)^2 +(y_{-1}-y_0)^2}$$ $$H = \sqrt { (x_1- \frac {(x_{-1}+x_0)} 2 )^2 + (y_1- \frac {(y_{-1}+y_0)} 2 )^2}$$ и $$R = \frac {\sqrt { (x_1- \frac {(x_{-1}+x_0)} 2 )^2 + (y_1- \frac {(y_{-1}+y_0)} 2 )^2}} {2} + \frac {(x_{-1} - x_0)^2 +(y_{-1}-y_0)^2} {8 \sqrt { (x_1- \frac {(x_{-1}+x_0)} 2 )^2 + (y_1- \frac {(y_{-1}+y_0)} 2 )^2}}$$
Марко
Отлично! Я не представлял, как получить доступ к вершинам. Возможно ли это в PostGIS?
Марко
1
Марко, я верю, что можно извлечь любую вершина, которую ты ищешь. Смотрите ссылку здесь: postgis.net/docs/ST_PointN.html . Спасибо за отличные дополнения и изменения в формулах.
cm1
В ожидании разработчиков, чтобы добавить кнопку для «легкого вычисления радиуса», это самый полезный ответ, на который я мог надеяться. Теперь у меня (и, возможно, других тоже) есть хоть какой-то способ извлечь радиус. :) Я еще не проверял это, но я буду через несколько дней, когда у меня будет достаточно времени. Большое спасибо за вашу помощь!
Sisuaski
1

Как насчет извлечения радиуса при извлечении данных с помощью FME? Там у вас есть преобразователь ArcPropertyExtractor, который должен дать вам значения радиуса в атрибутах, готовых для установки в вашей базе данных PostGIS.

fgiron
источник
Это был бы один из возможных способов продолжить, хороший способ обработки всей информации. Моя проблема в том, что в моей организации недостаточно пользователей FME, и мне нужно сделать процесс как можно более простым. Это означает, что весь процесс, включая дуги, области, линии и т. Д., Должен выполняться с помощью Qgis. Возможность обновления радиуса объекта Arc для новых объектов - это то, что мне нужно сделать с помощью Qgis. Спасибо за ваш ответ, хотя я буду обновлять атрибуты радиуса с помощью FME, но надеюсь, что будет способ сделать это с помощью QGIS.
Сисуаски