Неверное вычисление площади полигона в QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Аватара пользователя
eucrariano
Активный участник
Сообщения: 104
Зарегистрирован: 26 авг 2009, 12:09
Репутация: 0
Откуда: Ukraine, Chernivtsy

Неверное вычисление площади полигона в QGIS

Сообщение eucrariano » 08 дек 2018, 01:14

Здравствуйте коллеги!

Тема поднималась неоднократно, но, вероятно, при просмотре поисковых результатов я проглядел верное решение.
Проблема заключается в неверном вычислении площади. Версия QGIS - 3.4.2. 64bit и 2.18.4.

Возьмем самый простой пример - квадрат со стороной в 1 км.
Строим его через импорт csv-слоя -> convex hull. Параметры:
EPSG: 28404 "Pulkovo 1942 / Gauss-Kruger zone 4"
1 4500000 5700000
2 4500000 5701000
3 4501000 5701000
4 4501000 5700000

Что может быть проще? Результат заведомо известен - 1 000 000 м2.
area.png
area.png (10.86 КБ) 4281 просмотр
Первые 5 колонок - автоматом выдает Кугис при построении квадрата. И площадь прописана правильно. Но когда считаем через $area калькулятором полей (последняя колонка), то результат значительно различается. Пересчеты же в ARCGIS (остальные колонки) - дают верный результат.
Что сделать, чтобы считать правильно в QGIS?

Спасибо

trir
Гуру
Сообщения: 5275
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1013
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Неверное вычисление площади полигона в QGIS

Сообщение trir » 08 дек 2018, 06:06


Аватара пользователя
eucrariano
Активный участник
Сообщения: 104
Зарегистрирован: 26 авг 2009, 12:09
Репутация: 0
Откуда: Ukraine, Chernivtsy

Re: Неверное вычисление площади полигона в QGIS

Сообщение eucrariano » 11 дек 2018, 10:34

В продолжение темы.
Тестируются: Quantum GIS 3.4 (основная программа) и Digitals XE, build 23.11.2018 (Demo) + ArcMap 10.5 в качестве сравнения. Причем Digitals - это как бы базис, посчитанное им у нас принимается за эталон и идет напрямую в кадастр. Потому то я так и зациклился с площадями этими...

В этом примере взято 2 участка: квадрат 1000х1000 м и произвольный реальный земельный участок, расположенные в СS63 zone X1 для 2 вариантов параметров проекции:
Мой вариант:
+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=1300000 +y_0=-9214.687903777511 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs
Вариант на основе параметров Digitals:
+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=1300000 +y_0=-9214.688 +ellps=krass +towgs84=25,-141,-78.5,0.0,-0.35,-0.736,0.0 +units=m +no_defs
Оба варианта дали тождественные и описанные ниже результаты.


Использованы три способа измерений в двух вариантах:

V1: Система координат: CS63 X1, для измерения длин и площадей в настройках проекта использована плоскость (Planimetric):
1_1 - функция $area
1_2 - area($geometry)

V2 Система координат: CS63 X1, для измерения длин и площадей в настройках проекта используется эллипсоид Красовского 1942:
2_1 - функция $area
2_2 - area($geometry)

V3: Система координат: Декартовая
3_1 - функция $area
3_2 - area($geometry)
results.png
results.png (64.11 КБ) 4151 просмотр

Если же считать площадь по формулам, то тоже взято 3 варианта (результат приведен для реального участка):
1) полные прямоугольные координаты - 10000,32177734 м2;
2) прямоугольные координаты с отброшенным номером зоны -10000,322265625 м2;
3) прямоугольные координаты с отброшенным номером зоны и уменьшенной на 300 тыс. м Y-координатой (или Х-координатой, если использовать терминологию ГИС) 10000,32225037 м2;

Квадрат имеет ровно 1 км2 независимо от способа расчета...

Последний результат (+10000,322250 м2) получается и в ArcGIS.
В то же время Digitals считает 1,0000 га (как и в утвержденном каталоге координат реального земельного участка), что подразумевает совпадение в площади при исчисленнии в гектарах и округлении до 4 знаков после запятой.

Итак, какой способ расчета является наиболее корректным? При принятой точности 4 знака после запятой, для участка размером 1 га годится практически любой из способов, однако неизвестно, не «вылезут» ли при каких-то вариантах вычисления площадей в Quantum ГИС различия с "официально" посчитанными площадями.

Какой способ посоветуете?

