View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001641SAS.Планета[All Projects] Хотелкаpublic19-10-2012 17:3423-02-2013 11:06
ReporterFetser 
Assigned Tozed 
PrioritynormalSeverityminorReproducibilitysometimes
StatusresolvedResolutionfixed 
PlatformWindowsOSXPOS VersionSP3
Product Version121010 
Target Version131111Fixed in Version131111 
Summary0001641: Считать площадь сложных полигонов хотя-бы приблизительно
DescriptionНеоднократно писал данную хотелку, но к сожалению количество полигонов при подсчёте площади которых выходит NAN м2 достаточно велико. После каждого исправления методов расчёта "стало лучше, но работать пока нельзя"
И что обидно Глобал Мапер считает любые полигоны.
TagsNo tags attached.
Attached Files? file icon Чебоксары.kmz [^] (28,044 bytes) 19-10-2012 17:34
? file icon Не считается.kmz [^] (499 bytes) 23-10-2012 08:25
? file icon Считается.kmz [^] (492 bytes) 23-10-2012 08:26

- Relationships

-  Notes
(0009648)
vdemidov (manager)
21-10-2012 17:21

Жду алгоритма, который посчитает эту площадь. А пока есть то что есть.
(0009674)
Fetser (reporter)
22-10-2012 12:38
edited on: 22-10-2012 12:51

Версия SASPlanet_101206 такие полигоны считает (может конечно и неточно). А нельзя ли сделать так что если новая версия не может посчитать, то вместо выдачи NAN программа такие полигоны считала по методу что был в SASPlanet_101206?
Насчёт точности, если верить глобалмаперу то полигон 6890,4 кв.км а SASPlanet_101206 считает 5579,67 кв. км Расхождение есть но лучше чем ничего.

а вот сравнение простого полигона:
GlobalMapper 26854 кв. км
SASPlanet_121010 27072 кв. км
SASPlanet_101206 29313 кв. км

(0009677)
vdemidov (manager)
22-10-2012 14:28

Это не полигон. Это фрактал какой-то. Я пас.
(0009679)
Tolik (manager)
22-10-2012 15:05
edited on: 22-10-2012 15:20

Заинтересовался, что за фрактал, тоже открыл :)
Да ладно, ничё особенного.

Я не знаю, как это по науке считать, но придумал, как оцениить прямо сейчас.
Кликаем на полигон пр.кн., выбираем операции с выдел. областью, скачать.
САС показывает 16123 тайла на зуме 16 (больше зум - дольше думать будет, зато точнее), осталось умножить на площадь тайла где-то в центре этой области. Нарисовал полигон в 1 тайл z16, площадь его показывает 460434 м2. Итого 7423 км2 - грубо, конечно, и больше чем на самом деле (т.к. тайлы за края залазят).

Короче, это можно автоматизировать и сделать точнее, поделив площадь краевых тайлов пополам.

P.S. z18: 244684 тайла x 28630.31 m2 = 7005 км2

(0009680)
Fetser (reporter)
22-10-2012 15:14
edited on: 22-10-2012 15:30

>Я не знаю, как это по науке считать
А наука их именно так и создаёт. Рассчитывается по определённой формуле каждый пиксель растрового изображения на предмет того входит в зону или не входит. И полученное растровое изображение переводится в вектор. Так что по сути данный расчёт площади для таких типов полигонов самый верный. Радиомобайл вообще суммирует закрашенные пиксели растрового изображения и перемножает на среднюю площадь одного пиксела. И точность расчёта будет очень высокая потому что, не смотря на сложный внешний вид, это изуродованный рельефом круг.

(0009690)
zed (manager)
22-10-2012 18:15

Я так понимаю, что проблема из-за того, что полигон самопересекающийся?
Просто, на ура гуглятся алгоритмы расчёта площади многоугольника методом "отсечения ушей", где полигон разбивается на кучу треугольников, сумма площадей которых и даёт результат. Но про самопересечения там ни слова.
(0009691)
zed (manager)
22-10-2012 18:21

О, нашёл:

Changeset: 3111 (22c4a6ae68cf) сделал вычисление площади триангуляцией, теперь все точно.
User: azya
Date: 2011-03-24 17:24:38 +0300 (19 months)

...и потом было ещё несколько доработок этого метода.

Можно попробовать отрефакторить этот момент, но только надо поднять все старые баги с подсчётом площади, чтобы было на чём тестировать. Может помочь, если проблема не в алгоритме, а в реализации.
(0009692)
zed (manager)
22-10-2012 18:26

Либо, если тут действительно самопересечения портят всю малину, то надо искать алгоритм, который бы разбил самопересекающийся полигон на несколько нормальных, без самопересечения и считать уже по ним.

Fetser
А можете сделать маленький полигон, для которого выводит NAN?
(0009708)
Fetser (reporter)
23-10-2012 08:25
edited on: 23-10-2012 11:12

