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
} 
Другие вопросы по тегам