private CoordinateSequence ReadCoordinates(WkbBinaryReader reader, WkbDimensions dimensions) { var pointCount = (int)reader.ReadUInt32(); var result = new List<Coordinate>(pointCount); for (var i = 0; i < pointCount; i++) { result.Add(ReadCoordinate(reader, dimensions)); } return new CoordinateSequence(result); }
private Coordinate ReadCoordinate(WkbBinaryReader reader, WkbDimensions dimensions) { var x = reader.ReadDouble(); var y = reader.ReadDouble(); var z = dimensions == WkbDimensions.XYZ || dimensions == WkbDimensions.XYZM ? reader.ReadDouble() : double.NaN; var m = dimensions == WkbDimensions.XYM || dimensions == WkbDimensions.XYZM ? reader.ReadDouble() : double.NaN; if (!double.IsNaN(z) && !double.IsNaN(m)) return new CoordinateZM(y, x, z, m); if (!double.IsNaN(z)) return new CoordinateZ(y, x, z); if (!double.IsNaN(m)) return new CoordinateM(y, x, m); return new Coordinate(y, x); }
private Coordinate ReadCoordinate(WkbBinaryReader reader, WkbDimensions dimensions) { var x = reader.ReadDouble(); var y = reader.ReadDouble(); var z = dimensions == WkbDimensions.XYZ || dimensions == WkbDimensions.XYZM ? reader.ReadDouble() : double.NaN; var m = dimensions == WkbDimensions.XYM || dimensions == WkbDimensions.XYZM ? reader.ReadDouble() : double.NaN; if (!double.IsNaN(z) && !double.IsNaN(m)) { return(new CoordinateZM(y, x, z, m)); } if (!double.IsNaN(z)) { return(new CoordinateZ(y, x, z)); } if (!double.IsNaN(m)) { return(new CoordinateM(y, x, m)); } return(new Coordinate(y, x)); }
private LineString ReadLineString(WkbBinaryReader reader, WkbDimensions dimensions) { return(new LineString(ReadCoordinates(reader, dimensions))); }
private Point ReadPoint(WkbBinaryReader reader, WkbDimensions dimensions) { return(new Point(ReadCoordinate(reader, dimensions))); }
private Polygon ReadTriangle(WkbBinaryReader reader, WkbDimensions dimensions) { var rings = ReadPolygonInner(reader, dimensions); if (rings.Count == 0) return new Triangle(); return new Triangle(rings.First(), rings.Skip(1)); }
private List<LinearRing> ReadPolygonInner(WkbBinaryReader reader, WkbDimensions dimensions) { var result = new List<LinearRing>(); var ringsCount = (int)reader.ReadUInt32(); for (var i = 0; i < ringsCount; i++) result.Add(new LinearRing(ReadCoordinates(reader, dimensions))); return result; }
private Point ReadPoint(WkbBinaryReader reader, WkbDimensions dimensions) { return new Point(ReadCoordinate(reader, dimensions)); }
private MultiPolygon ReadMultiPolygon(WkbBinaryReader reader, WkbDimensions dimensions) { var pointsCount = (int)reader.ReadUInt32(); var polygons = new List<Polygon>(); for (var i = 0; i < pointsCount; i++) polygons.Add(ReadPolygon(reader, dimensions)); return new MultiPolygon(polygons); }
private MultiLineString ReadMultiLineString(WkbBinaryReader reader, WkbDimensions dimensions) { var pointsCount = (int)reader.ReadUInt32(); var lineStrings = new List<LineString>(); for (var i = 0; i < pointsCount; i++) lineStrings.Add(ReadLineString(reader, dimensions)); return new MultiLineString(lineStrings); }
private LineString ReadLineString(WkbBinaryReader reader, WkbDimensions dimensions) { return new LineString(ReadCoordinates(reader, dimensions)); }
private MultiPolygon ReadMultiPolygon(WkbBinaryReader reader, WkbDimensions dimensions) { var pointsCount = (int)reader.ReadUInt32(); var polygons = new List<Polygon>(); for (var i = 0; i < pointsCount; i++) { var polygon = ReadGeometry(reader) as Polygon; if (polygon != null) polygons.Add(polygon); else throw new SerializationException("Geometry not a polygon."); } return new MultiPolygon(polygons); }
private MultiLineString ReadMultiLineString(WkbBinaryReader reader, WkbDimensions dimensions) { var pointsCount = (int)reader.ReadUInt32(); var lineStrings = new List<LineString>(); for (var i = 0; i < pointsCount; i++) { var lineString = ReadGeometry(reader) as LineString; if (lineString != null) lineStrings.Add(lineString); else throw new SerializationException("Geometry not a linestring."); } return new MultiLineString(lineStrings); }