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.