Группировка географических фигур
Я использую Dundas Maps и пытаюсь нарисовать карту мира, где страны сгруппированы в регионы, которые являются специфическими для реализации бизнеса.
У меня есть данные формы (точки и сегменты) для каждой страны в мире. Я могу объединять страны в регионы, добавляя все точки и сегменты для стран внутри региона в новую форму региона.
foreach(var region in GetAllRegions()){
var regionShape = new Shape { Name = region.Name };
foreach(var country in GetCountriesInRegion(region.Id)){
var countryShape = GetCountryShape(country.Id);
regionShape.AddSegments(countryShape.ShapeData.Points, countryShape.ShapeData.Segments);
}
map.Shapes.Add(regionShape);
}
Проблема в том, что границы страны все еще отображаются внутри региона, и я хочу удалить их, чтобы отображались только региональные границы.
Полигоны Dundas должны начинаться и заканчиваться в одной и той же точке. Это касается всех форм страны. Теперь мне нужен алгоритм, который может:
Определите, где границы страны пересекаются на региональной границе, чтобы я мог присоединиться к сегментам региональной границы.Определите, какие границы страны не являются региональными, чтобы я мог их отменить.Отсортируйте получающиеся региональные точки так, чтобы они последовательно описывали границы формы.Ниже я дошел до карты. Вы можете видеть, что границы страны все еще должны быть удалены. Например, границу между Монголией и Китаем следует отменить, а границу между Монголией и Россией следует сохранить.
Причина, по которой мне нужно сохранить региональную границу, заключается в том, что цвета региона будут важны при передаче информации, но смежные области могут быть одного цвета. Регионы могут меняться, чтобы включать или исключать страны, и поэтому формирование регионов должно быть динамичным.
РЕДАКТИРОВАТЬ: Теперь я знаю, что я ищу СОЮЗ полигонов. Дэвид Линобъясняет как это сделать использование пространственных функций в SQL Server 2008, которые могут быть опцией, но мои усилия остановились, потому что результирующее объединение многоугольников настолько сложно, что SQL усекает его до 43 680 символов. Сейчас я пытаюсь найти обходной путь для этого или найти способ объединения в коде.