public static List <Point2 <double> > BuildCoords(PositionSet ps) { if (ps == null) { return(null); } List <Point2 <double> > list = new List <Point2 <double> >(); foreach (Position position in ps.Positions) { double num1 = double.NaN; int num2; if (!num1.Equals(position.X)) { num1 = double.NaN; num2 = !num1.Equals(position.Y) ? 1 : 0; } else { num2 = 0; } if (num2 == 0) { return(null); } list.Add(factory.ConstructPoint(position.X, position.Y)); } return(list); }
public static PolylineBag2 <double> BuildMultiLineString(PositionSet ps) { try { if (ps != null) { if (ps.Positions.Count > 0) { List <Polyline2 <double> > list = new List <Polyline2 <double> >(); foreach (Position position in ps.Positions) { Polyline2 <double> lineString = BuildLineString(position as PositionSet); if (lineString == null) { return(null); } list.Add(lineString); } if (list.Count > 0) { return(factory.ConstructPolylineBag(list)); } } } } catch { } return(null); }
private static Position FetchCoordinates(JArray arr, PositionType hint) { if (arr == null || arr.Count <= 0) { return((Position)null); } if (arr[0].Type != JTokenType.Array) { try { return(new Position(Extensions.Value <double>((IEnumerable <JToken>)arr[0]), Extensions.Value <double>((IEnumerable <JToken>)arr[1]), hint)); } catch { } return((Position)null); } PositionSet positionSet = new PositionSet(hint); foreach (JToken jtoken in arr) { if (jtoken != null && jtoken.Type == JTokenType.Array) { Position position = GeoJsonUtils.FetchCoordinates(jtoken as JArray); if (position != null) { positionSet.Positions.Add(position); } } } return((Position)positionSet); }
public static Geometry2Bag <double> BuildGeometryCollection(PositionSet ps) { if (ps != null && (ps.GeometryHint == PositionType.GeometryCollection || ps.GeometryHint == PositionType.Unknown)) { List <IGeometry2 <double> > list = new List <IGeometry2 <double> >(); foreach (Position p in ps.Positions) { IGeometry2 <double> geometry = null; if (p.GeometryHint == PositionType.Point) { geometry = BuildPoint(p); } else if (p.GeometryHint == PositionType.MultiPoint) { geometry = BuildMultiPoint(p as PositionSet); } else if (p.GeometryHint == PositionType.LineString) { geometry = BuildLineString(p as PositionSet); } else if (p.GeometryHint == PositionType.MultiLineString) { geometry = BuildMultiLineString(p as PositionSet); } else if (p.GeometryHint == PositionType.Polygon) { geometry = BuildPolygon(p as PositionSet); } else if (p.GeometryHint == PositionType.MultiPolygon) { geometry = BuildMultiPolygon(p as PositionSet); } if (geometry == null) { return(null); } list.Add(geometry); } if (list.Count > 0) { return(factory.ConstructGeometryBag(list)); } } return(null); }
public static Polyline2 <double> BuildLineString(PositionSet ps) { try { if (ps != null) { List <Point2 <double> > list = BuildCoords(ps); if (list != null && list.Count > 1) { return(factory.ConstructPolyline(list)); } } } catch { } return(null); }
public static PointBag2 <double> BuildMultiPoint(PositionSet ps) { try { if (ps != null) { List <Point2 <double> > list = BuildCoords(ps); if (list != null && list.Count > 1) { return(factory.ConstructPointBag((IEnumerable <Point2 <double> >)list)); } } } catch { } return(null); }
public static PolygonBag2 <double> BuildMultiPolygon(PositionSet ps) { if (ps != null && ps.Positions.Count > 0) { List <Polygon2 <double> > list = new List <Polygon2 <double> >(); foreach (Position position in ps.Positions) { Polygon2 <double> polygon = BuildPolygon(position as PositionSet); if (polygon == null) { return(null); } list.Add(polygon); } if (list.Count > 0) { return(factory.ConstructPolygonBag(list)); } } return(null); }
public static Polygon2 <double> BuildPolygon(PositionSet ps) { try { if (ps != null && ps.Positions.Count > 0) { List <Point2 <double> > list1 = BuildCoords(ps.Positions[0] as PositionSet); if (list1 != null && list1.Count > 2) { if (ps.Positions.Count == 1) { return(factory.ConstructPolygon(factory.ConstructRing(list1))); } Ring2 <double> linearRing1 = factory.ConstructRing(list1); List <Ring2 <double> > list2 = new List <Ring2 <double> >(); for (int index = 1; index < ps.Positions.Count; ++index) { Position position = ps.Positions[index]; if (position != null) { List <Point2 <double> > list3 = BuildCoords(position as PositionSet); if (list3 != null) { Ring2 <double> linearRing2 = factory.ConstructRing(list3); list2.Add(linearRing2); } } } return(factory.ConstructPolygon(linearRing1, list2.ToArray())); } } } catch { } return(null); }