Saltar a contenido

10.2.Formato FlatGeoBuf

Web

https://flatgeobuf.org/

alt text

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

Estructura interna

alt text