View Issue Details

IDProjectCategoryView StatusLast Update
0002048SAS.ПланетаХотелка / Feature requestpublic31-08-2015 09:20
Reportervasketsov Assigned Tovdemidov  
PrioritynormalSeveritymajorReproducibilityN/A
Status resolvedResolutionfixed 
PlatformWindowsOSVistaOS VersionUltimate
Product Version121010 
Target Version150915Fixed in Version150915 
Summary0002048: Дырки в полигонах
DescriptionНеобходимо в базовых геопримитивах (полигон и т.п.) реализовать поддержку дырок. Также поддержку дырок необходимо реализовать и далее по цепочке использования полигонов, в том числе а) отображение и б) подсказки при наведении.

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

Дополнительные формальные условия - непересекаемость дырок одного полигона и невыход дырок за границу своей внешней области - при хранении в памяти и (де)сериализации несущественны, но при редактировании, рисовании, реализации итераторов,... надо будет сделать некое разумное минимально функциональное решение, например, не сохранять и не рисовать дырку, если она нарушает эти условия.
Additional InformationПри создании полигона с дырками можно обойтись той же техникой, что и сейчас для разделения участков внешних границ, если использовать другой разделитель. Одну из координат разделителя можно оставить как есть, другую наделить смысловой частью.
TagsVIP, полигоны

Relationships

related to 0002765 resolvedzed Access Violation при экспорте SML меток 
child of 0001471 resolvedvdemidov Сделать импорт KML с дырками 
child of 0001877 resolvedzed Логические функции при работе с полигонами 

Activities

vdemidov

26-07-2013 08:25

manager   ~0012208

Хорошая идея с использованием второй координаты разделителя при сериализации.

zed

25-04-2015 11:58

manager   ~0015742

Сейчас, как я понимаю, разделителем мульти-геометрий выступает значение NaN и вместо того, чтобы записывать его и в X и в Y, в Y предлагается записать какой-то признак того, что это дырка?

vasketsov

25-04-2015 15:38

manager   ~0015747

Ну, мысль была именно такая.
Но на всякий случай надо как-то проверить, не формируются ли в коде точки, где одна из координат NaN. А также не могут ли они прилететь снаружи, или быть введены пользователем. Чтобы дырки плодились только в генераторе дырок.

zed

25-04-2015 15:41

manager   ~0015748

Там ещё есть 4 резервных байта, можно юзать их. Писать туда magic какой-нить.

  TGeometryPointSML = packed record
    X: Extended;
    Y: Extended;
    Reserved: LongWord; // proper record aligment for backward compatibility
  end;

vasketsov

25-04-2015 15:58

manager   ~0015749

>можно юзать их
Слишком опасно, этот кусок в нормальном числе может быть не проинициализирован, или снаружи прилететь может, на форуме вон руками многие читают и пишут массив lonlat.

zed

05-05-2015 17:12

manager   ~0015858

vdemidov
Как планируешь изменять интерфейсы полигонов?

vdemidov

05-05-2015 17:32

manager   ~0015859

Скорее всего сделаю иерархию примерно как в kml, тоесть будет LineRing содержащий примитивный одиночный полигон. А SinglePolygon будет содержать внешний контур и несколько внутренних с типом LineRing.

vdemidov

09-08-2015 09:32

manager   ~0016358

Итого уже есть поддержка дырок в базе меток на SQLite, в мержилке полигонов и экспорте в KML. В базу SML и всякие HLG, SLS сохраняться должно правильно, но пока считывается неправильно. Да и вообще все нужно тщательно проверять.

zed

09-08-2015 14:02

manager   ~0016359

>в мержилке полигонов
*частично - создавать умеет, а читать ещё нет (см. TMergePolygonsProcessor.SinglePolygonToClipperPaths)

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

vdemidov

09-08-2015 14:09

manager   ~0016360

Странно. У меня из SQLite базы вроде бы отображалось. Но там еще в построителе полигонов глюки были.

vdemidov

09-08-2015 14:11

manager   ~0016361

> *частично - создавать умеет, а читать ещё нет
Ну это тебе виднее. Добавь, если не сложно, поддержку.

vdemidov

09-08-2015 14:14

manager   ~0016362

Еще, редактирование полигонов с дырками превращает их в мультиполигоны.

zed

09-08-2015 14:32

manager   ~0016363

>Добавь, если не сложно, поддержку.
Добавлю конечно. Просто, пока не работает отображение, сложно что-либо тестировать. А добавлять что-то без тестирования, как-то стрёмно.

Я для теста создал 2 квадрата, большой и маленький, один над другим. И применил к ним XOR операцию (из большого вырезал маленький). Результат операции окрасился верно, с дыркой, полигон сохранился в БД SQLite, но на экране не отображается. Экспорт в kml отработал нормально и GE дырку нарисовал.

zed

09-08-2015 14:46

manager   ~0016364

При дабл-клике по полигону из Управления метками, карта уносится в какую-то неведомую даль. Что-то явно не так с координатами и поэтому оно его и нарисовать скорее всего не может. Хотя в kml все координаты верные и при импорте из него получается мультиполигон именно там, где он и должен быть.

zed

09-08-2015 14:57

manager   ~0016365

Упс. Не заметил пару твоих последних коммитов. Сейчас в даль не уносится и полигон с дыркой отображает.

vdemidov

23-08-2015 13:30

manager   ~0016401

Вроде бы поддержка дырок есть везде, где я собирался ее добавить. Работает редактирование, есть импорт из KML, загрузка из HLG и SLS. Нужно тестировать. Для начала желательно на простых контурах, а то мало ли вон какая бяка в мультилиниях вылезла внезапно.

zed

23-08-2015 13:39

manager   ~0016402

А не хочешь сделать, чтобы при редактировании дырки, перемещение точки ограничивалось внешним контуром и нельзя было бы вытянуть дырку за пределы контура?

vdemidov

24-08-2015 06:52

manager   ~0016403

Честно говоря, пока нет.

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
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 => 43xxxx
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 43xxxx => 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
08-08-2025 13:24 zed Category Хотелка => Хотелка / Feature request