Esempio n. 1
0
        static WknMultiPolygon ParseMultiPolygon(byte[] wkb, ref int pos)
        {
            if (wkb[pos] != 1)
            {
                throw new Exception("Sorry, only Little Endian format is supported");
            }
            var type = BitConverter.ToUInt32(wkb, pos + 1);

            if (type != (uint)WknGeometryType.WknMultiPolygon)
            {
                throw new Exception("Invalid object type");
            }
            var nbPolygons = BitConverter.ToUInt32(wkb, pos + 5);

            pos += 9;

            var polygons = new WknPolygon[nbPolygons];

            for (var r = 0; r < nbPolygons; ++r)
            {
                polygons[r] = ParsePolygon(wkb, ref pos);
            }

            return(new WknMultiPolygon(polygons));
        }
Esempio n. 2
0
 static void AppendPolygon(BinaryWriter wrt, WknPolygon polygon)
 {
     wrt.Write(LittleEndian);
     wrt.Write((uint)WknGeometryType.WknPolygon);
     wrt.Write((uint)polygon.Rings.Length);
     for (var i = 0; i < polygon.Rings.Length; ++i)
     {
         var ring = polygon.Rings[i];
         wrt.Write((uint)ring.Points.Length);
         for (var j = 0; j < ring.Points.Length; ++j)
         {
             wrt.Write(ring.Points[j].X);
             wrt.Write(ring.Points[j].Y);
         }
     }
 }