flatgeobuf
Version:
A performant binary encoding for geographic data
2 lines • 1.29 kB
JavaScript
import{readFileSync as e,writeFileSync as t}from"node:fs";import o from"flatbuffers";import r from"jsts/org/locationtech/jts/geom/Envelope.js";import i from"jsts/org/locationtech/jts/geom/GeometryFactory.js";import l from"jsts/org/locationtech/jts/io/GeoJSONWriter.js";import{magicbytes as s,SIZE_PREFIX_LEN as n}from"./constants.js";import{fromByteBuffer as f}from"./header-meta.js";import{calcTreeSize as a,generateLevelBounds as m}from"./packedrtree.js";let u=e("./test/data/tiger_roads.fgb"),p=new Uint8Array(u);if(!p.subarray(0,3).every((e,t)=>s[t]===e))throw Error("Not a FlatGeobuf file");let d=new o.ByteBuffer(p),g=d.readUint32(s.length);d.setPosition(s.length);let j=f(d);if(0===j.indexNodeSize)throw Error("No index found");let c=s.length+n+g,y=j.featuresCount,h=j.indexNodeSize;j.envelope,a(y,h);let b=m(y,h).reverse();for(let e of b);let w=[],E=0;for(let e of b){for(let t=e[0];t<e[1];t++)!function(e){let t=u.readDoubleLE(c+0),o=u.readDoubleLE(c+8),r=u.readDoubleLE(c+16),i=u.readDoubleLE(c+24);w.push([e,t,o,r,i]),c+=40}(E);E++}let N=new l,v=new i;t("out.geojson",JSON.stringify({type:"FeatureCollection",features:w.map(e=>{let t=v.toGeometry(new r(e[1],e[3],e[2],e[4]));return{type:"Feature",geometry:N.write(t),properties:{level:e[0]}}})}));
//# sourceMappingURL=dumptree.js.map