Спасибо.
Вложения
results.png
results.png (64.11 КБ) 4151 просмотр
kvadrat.png
kvadrat.png (13.59 КБ) 4162 просмотра
Последний раз редактировалось eucrariano 11 дек 2018, 11:59, всего редактировалось 12 раз.

gamm
Гуру
Сообщения: 4046
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1050
Ваше звание: программист
Откуда: Казань

Re: Неверное вычисление площади полигона в QGIS

Сообщение gamm » 11 дек 2018, 11:05

eucrariano писал(а):
11 дек 2018, 10:34
Итак, какой способ расчета является наиболее корректным?
вам же не корректный нужен, а попадающий в Digitals XE. Поэтому попробуйте посчитать в нем без округления как-то, используя напрямую функции, и т.д., и подобрать.

"Официальные" площади посчитаны тоже с ошибками, вам в них попасть нужно. Сделайте набор участков разного размера, например масштабируя и сдвигая один и тот же по вашей проекционной зоне, и постройте модель поправок для QGIS, чтобы он попадал. Ничего другого нет, если только не угадать или не узнать способ счета в Digitals XE, и не переписать его в QGIS.

Аватара пользователя
eucrariano
Активный участник
Сообщения: 104
Зарегистрирован: 26 авг 2009, 12:09
Репутация: 0
Откуда: Ukraine, Chernivtsy

Re: Неверное вычисление площади полигона в QGIS

Сообщение eucrariano » 11 дек 2018, 12:25

Спасибо за Ваш совет. Тут Вы правы. Я провел небоьшое исследование, чтобы полностью разобраться в теме. В общем, выводы совпадают с Вашими.

Итак, надеюсь эта информация поможет всем, кто задавался подобными вопросами. Проблема, оказывается, намного более обширная, чем мне казалось вначале… И конечно она связана не с какой-либо конкретной ГИС, а как правило, лежит в плоскости требований кадастров…

Во первых, Quantum ГИС считает честно, это факт. В то же время утверждать, что другие программы, в т.ч. Digitals, "мухлюют", тоже нельзя.

Извините, что сейчас больше говорить буду о Digitals, чем о заявленой в заголовке темы QGIS, но проблема привязки вычисленных площадей к результатам полученным в Digitals (который «соответствует» кадастру), просто обязывает так поступить.

Говоря о Digitals, множество параметров округления используются (http://www.geosystema.net/forum/viewtopic.php?p=256#256, http://www.geosystema.net/forum/viewtopic.php?p=256#256, http://www.geosystema.net/forum/viewtop ... f=1&t=1093 ), чтобы «соответствовать» требованиям обменных файлов In4 (2 знака по длине, сантиметровая точность, 4 знака по площади) и xml (3 знака по длине, милиметровая точность, 4 знака по площади) нашего Украинского кадастра, то-есть координаты берутся с дискретной точностью что часто вызывает вопросы с подсчетом площадей.

Мини-исследование показало (http://www.geosystema.net/forum/viewtop ... f=1&t=1093 http://vinmap.net/book/ch12s01s02s02.html http://vinmap.net/book/ch12s01s02.html ), что программа внутри держит координаты с максимальной точностью. А вот вычисление площадей происходит по виртуально округленным координатам, в соответствии с заданными настройками, что сделано для того, чтобы эмулировать площадь в сохраненном In4 или xml (хотя умеет, конечно, считать и очень точно).

В данном примере с участком, его площадь в более точном варианте Digitals составляет 1,0000322250000 га, или 10000,322250 м2, что расставляет точки на i.

Как метко заметил один форумчанин, требования In4 или xml к точности координат и балансу площадей противоречат не только геодезии, но и здравому смыслу. Однако наш Держгеокадастр рулит, так что "маємо те шо маємо". У вас наверное, такая же ситуация, а о идиотских (извините за выражение) совершенно требованиях к секретности координат давайте просто помолчим на даный момент.

Возвращаясь к Quantum: вероятней всего, наиболее универсальным будет подход с использованием варианта V2_2, то есть на основе:

«Система координат (подставляем нужную)», а для измерения длин и площадей в настройках проекта используем «эллипсоид (подставляем нужный)»

Соответственно, для исчисления площади проекции с учетом кривизны Земли используем функцию $area (для длин - $length, для периметров - $perimeter etc)

Для «кадастровых» целей используем варианты с area($geometry), length($geometry), perimeter($geometry) ну и так далее. В зависимости от целей «огрубляем» результат.

Вот, кажется и все по этой теме, которую можно закрывать.

Всем спасибо за советы и участие.

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость