SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002048SAS.Планета[All Projects] Хотелкаpublic26-07-2013 07:3431-08-2015 09:20
Reportervasketsov 
Assigned Tovdemidov 
PrioritynormalSeveritymajorReproducibilityN/A
StatusresolvedResolutionfixed 
PlatformWindowsOSVistaOS VersionUltimate
Product Version121010 
Target Version150915Fixed in Version150915 
Summary0002048: Дырки в полигонах
DescriptionНеобходимо в базовых геопримитивах (полигон и т.п.) реализовать поддержку дырок. Также поддержку дырок необходимо реализовать и далее по цепочке использования полигонов, в том числе а) отображение и б) подсказки при наведении.

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

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

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

-  Notes
(0012208)
vdemidov (manager)
26-07-2013 08:25

Хорошая идея с использованием второй координаты разделителя при сериализации.
(0015742)
zed (manager)
25-04-2015 11:58

Сейчас, как я понимаю, разделителем мульти-геометрий выступает значение NaN и вместо того, чтобы записывать его и в X и в Y, в Y предлагается записать какой-то признак того, что это дырка?
(0015747)
vasketsov (manager)
25-04-2015 15:38

Ну, мысль была именно такая.
Но на всякий случай надо как-то проверить, не формируются ли в коде точки, где одна из координат NaN. А также не могут ли они прилететь снаружи, или быть введены пользователем. Чтобы дырки плодились только в генераторе дырок.
(0015748)
zed (manager)
25-04-2015 15:41

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

  TGeometryPointSML = packed record
    X: Extended;
    Y: Extended;
    Reserved: LongWord; // proper record aligment for backward compatibility
  end;
(0015749)
vasketsov (manager)
25-04-2015 15:58

>можно юзать их
Слишком опасно, этот кусок в нормальном числе может быть не проинициализирован, или снаружи прилететь может, на форуме вон руками многие читают и пишут массив lonlat.
(0015858)
zed (manager)
05-05-2015 17:12

vdemidov
Как планируешь изменять интерфейсы полигонов?
(0015859)
vdemidov (manager)
05-05-2015 17:32

Скорее всего сделаю иерархию примерно как в kml, тоесть будет LineRing содержащий примитивный одиночный полигон. А SinglePolygon будет содержать внешний контур и несколько внутренних с типом LineRing.
(0016358)
vdemidov (manager)
09-08-2015 09:32

Итого уже есть поддержка дырок в базе меток на SQLite, в мержилке полигонов и экспорте в KML. В базу SML и всякие HLG, SLS сохраняться должно правильно, но пока считывается неправильно. Да и вообще все нужно тщательно проверять.
(0016359)
zed (manager)
09-08-2015 14:02

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

И самое главное, что полигон с дыркой у меня вообще никак не отображается, хотя информацию о метке показывает вроде правдоподобную.
(0016360)
vdemidov (manager)
09-08-2015 14:09

Странно. У меня из SQLite базы вроде бы отображалось. Но там еще в построителе полигонов глюки были.
(0016361)
vdemidov (manager)
09-08-2015 14:11

> *частично - создавать умеет, а читать ещё нет
Ну это тебе виднее. Добавь, если не сложно, поддержку.
(0016362)
vdemidov (manager)
09-08-2015 14:14

Еще, редактирование полигонов с дырками превращает их в мультиполигоны.
(0016363)
zed (manager)
09-08-2015 14:32

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

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

При дабл-клике по полигону из Управления метками, карта уносится в какую-то неведомую даль. Что-то явно не так с координатами и поэтому оно его и нарисовать скорее всего не может. Хотя в kml все координаты верные и при импорте из него получается мультиполигон именно там, где он и должен быть.
(0016365)
zed (manager)
09-08-2015 14:57

Упс. Не заметил пару твоих последних коммитов. Сейчас в даль не уносится и полигон с дыркой отображает.
(0016401)
vdemidov (manager)
23-08-2015 13:30

Вроде бы поддержка дырок есть везде, где я собирался ее добавить. Работает редактирование, есть импорт из KML, загрузка из HLG и SLS. Нужно тестировать. Для начала желательно на простых контурах, а то мало ли вон какая бяка в мультилиниях вылезла внезапно.
(0016402)
zed (manager)
23-08-2015 13:39

А не хочешь сделать, чтобы при редактировании дырки, перемещение точки ограничивалось внешним контуром и нельзя было бы вытянуть дырку за пределы контура?
(0016403)
vdemidov (manager)
24-08-2015 06:52

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

- Users who viewed this issue
User List Anonymous (3969x), ygorigor (1x), zed (20x), vdemidov (22x), vasketsov (3x), tds878 (1x), seven (1x), Boogier (1x), GunSmoker (1x)
Total Views 4019
Last View 31-10-2024 22:46

- 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 View Revisions
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



Copyright © 2007 - 2024 SAS.Planet Team