/// <summary> /// Converts a GeoJSON FeatureCollection to a list with data polygons. /// </summary> /// <param name="featureCollection">The GeoJSON FeatureCollection.</param> /// <returns>Converted polygons.</returns> public static List <DataPolygon> ConvertToDataPolygons(FeatureCollection featureCollection) { var dataPolygons = new List <DataPolygon>(); if (featureCollection.IsNull()) { return(dataPolygons); } foreach (Feature feature in featureCollection.Features) { ////if (feature.Type == GeoJSONObjectType.Polygon) if (feature.Geometry != null && feature.Geometry.GetType() == typeof(ArtDatabanken.GIS.GeoJSON.Net.Geometry.Polygon)) { ArtDatabanken.GIS.GeoJSON.Net.Geometry.Polygon polygon = (ArtDatabanken.GIS.GeoJSON.Net.Geometry.Polygon)feature.Geometry; DataPolygon dataPolygon = ConvertToDataPolygon(polygon); dataPolygons.Add(dataPolygon); } else if (feature.Geometry != null && feature.Geometry.GetType() == typeof(ArtDatabanken.GIS.GeoJSON.Net.Geometry.MultiPolygon)) { ArtDatabanken.GIS.GeoJSON.Net.Geometry.MultiPolygon multiPolygon = (ArtDatabanken.GIS.GeoJSON.Net.Geometry.MultiPolygon)feature.Geometry; foreach (ArtDatabanken.GIS.GeoJSON.Net.Geometry.Polygon polygon in multiPolygon.Coordinates) { DataPolygon dataPolygon = ConvertToDataPolygon(polygon); dataPolygons.Add(dataPolygon); } } } return(dataPolygons); }
/// <summary> /// Converts a GeoJSON Polygon to a DataPolygon. /// </summary> /// <param name="polygon">The GeoJSON polygon.</param> /// <returns>Converted DataPolygon.</returns> public static DataPolygon ConvertToDataPolygon(ArtDatabanken.GIS.GeoJSON.Net.Geometry.Polygon polygon) { var dataPolygon = new DataPolygon(); dataPolygon.LinearRings = new List <DataLinearRing>(); foreach (ArtDatabanken.GIS.GeoJSON.Net.Geometry.LineString lineString in polygon.Coordinates) { var dataLinearRing = new DataLinearRing(); dataLinearRing.Points = new List <DataPoint>(); foreach (GeographicPosition pos in lineString.Coordinates) { var dataPoint = new DataPoint(pos.Longitude, pos.Latitude, pos.Altitude); dataLinearRing.Points.Add(dataPoint); } dataPolygon.LinearRings.Add(dataLinearRing); } return(dataPolygon); }