Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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));
        }
Esempio n. 4
0
 private LineString ReadLineString(WkbBinaryReader reader, WkbDimensions dimensions)
 {
     return(new LineString(ReadCoordinates(reader, dimensions)));
 }
Esempio n. 5
0
 private Point ReadPoint(WkbBinaryReader reader, WkbDimensions dimensions)
 {
     return(new Point(ReadCoordinate(reader, dimensions)));
 }
Esempio n. 6
0
 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));
 }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
 private Point ReadPoint(WkbBinaryReader reader, WkbDimensions dimensions)
 {
     return new Point(ReadCoordinate(reader, dimensions));
 }
Esempio n. 9
0
 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);
 }
Esempio n. 10
0
 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);
 }
Esempio n. 11
0
 private LineString ReadLineString(WkbBinaryReader reader, WkbDimensions dimensions)
 {
     return new LineString(ReadCoordinates(reader, dimensions));
 }
Esempio n. 12
0
 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);
 }
Esempio n. 13
0
 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);
 }