SASGIS - SAS.Планета |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0002048 | SAS.Планета | [All Projects] Хотелка | public | 26-07-2013 07:34 | 31-08-2015 09:20 |
|
Reporter | vasketsov | |
Assigned To | vdemidov | |
Priority | normal | Severity | major | Reproducibility | N/A |
Status | resolved | Resolution | fixed | |
Platform | Windows | OS | Vista | OS Version | Ultimate |
Product Version | 121010 | |
Target Version | 150915 | Fixed in Version | 150915 | |
|
Summary | 0002048: Дырки в полигонах |
Description | Необходимо в базовых геопримитивах (полигон и т.п.) реализовать поддержку дырок. Также поддержку дырок необходимо реализовать и далее по цепочке использования полигонов, в том числе а) отображение и б) подсказки при наведении.
Под дыркой понимается участок внутренней границы полигона. Сам полигон задаётся совокупностью внешних границ (возможно, пересекающихся). Одна дырка принадлежит всегда к одной и только к одной внешней границе. Внутри участка полигона, образованного внешней границей, может быть произвольное количество дырок.
Дополнительные формальные условия - непересекаемость дырок одного полигона и невыход дырок за границу своей внешней области - при хранении в памяти и (де)сериализации несущественны, но при редактировании, рисовании, реализации итераторов,... надо будет сделать некое разумное минимально функциональное решение, например, не сохранять и не рисовать дырку, если она нарушает эти условия. |
Steps To Reproduce | |
Additional Information | При создании полигона с дырками можно обойтись той же техникой, что и сейчас для разделения участков внешних границ, если использовать другой разделитель. Одну из координат разделителя можно оставить как есть, другую наделить смысловой частью. |
Tags | VIP, полигоны |
Relationships | related to | 0002765 | resolved | zed | Access Violation при экспорте SML меток | child of | 0001471 | resolved | vdemidov | Сделать импорт KML с дырками | child of | 0001877 | resolved | zed | Логические функции при работе с полигонами |
|
Attached Files | |
|
Issue History |
Date Modified | Username | Field | Change |
26-07-2013 07:34 | vasketsov | New Issue | |
26-07-2013 07:35 | vasketsov | Relationship added | child of 0001471 |
26-07-2013 07:39 | vasketsov | Additional Information Updated | bug_revision_view_page.php?rev_id=5585#r5585 |
26-07-2013 07:40 | vasketsov | Relationship added | related to 0001877 |
26-07-2013 08:25 | vdemidov | Note Added: 0012208 | |
31-07-2013 08:32 | vdemidov | Status | new => confirmed |
31-07-2013 08:32 | vdemidov | Product Version | => 121010 |
31-07-2013 08:32 | vdemidov | Target Version | => 27xxxx |
25-04-2015 11:58 | zed | Note Added: 0015742 | |
25-04-2015 11:58 | zed | Relationship replaced | child of 0001877 |
25-04-2015 15:38 | vasketsov | Note Added: 0015747 | |
25-04-2015 15:41 | zed | Note Added: 0015748 | |
25-04-2015 15:58 | vasketsov | Note Added: 0015749 | |
05-05-2015 07:21 | vdemidov | Assigned To | => vdemidov |
05-05-2015 07:21 | vdemidov | Status | confirmed => assigned |
05-05-2015 17:12 | zed | Note Added: 0015858 | |
05-05-2015 17:32 | vdemidov | Note Added: 0015859 | |
15-05-2015 19:58 | vdemidov | Tag Attached: VIP | |
17-07-2015 18:03 | zed | Relationship added | related to 0002765 |
29-07-2015 14:56 | vdemidov | Tag Attached: полигоны | |
09-08-2015 09:32 | vdemidov | Note Added: 0016358 | |
09-08-2015 14:02 | zed | Note Added: 0016359 | |
09-08-2015 14:09 | vdemidov | Note Added: 0016360 | |
09-08-2015 14:11 | vdemidov | Note Added: 0016361 | |
09-08-2015 14:14 | vdemidov | Note Added: 0016362 | |
09-08-2015 14:32 | zed | Note Added: 0016363 | |
09-08-2015 14:46 | zed | Note Added: 0016364 | |
09-08-2015 14:57 | zed | Note Added: 0016365 | |
18-08-2015 10:12 | vdemidov | Target Version | 27xxxx => 150915 |
23-08-2015 13:30 | vdemidov | Note Added: 0016401 | |
23-08-2015 13:39 | zed | Note Added: 0016402 | |
24-08-2015 06:52 | vdemidov | Note Added: 0016403 | |
31-08-2015 09:20 | vdemidov | Status | assigned => resolved |
31-08-2015 09:20 | vdemidov | Fixed in Version | => 150915 |
31-08-2015 09:20 | vdemidov | Resolution | open => fixed |
Notes |
|
|
Хорошая идея с использованием второй координаты разделителя при сериализации. |
|
|
(0015742)
|
zed
|
25-04-2015 11:58
|
|
Сейчас, как я понимаю, разделителем мульти-геометрий выступает значение NaN и вместо того, чтобы записывать его и в X и в Y, в Y предлагается записать какой-то признак того, что это дырка? |
|
|
|
Ну, мысль была именно такая.
Но на всякий случай надо как-то проверить, не формируются ли в коде точки, где одна из координат NaN. А также не могут ли они прилететь снаружи, или быть введены пользователем. Чтобы дырки плодились только в генераторе дырок. |
|
|
(0015748)
|
zed
|
25-04-2015 15:41
|
|
Там ещё есть 4 резервных байта, можно юзать их. Писать туда magic какой-нить.
TGeometryPointSML = packed record
X: Extended;
Y: Extended;
Reserved: LongWord; // proper record aligment for backward compatibility
end; |
|
|
|
>можно юзать их
Слишком опасно, этот кусок в нормальном числе может быть не проинициализирован, или снаружи прилететь может, на форуме вон руками многие читают и пишут массив lonlat. |
|
|
(0015858)
|
zed
|
05-05-2015 17:12
|
|
vdemidov
Как планируешь изменять интерфейсы полигонов? |
|
|
|
Скорее всего сделаю иерархию примерно как в kml, тоесть будет LineRing содержащий примитивный одиночный полигон. А SinglePolygon будет содержать внешний контур и несколько внутренних с типом LineRing. |
|
|
|
Итого уже есть поддержка дырок в базе меток на SQLite, в мержилке полигонов и экспорте в KML. В базу SML и всякие HLG, SLS сохраняться должно правильно, но пока считывается неправильно. Да и вообще все нужно тщательно проверять. |
|
|
(0016359)
|
zed
|
09-08-2015 14:02
|
|
>в мержилке полигонов
*частично - создавать умеет, а читать ещё нет (см. TMergePolygonsProcessor.SinglePolygonToClipperPaths)
И самое главное, что полигон с дыркой у меня вообще никак не отображается, хотя информацию о метке показывает вроде правдоподобную. |
|
|
|
Странно. У меня из SQLite базы вроде бы отображалось. Но там еще в построителе полигонов глюки были. |
|
|
|
> *частично - создавать умеет, а читать ещё нет
Ну это тебе виднее. Добавь, если не сложно, поддержку. |
|
|
|
Еще, редактирование полигонов с дырками превращает их в мультиполигоны. |
|
|
(0016363)
|
zed
|
09-08-2015 14:32
|
|
>Добавь, если не сложно, поддержку.
Добавлю конечно. Просто, пока не работает отображение, сложно что-либо тестировать. А добавлять что-то без тестирования, как-то стрёмно.
Я для теста создал 2 квадрата, большой и маленький, один над другим. И применил к ним XOR операцию (из большого вырезал маленький). Результат операции окрасился верно, с дыркой, полигон сохранился в БД SQLite, но на экране не отображается. Экспорт в kml отработал нормально и GE дырку нарисовал. |
|
|
(0016364)
|
zed
|
09-08-2015 14:46
|
|
При дабл-клике по полигону из Управления метками, карта уносится в какую-то неведомую даль. Что-то явно не так с координатами и поэтому оно его и нарисовать скорее всего не может. Хотя в kml все координаты верные и при импорте из него получается мультиполигон именно там, где он и должен быть. |
|
|
(0016365)
|
zed
|
09-08-2015 14:57
|
|
Упс. Не заметил пару твоих последних коммитов. Сейчас в даль не уносится и полигон с дыркой отображает. |
|
|
|
Вроде бы поддержка дырок есть везде, где я собирался ее добавить. Работает редактирование, есть импорт из KML, загрузка из HLG и SLS. Нужно тестировать. Для начала желательно на простых контурах, а то мало ли вон какая бяка в мультилиниях вылезла внезапно. |
|
|
(0016402)
|
zed
|
23-08-2015 13:39
|
|
А не хочешь сделать, чтобы при редактировании дырки, перемещение точки ограничивалось внешним контуром и нельзя было бы вытянуть дырку за пределы контура? |
|
|
|
|