private static void WriteMultiLineString(IMultiLineString geom, WriteCoordinates writeCoordinates, GaiaExport gaiaExport, BinaryWriter bw) { gaiaExport.WriteInt32(bw, geom.NumGeometries); for (var i = 0; i < geom.NumGeometries; i++) { bw.Write((byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY); gaiaExport.WriteInt32(bw, gaiaExport.CoordinateFlag | (int)GaiaGeoGeometry.GAIA_LINESTRING); WriteLineString((ILineString)geom[i], writeCoordinates, gaiaExport, bw); } }
private static void WriteMultiPolygon(IGeometryCollection geom, WriteCoordinates writeCoordinates, GaiaExport gaiaExport, BinaryWriter bw) { gaiaExport.WriteInt32(bw, geom.NumGeometries); for (var i = 0; i < geom.NumGeometries; i++) { bw.Write((byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY); gaiaExport.WriteInt32(bw, gaiaExport.CoordinateFlag | (int)GaiaGeoGeometry.GAIA_POLYGON); WritePolygon((IPolygon)geom[i], writeCoordinates, gaiaExport, bw); } }
private static void WriteLineString(ILineString geom, WriteCoordinates writeCoordinates, GaiaExport gaiaExport, BinaryWriter bw) { var seq = geom.CoordinateSequence; gaiaExport.WriteInt32(bw, seq.Count); writeCoordinates(geom.CoordinateSequence, gaiaExport, bw); }
private static void WritePolygon(IPolygon geom, WriteCoordinates writeCoordinates, GaiaExport gaiaExport, BinaryWriter bw) { gaiaExport.WriteInt32(bw, geom.NumInteriorRings + 1); WriteLineString(geom.Shell, writeCoordinates, gaiaExport, bw); for (var i = 0; i < geom.NumInteriorRings; i++) { WriteLineString(geom.GetInteriorRingN(i), writeCoordinates, gaiaExport, bw); } }
private static void WriteGeometryCollection(IGeometryCollection geom, GaiaExport gaiaExport, BinaryWriter bw) { gaiaExport.WriteInt32(bw, geom.NumGeometries); for (var i = 0; i < geom.NumGeometries; i++) { bw.Write((byte)GaiaGeoBlobMark.GAIA_MARK_ENTITY); WriteGeometry(geom[i], gaiaExport, bw); } }
private static void WriteGeometry(IGeometry geom, GaiaExport gaiaExport, BinaryWriter bw) { WriteCoordinates writeCoordinates = SetWriteCoordinatesFunction(gaiaExport); //Geometry type int coordinateFlag = gaiaExport.CoordinateFlag; int coordinateFlagNotValidForCompression = coordinateFlag > 1000000 ? coordinateFlag - 1000000 : coordinateFlag; switch (geom.GeometryType.ToUpper()) { case "POINT": gaiaExport.WriteInt32(bw, (int)(GaiaGeoGeometry.GAIA_POINT) | coordinateFlagNotValidForCompression); WritePoint((IPoint)geom, writeCoordinates, gaiaExport, bw); break; case "LINESTRING": gaiaExport.WriteInt32(bw, (int)GaiaGeoGeometry.GAIA_LINESTRING | coordinateFlag); WriteLineString((ILineString)geom, writeCoordinates, gaiaExport, bw); break; case "POLYGON": gaiaExport.WriteInt32(bw, (int)GaiaGeoGeometry.GAIA_POLYGON | coordinateFlag); WritePolygon((IPolygon)geom, writeCoordinates, gaiaExport, bw); break; case "MULTIPOINT": gaiaExport.WriteInt32(bw, (int)GaiaGeoGeometry.GAIA_MULTIPOINT | coordinateFlagNotValidForCompression); WriteMultiPoint((IMultiPoint)geom, writeCoordinates, gaiaExport, bw); break; case "MULTILINESTRING": gaiaExport.WriteInt32(bw, (int)GaiaGeoGeometry.GAIA_MULTILINESTRING | coordinateFlag); WriteMultiLineString((IMultiLineString)geom, writeCoordinates, gaiaExport, bw); break; case "MULTIPOLYGON": gaiaExport.WriteInt32(bw, (int)GaiaGeoGeometry.GAIA_MULTIPOLYGON | coordinateFlag); WriteMultiPolygon((IMultiPolygon)geom, writeCoordinates, gaiaExport, bw); break; case "GEOMETRYCOLLECTION": gaiaExport.WriteInt32(bw, (int)GaiaGeoGeometry.GAIA_GEOMETRYCOLLECTION | coordinateFlagNotValidForCompression); WriteGeometryCollection((IGeometryCollection)geom, gaiaExport, bw); break; default: throw new ArgumentException("unknown geometry type"); } }
private static void WritePolygon(IPolygon geom, WriteCoordinates writeCoordinates, GaiaExport gaiaExport, BinaryWriter bw) { gaiaExport.WriteInt32(bw, geom.NumInteriorRings + 1); WriteLineString(geom.Shell, writeCoordinates, gaiaExport, bw); for (var i = 0; i < geom.NumInteriorRings; i++) WriteLineString(geom.GetInteriorRingN(i), writeCoordinates, gaiaExport, bw); }