writeGeometry method
Parse a geometry starting at offset. @param geom the geometry to write @param dest the value setting to be used for writing
Implementation
void writeGeometry(Geometry geom, ValueSetter dest) {
// write endian flag
dest.setByte(dest.endian);
EGeometryType geometryType = EGeometryType.forGeometry(geom);
// write typeword
int typeword = geometryType.getTypeCode(geom);
if (typeword > 7 && typeword < 3000) {
//geom.dimension == 3) {
typeword |= 0x80000000;
}
if (typeword > 1999) {
//geom.haveMeasure) {
typeword |= 0x40000000;
}
if (geom.getSRID() != BinaryParser.UNKNOWN_SRID) {
typeword |= 0x20000000;
}
dest.setInt(typeword);
if (geom.getSRID() != BinaryParser.UNKNOWN_SRID) {
dest.setInt(geom.getSRID());
}
switch (geometryType) {
case EGeometryType.POINT:
writePoint(geom.getCoordinate() ?? Coordinate.empty2D(), dest);
break;
case EGeometryType.LINESTRING:
writeLineString(geom as LineString, dest);
break;
case EGeometryType.POLYGON:
writePolygon(geom as Polygon, dest);
break;
case EGeometryType.MULTIPOINT:
writeMultiPoint(geom as MultiPoint, dest);
break;
case EGeometryType.MULTILINESTRING:
writeMultiLineString(geom as MultiLineString, dest);
break;
case EGeometryType.MULTIPOLYGON:
writeMultiPolygon(geom as MultiPolygon, dest);
break;
case EGeometryType.GEOMETRYCOLLECTION:
writeCollection(geom as GeometryCollection, dest);
break;
default:
throw ArgumentError("Unknown Geometry Type: $geometryType");
}
}