10.2.Formato FlatGeoBuf
Web
Recursos
https://worace.works/2022/03/12/flatgeobuf-implementers-guide/
https://github.com/flatgeobuf/flatgeobuf
https://flatgeobuf.org/examples/maplibre/large.html
FlatgeoBuf (*.fgb)
Flatgeobuf es un formato de almacenamiento de mapas vectoriales basado en protocol buffers, un sistema de serialización de datos. Es similar a Mapbox Vector Tiles (MVT) en su capacidad de almacenar mapas vectoriales en pequeños bloques o teselas y se puede utilizar con el encabezado HTTP Range para descargar solo los bloques necesarios.
El origen de Flatgeobuf es un proyecto de código abierto desarrollado por los miembros de la comunidad de software libre y geoespacial. Se basa en el estándar de protocol buffers, un sistema de serialización de datos desarrollado por Google, y en el estándar de mapas vectoriales desarrollado por Mapbox.
Flatgeobuf fue diseñado con el objetivo de proporcionar una alternativa a los formatos geoespaciales existentes, como GeoJSON y MVT (Mapbox Vector Tiles) y tiene lo mejor de los dos formatos, és serverless como GeoJson y binario como MVT.
El desarrollo de Flatgeobuf comenzó en 2018 como un proyecto de investigación de un grupo de desarrolladores de software libre y geoespaciales, buscando una forma de mejorar la eficiencia en el uso de recursos y la velocidad en la transmisión de datos geoespaciales. Flatgeobuf es un formato relativamente nuevo, pero ha sido adoptado por algunas aplicaciones y proyectos open source como por ejemplo Qgis y Gdal.
También es compatible con MapBox GL Js
Deberemos llamar a la libreria de esta forma
<script src="https://unpkg.com/flatgeobuf@3.22.0/dist/flatgeobuf-geojson.min.js"></script>
Ejemplo de implementación javascript
function fgBoundingBox() {
const { lng, lat } = map.getCenter();
const size = 4;
return { minX: lng-size, minY: lat-size, maxX: lng+size, maxY: lat+size };
}
const fc = {type: "FeatureCollection", features: []};
let iter = flatgeobuf.deserialize("/test/data/UScounties.fgb", fgBoundingBox());
for await (let feature of iter) {
fc.features.push({...feature, id: i});
i += 1;
}
map.getSource("counties").setData(fc);