| SASGIS - SAS.Планета | 
| View Issue Details | 
| 
 | 
| ID | Project | Category | View Status | Date Submitted | Last Update | 
| 0002048 | SAS.Планета | [All Projects] Хотелка / Feature request | 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 | 
| 08-08-2025 13:24 | zed | Category | Хотелка => Хотелка / Feature request | 
	| 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 |  | 
		
			| А не хочешь сделать, чтобы при редактировании дырки, перемещение точки ограничивалось внешним контуром и нельзя было бы вытянуть дырку за пределы контура? |  | 
	| 
 | 
	|  |  |