Самопересечение тут не причём. Получил два совершенно одинаковых на внешний вид полигона один из них считается другой нет. Зависит от того какой по счёту является точка с совпадающими координатами. В полигоне какой не хочет считаться она вторая, а если полигон рисовать начиная с другой точки то он считается.

(0009810)
Tolik (manager)
02-11-2012 07:16

В версии 121102.6637 при попытке вывести информацию о метке Чебоксары вылетает floating point чё-то там. ELF прилагается.
(0009813)
vdemidov (manager)
02-11-2012 08:27

Ну эта авешка не совсем в тему этого бага, но уже пофиксил.
(0010583)
zed (manager)
18-02-2013 13:10

Удалось немного улучшить ситуацию - прикреплённые к тикету полигоны считаются.

Применил способ разбиения исходного полигона на относительно мелкие кусочки, и расчёт площади проходит уже для каждого отдельного куска. Площадь по-прежнему считает старый алгоритм и иногда он выдаёт NAN и, соответственно, площадь таких кусков игнорируется. Но в рамках этого тикета - считать хотя бы приблизительно, задачу можно считать решённой (если тестирование на прикреплённом exe будет удачным).
(0010584)
zed (manager)
18-02-2013 16:13
edited on: 18-02-2013 16:43

Нашёл ещё более удачный вариант - полигон сразу разбивается на треугольники, так что про старый алгоритм можно забыть как страшный сон.

Прикрепил exe. Изменения залил в vsasas

(0010586)
vdemidov (manager)
18-02-2013 21:41

А разве там не на плоские треугольники расчитано? Я пока не очень вникал, правда.
(0010587)
zed (manager)
19-02-2013 04:51

Там всё верно.

- Users who viewed this issue
User List Anonymous (2961x)
Total Views 2961
Last View 22-01-2020 13:48

- Issue History
Date Modified Username Field Change
19-10-2012 17:34 Fetser New Issue
19-10-2012 17:34 Fetser File Added: Чебоксары.kmz
21-10-2012 17:21 vdemidov Note Added: 0009648
21-10-2012 17:21 vdemidov Status new => confirmed
21-10-2012 17:21 vdemidov Target Version => 50xxxx
22-10-2012 12:38 Fetser Note Added: 0009674
22-10-2012 12:43 Fetser Note Edited: 0009674 View Revisions
22-10-2012 12:51 Fetser Note Edited: 0009674 View Revisions
22-10-2012 14:28 vdemidov Note Added: 0009677
22-10-2012 15:05 Tolik Note Added: 0009679
22-10-2012 15:14 Fetser Note Added: 0009680
22-10-2012 15:19 Tolik Note Edited: 0009679 View Revisions
22-10-2012 15:20 Tolik Note Edited: 0009679 View Revisions
22-10-2012 15:30 Fetser Note Edited: 0009680 View Revisions
22-10-2012 18:15 zed Note Added: 0009690
22-10-2012 18:21 zed Note Added: 0009691
22-10-2012 18:26 zed Note Added: 0009692
23-10-2012 08:25 Fetser Note Added: 0009708
23-10-2012 08:25 Fetser File Added: Не считается.kmz
23-10-2012 08:26 Fetser File Added: Считается.kmz
23-10-2012 08:41 Fetser Note Edited: 0009708 View Revisions
23-10-2012 11:12 Fetser Note Edited: 0009708 View Revisions
02-11-2012 07:16 Tolik Note Added: 0009810
02-11-2012 07:17 Tolik File Added: SASPlanet.Debug.elf
02-11-2012 08:27 vdemidov Note Added: 0009813
18-02-2013 13:01 zed File Added: SASPlanet.PolyTest.7z
18-02-2013 13:10 zed Note Added: 0010583
18-02-2013 16:13 zed Note Added: 0010584
18-02-2013 16:14 zed File Deleted: SASPlanet.PolyTest.7z
18-02-2013 16:40 zed File Added: SASPlanet.7z
18-02-2013 16:43 zed Note Edited: 0010584 View Revisions
18-02-2013 21:41 vdemidov Note Added: 0010586
19-02-2013 04:51 zed Note Added: 0010587
22-02-2013 13:41 zed Project SAS.Планета => SACS.Планета
22-02-2013 13:42 zed Status confirmed => resolved
22-02-2013 13:42 zed Resolution open => fixed
22-02-2013 13:42 zed Assigned To => zed
22-02-2013 13:42 zed File Deleted: SASPlanet.7z
22-02-2013 13:42 zed File Deleted: SASPlanet.Debug.elf
23-02-2013 09:28 vdemidov Project SACS.Планета => SAS.Планета
23-02-2013 11:06 zed Fixed in Version => 131111
23-02-2013 11:06 zed Target Version 50xxxx => 131111



Copyright © 2007 - 2020 SAS.Planet Team