private bool TryParseCoordinate(JArray coordinates, out CoordinateInfo result) { if (coordinates != null && coordinates.Count > 1 && coordinates.All(x => x is JValue)) { var vals = coordinates.Cast<JValue>().ToList(); if (vals.All(x => x.Type == JTokenType.Float || x.Type == JTokenType.Integer)) { result = new CoordinateInfo { X = Convert.ToDouble(vals[0].Value), Y = Convert.ToDouble(vals[1].Value), Z = vals.Count > 2 ? Convert.ToDouble(vals[2].Value) : (double?)null, M = vals.Count > 3 ? Convert.ToDouble(vals[3].Value) : (double?)null }; return true; } } result = null; return false; }
private bool TryParseCoordinateArray(JArray coordinates, out CoordinateInfo[] result) { result = null; if (coordinates == null) return false; var valid = coordinates.All(x => x is JArray); if (!valid) return false; var tempResult = new CoordinateInfo[coordinates.Count]; for (var index = 0; index < coordinates.Count; index++) { if (!TryParseCoordinate((JArray)coordinates[index], out tempResult[index])) return false; } result = tempResult; return true; }
public object ToPolygon(CoordinateInfo[][] coordinates) { if (coordinates.Length == 0) return Polygon.Empty; return _geometryFactory.CreatePolygon( _geometryFactory.CreateLinearRing(coordinates.First().Select(MakeCoordinate).ToArray()), coordinates.Skip(1).Select(x => _geometryFactory.CreateLinearRing(x.Select(MakeCoordinate).ToArray())).ToArray() ); }
private Coordinate MakeCoordinate(CoordinateInfo coordinate) { if (coordinate.Z.HasValue) return new Coordinate(coordinate.X, coordinate.Y, coordinate.Z.Value); return new Coordinate(coordinate.X, coordinate.Y); }
public object ToMultiPolygon(CoordinateInfo[][][] coordinates) { if (coordinates.Length == 0) return MultiPolygon.Empty; return _geometryFactory.CreateMultiPolygon(coordinates.Select(ToPolygon).Cast<IPolygon>().ToArray()); }
public object ToPoint(CoordinateInfo coordinates) { if (coordinates == null) return Point.Empty; return _geometryFactory.CreatePoint(MakeCoordinate(coordinates)); }
public object ToMultiLineString(CoordinateInfo[][] coordinates) { if (coordinates.Length == 0) return MultiLineString.Empty; return _geometryFactory.CreateMultiLineString(coordinates.Select(ToLineString).Cast<IBasicLineString>().ToArray()); }
public object ToLineString(CoordinateInfo[] coordinates) { if (coordinates.Length == 0) return LineString.Empty; return _geometryFactory.CreateLineString(coordinates.Select(MakeCoordinate).ToArray()); }
public object ToEnvelope(CoordinateInfo[] coordinates) { if (coordinates == null || coordinates.Length != 2) return null; return new Envelope(MakeCoordinate(coordinates[0]), MakeCoordinate(coordinates[1])); }
private static void WriteJsonCoordinate(JsonWriter writer, CoordinateInfo coordinate) { writer.WriteStartArray(); writer.WriteValue(coordinate.X); writer.WriteValue(coordinate.Y); if (coordinate.Z.HasValue) writer.WriteValue(coordinate.Z.Value); if (coordinate.Z.HasValue && coordinate.M.HasValue) writer.WriteValue(coordinate.M.Value); writer.WriteEndArray(); }
protected static void WriteJsonCoordinatesEnumerable2(JsonWriter writer, CoordinateInfo[][][] coordinates) { writer.WriteStartArray(); foreach (var coordinate in coordinates) WriteJsonCoordinatesEnumerable(writer, coordinate); writer.WriteEndArray(); }