UNPKG

fcb_wasm

Version:

FlatCityBuf is a library for reading and writing CityJSON with FlatBuffers.

124 lines (98 loc) 2.98 kB
# FlatCityBuf WASM API This package provides WebAssembly bindings for the FlatCityBuf library, allowing for efficient CityJSON processing in the browser. ## Features - Read FlatCityBuf files via HTTP - Query spatial and attribute data - Convert CityJSON to OBJ format for 3D visualization ## Usage Examples ### Converting CityJSON to OBJ ```javascript // Import the wasm module import * as fcb from "fcb_wasm"; // Example CityJSON object const cityJsonObject = { type: "CityJSON", version: "1.1", transform: { scale: [1.0, 1.0, 1.0], translate: [0.0, 0.0, 0.0], }, vertices: [ [0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 0, 1], [1, 0, 1], [1, 1, 1], [0, 1, 1], ], CityObjects: { "id-1": { type: "Building", geometry: [ { type: "Solid", lod: "2", boundaries: [ // Cube faces as example [[[0, 1, 2, 3]]], // bottom face [[[4, 5, 6, 7]]], // top face [[[0, 1, 5, 4]]], // front face [[[1, 2, 6, 5]]], // right face [[[2, 3, 7, 6]]], // back face [[[3, 0, 4, 7]]], // left face ], }, ], }, }, }; // Convert CityJSON to OBJ const objContent = fcb.cjToObj(cityJsonObject); // Create a blob and download link const blob = new Blob([objContent], { type: "text/plain" }); const url = URL.createObjectURL(blob); // Create download link const a = document.createElement("a"); a.href = url; a.download = "citymodel.obj"; a.textContent = "Download OBJ"; document.body.appendChild(a); ``` The conversion process internally: 1. Takes your JavaScript CityJSON object 2. Deserializes it into a Rust CityJSON struct 3. Processes the 3D geometry to generate OBJ format 4. Returns the OBJ content as a string ### Reading FlatCityBuf via HTTP ```javascript import * as fcb from "fcb_wasm"; async function loadFcb() { // Create an HTTP FlatCityBuf reader const reader = await new fcb.HttpFcbReader( "https://example.com/path/to/model.fcb" ); // Get CityJSON metadata const metadata = await reader.cityjson(); console.log("CityJSON metadata:", metadata); // Select all features and iterate const iter = await reader.select_all(); const count = iter.features_count(); console.log(`Found ${count} features`); // Process features let feature; while ((feature = await iter.next()) !== null) { console.log("Feature:", feature); } } loadFcb().catch(console.error); ``` ## API Reference ### OBJ Conversion - `cjToObj(cityJsonObject)`: Converts a CityJSON object to OBJ format string. Expects a valid CityJSON object as input. ### FlatCityBuf Reading - `HttpFcbReader`: Class for reading FlatCityBuf files over HTTP - `WasmSpatialQuery`: Spatial query helper class - `WasmAttrQuery`: Attribute query helper class ### For more examples, the demo application is available at <https://github.com/HideBa/flatcitybuf-web-prototype>