SqlGeography получить полигоны из мультиполигона
У меня есть стол Town
с колонкой TownBoundary
содержит полигон соответствующего города (geography
тип данных).
Для каждого города я получаю данные полигонов, которые мне нужны для генерации KML(XML) файлов, таких как:
sqlg = SqlGeography.STPolyFromText(new SqlChars(
town.TownBoundary.WellKnownValue.WellKnownText),
town.TownBoundary.CoordinateSystemId);
for (int i = 1; i <= sqlg.STNumPoints(); i++)
{
SqlGeography point = sqlg.STPointN(i);
var pLong = (point.Long).ToString().Replace(",", ".");
var pLat = (point.Lat).ToString().Replace(",", ".");
double dLong = double.Parse(pLong, CultureInfo.InvariantCulture);
double dLat = double.Parse(pLat, CultureInfo.InvariantCulture);
kmlCoordinates.Add(new Vector(dLat, dLong)); //one point od polygon
}
Значения town.TownBoundary.WellKnownValue.WellKnownText
начинается с POLYGON(..
Но недавно я понял, что некоторые города содержат больше полигонов и WellKnownText
начинается с MULTIPOLYGON(..
и функция STPolyFromText
заканчивается ошибкой
Я поместил это в try{}
блок, но в catch{}
- если значение является мультиполигоном - возможно ли как-то получить отдельные полигоны? Я знаю есть метод STMPolyFromText
, но я не могу получить доступ к отдельным полигонам, только точки как в методе STPolyFromText
,
Моя цель состоит в том, чтобы разбить мультиполигоны на многоугольники, а затем каждый полигон сделать так же, как описано выше.
1 ответ
Решил это, методом STMPolyFromText
Я могу получить массив полигонов, используя STNumGeometries
,
sqlg = SqlGeography.STMPolyFromText(
new SqlChars(town.TownBoundary.WellKnownValue.WellKnownText),
town.TownBoundary.CoordinateSystemId);
for (int i = 1; i <= sqlg.STNumGeometries(); i++)
{
SqlGeography poly = sqlg.STGeometryN(i);
//foreach poly
}