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