writeGeometry method

void writeGeometry(
  1. Geometry geom,
  2. ValueSetter dest
)

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");
  }
}