QGIS обчислює радіус дуги до атрибутів


9

У мене встановлено QGIS 2.18.16. Моя проблема полягає в тому, як обчислити радіус функції дуги / кривої (лінії)? Рядки походять з .dgn-файлу, який я читав за допомогою FME і писав у DB PostGis. Я створив первинні ключі тощо, і таблицю можна повністю редагувати. Я порахував довжини для дуг успішно, але не можу зрозуміти, як обчислити радіус для цих кривих. Це ( https://www.mathopenref.com/arcradius.html ) може дати певну ідею з математичної сторони, хоча я не можу зрозуміти, як її використовувати в калькуляторі QGIS. Тому мені потрібно обчислити "R" для всіх рядків, які я маю в БД.

Беллоу - приклад. Мої дані мають дуги / криві на іншій таблиці, ніж "звичайні" полілінії.

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


Коли я натискаю на дугу за допомогою інструменту «Ідентифікувати», одним із перерахованих атрибутів є «найближчий радіус вершини». Тому немає необхідності обчислювати радіус, потрібно лише розібратися, як отримати доступ до цієї властивості в польовому калькуляторі. Або просто скопіюйте його з інструменту ідентифікації.
csk

Ви також можете переглянути властивості вершини, коли шар знаходиться в режимі редагування, вибравши вершини за допомогою інструмента вузла. Потім координати вершин (x, y, r) відображаються на панелі редактора вершин.
csk

Приємно знати, що принаймні можна побачити радіус за допомогою інструменту ідентифікації. З лише кількома дугами копіювати-вставити було б варіантом, але я планую використовувати це для всіх даних, які я маю, у яких занадто багато функцій дуги можна робити вручну. : /
Сисуаскі

Я трохи погуглився, і, схоже, не багато людей використовують функції кругової струни в QGIS, тому в польовому калькуляторі немає готового інструменту чи функції. Вам може знадобитися визначити спеціальну функцію Python. Якщо ви хочете пройти цей маршрут, додайте до свого тегу піггі.
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
    )

і

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

Н =

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
             )
   )

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 . Дякую за найдосконаліші доповнення та редагування формул.
см1

Дочекавшись, коли розробники додадуть кнопку "легко обчислити радіус", це найкорисніша відповідь, на яку я міг би сподіватися. Зараз у мене (та, можливо, і у інших) є хоч якийсь спосіб отримати радіус. :) Я ще цього не перевіряв, але буду через кілька днів, коли у мене буде достатньо часу. Дуже дякую за допомогу!
Сисуаскі

1

Що з витягуванням радіусу при витягуванні даних за допомогою FME? Там у вас є трансформатор ArcPropertyExtractor, який повинен надати вам значення радіуса в атрибутах, готових встановити у вашій DBGIS DB


Це був би один із можливих способів продовження, хороший спосіб обробляти всі дані. Моя проблема полягає в тому, що в моїй організації недостатньо користувачів FME, і мені потрібно зробити процес максимально простим. Це означає, що весь процес, включаючи дуги, області, лінії тощо, повинен бути в змозі провести з Qgis. Можливість оновити радіус функції Arc до нових об'єктів - це те, що мені потрібно зробити з Qgis. Дякую за вашу відповідь, я зараз оновлюю атрибути радіусу за допомогою FME, але сподіваюся, що буде спосіб це зробити за допомогою QGIS.
Сисуаскі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.