in baremaps-core/src/main/java/org/apache/baremaps/storage/flatgeobuf/FlatGeoBufTypeConversion.java [77:119]
public static void writeHeaderMeta(HeaderMeta headerMeta, WritableByteChannel channel,
FlatBufferBuilder builder) throws IOException {
int[] columnsArray = headerMeta.columns.stream().mapToInt(c -> {
int nameOffset = builder.createString(c.name);
int type = c.type;
return org.wololo.flatgeobuf.generated.Column.createColumn(builder, nameOffset, type, 0, 0,
c.width, c.precision, c.scale, c.nullable, c.unique,
c.primary_key, 0);
}).toArray();
int columnsOffset = Header.createColumnsVector(builder, columnsArray);
int nameOffset = 0;
if (headerMeta.name != null) {
nameOffset = builder.createString(headerMeta.name);
}
int crsOffset = 0;
if (headerMeta.srid != 0) {
Crs.startCrs(builder);
Crs.addCode(builder, headerMeta.srid);
crsOffset = Crs.endCrs(builder);
}
int envelopeOffset = 0;
if (headerMeta.envelope != null) {
envelopeOffset = Header.createEnvelopeVector(builder,
new double[] {headerMeta.envelope.getMinX(), headerMeta.envelope.getMinY(),
headerMeta.envelope.getMaxX(), headerMeta.envelope.getMaxY()});
}
Header.startHeader(builder);
Header.addGeometryType(builder, headerMeta.geometryType);
Header.addIndexNodeSize(builder, headerMeta.indexNodeSize);
Header.addColumns(builder, columnsOffset);
Header.addEnvelope(builder, envelopeOffset);
Header.addName(builder, nameOffset);
Header.addCrs(builder, crsOffset);
Header.addFeaturesCount(builder, headerMeta.featuresCount);
int offset = Header.endHeader(builder);
builder.finishSizePrefixed(offset);
ByteBuffer dataBuffer = builder.dataBuffer();
while (dataBuffer.hasRemaining())
channel.write(dataBuffer);
}