private static EndianAwareBinaryWriter WritePosition(EndianAwareBinaryWriter writer, Position position) { writer.Write(position.Longitude); writer.Write(position.Latitude); return(writer); }
private static void ToBinary(EndianAwareBinaryWriter writer, MultiPolygon multiPolygon) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.MultiPolygon); writer.Write((UInt32)multiPolygon.Coordinates.Count()); foreach (Polygon polygon in multiPolygon.Coordinates) { ToBinary(writer, polygon); } }
private static void ToBinary(EndianAwareBinaryWriter writer, GeometryCollection geometryCollection) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.GeometryCollection); writer.Write((UInt32)geometryCollection.Geometries.Count()); foreach (Geometry geometry in geometryCollection.Geometries) { ToBinary(writer, geometry); } }
private static void ToBinary(EndianAwareBinaryWriter writer, MultiLineString multiLineString) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.MultiLineString); writer.Write((UInt32)multiLineString.Coordinates.Count()); foreach (LineString lineString in multiLineString.Coordinates) { ToBinary(writer, lineString); } }
private static void ToBinary(EndianAwareBinaryWriter writer, LineString lineString) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.LineString); writer.Write(lineString.Coordinates.Count()); foreach (Position pos in lineString.Coordinates) { WritePosition(writer, pos); } }
/// <summary> /// Converts a geometry object to WKB based on what it's real underlying /// type is, like Point or LineString. /// </summary> /// <param name="geo">The geometry to serialize</param> /// <param name="endianness">The endianness to use during serialization, defaults to LITTLE endian.</param> /// <returns></returns> public static byte[] ToBinary(Geometry geo, Endianness endianness = Endianness.LITTLE) { using (MemoryStream stream = new MemoryStream()) { using (EndianAwareBinaryWriter writer = new EndianAwareBinaryWriter(stream, endianness)) { ToBinary(writer, geo); return(stream.ToArray()); } } }
private static void ToBinary(EndianAwareBinaryWriter writer, MultiPoint multiPoint) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.MultiPoint); writer.Write((UInt32)multiPoint.Coordinates.Count()); foreach (Position pos in multiPoint.Coordinates) { Point point = new Point(pos); ToBinary(writer, point); } }
private static void ToBinary(EndianAwareBinaryWriter writer, Geometry geometry) { switch (geometry.Type) { case GeoJsonType.Point: { ToBinary(writer, (Point)geometry); break; } case GeoJsonType.LineString: { ToBinary(writer, (LineString)geometry); break; } case GeoJsonType.Polygon: { ToBinary(writer, (Polygon)geometry); break; } case GeoJsonType.MultiPoint: { ToBinary(writer, (MultiPoint)geometry); break; } case GeoJsonType.MultiLineString: { ToBinary(writer, (MultiLineString)geometry); break; } case GeoJsonType.MultiPolygon: { ToBinary(writer, (MultiPolygon)geometry); break; } case GeoJsonType.GeometryCollection: { ToBinary(writer, (GeometryCollection)geometry); break; } default: { throw new NotSupportedException($"The GeoJson type {geometry.Type.ToString()} is not supported for conversion to WKB."); } } }
private static void ToBinary(EndianAwareBinaryWriter writer, Polygon polygon) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.Polygon); writer.Write((UInt32)polygon.Coordinates.Count()); foreach (LinearRing linearRing in polygon.Coordinates) { writer.Write((UInt32)linearRing.Coordinates.Count()); foreach (Position pos in linearRing.Coordinates) { WritePosition(writer, pos); } } }
private static void ToBinary(EndianAwareBinaryWriter writer, Point point) { writer.WriteEndianness(); writer.Write((UInt32)WkbType.Point); WritePosition(writer, point.Coordinates); }