Example #1
0
        private static EndianAwareBinaryWriter WritePosition(EndianAwareBinaryWriter writer, Position position)
        {
            writer.Write(position.Longitude);
            writer.Write(position.Latitude);

            return(writer);
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
            }
        }
Example #4
0
        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);
            }
        }
Example #5
0
        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);
            }
        }
Example #6
0
        /// <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());
                }
            }
        }
Example #7
0
        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);
            }
        }
Example #8
0
        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.");
            }
            }
        }
Example #9
0
        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);
                }
            }
        }
Example #10
0
 private static void ToBinary(EndianAwareBinaryWriter writer, Point point)
 {
     writer.WriteEndianness();
     writer.Write((UInt32)WkbType.Point);
     WritePosition(writer, point.Coordinates);
 }