public static Header asFlatBuffer()

in baremaps-flatgeobuf/src/main/java/org/apache/baremaps/flatgeobuf/FlatGeoBufWriter.java [103:178]


  public static Header asFlatBuffer(FlatGeoBuf.Header header) {
    FlatBufferBuilder builder = new FlatBufferBuilder(4096);

    int[] columnsArray = header.columns().stream().mapToInt(c -> {
      int nameOffset = builder.createString(c.name());
      int type = c.type().ordinal();
      return Column.createColumn(
          builder, nameOffset, type, 0, 0, c.width(), c.precision(), c.scale(), c.nullable(),
          c.unique(),
          c.primaryKey(), 0);
    }).toArray();
    int columnsOffset =
        Header.createColumnsVector(builder, columnsArray);

    int envelopeOffset = 0;
    if (header.envelope() != null) {
      envelopeOffset = Header.createEnvelopeVector(builder,
          header.envelope().stream().mapToDouble(d -> d).toArray());
    }

    int nameOffset = 0;
    if (header.name() != null) {
      nameOffset = builder.createString(header.name());
    }

    int crsOrgOffset = 0;
    if (header.crs() != null && header.crs().org() != null) {
      crsOrgOffset = builder.createString(header.crs().org());
    }

    int crsNameOffset = 0;
    if (header.crs() != null && header.crs().name() != null) {
      crsNameOffset = builder.createString(header.crs().name());
    }

    int crsDescriptionOffset = 0;
    if (header.crs() != null && header.crs().description() != null) {
      crsDescriptionOffset = builder.createString(header.crs().description());
    }

    int crsWktOffset = 0;
    if (header.crs() != null && header.crs().wkt() != null) {
      crsWktOffset = builder.createString(header.crs().wkt());
    }

    int crsCodeStringOffset = 0;
    if (header.crs() != null && header.crs().codeString() != null) {
      crsCodeStringOffset = builder.createString(header.crs().codeString());
    }

    Crs.startCrs(builder);
    Crs.addOrg(builder, crsOrgOffset);
    if (header.crs() != null) {
      Crs.addCode(builder, header.crs().code());
    }
    Crs.addName(builder, crsNameOffset);
    Crs.addDescription(builder, crsDescriptionOffset);
    Crs.addWkt(builder, crsWktOffset);
    Crs.addCodeString(builder, crsCodeStringOffset);
    int crsOffset = Crs.endCrs(builder);

    Header.startHeader(builder);
    Header.addGeometryType(builder, header.geometryType().getValue());
    Header.addFeaturesCount(builder, header.featuresCount());
    Header.addIndexNodeSize(builder, header.indexNodeSize());
    Header.addColumns(builder, columnsOffset);
    Header.addEnvelope(builder, envelopeOffset);
    Header.addName(builder, nameOffset);
    Header.addCrs(builder, crsOffset);

    int offset = Header.endHeader(builder);
    builder.finish(offset);

    ByteBuffer buffer = builder.dataBuffer().asReadOnlyBuffer();
    return Header.getRootAsHeader(buffer);
  }