Create a layer
Add a new floor or layer to a location, either by uploading a floorplan file or defining it via the Spatial API, to serve as the container for rooms and spaces.
Option A — Create a layer via the Spatial API
Prerequisites
Completed Setup Your Development Environment and Send Your First API Request
Node.js v18+ and npm v9+
A valid gospace API key in your
.env
fileAn existing location_id (layers must be linked to a location)
1) Create create-layer.ts
create-layer.ts
import "dotenv/config";
import GospaceAI from "@gospace-ai/api";
async function main() {
const gospace = new GospaceAI(process.env.GOSPACE_API_KEY!);
const res = await gospace.spatial.createLayers({
layers: [
{
location_id: "loc_123", // required: your existing location
name: "Level 1", // required: layer name
// external_id: "level-1", // optional
// ...include any other fields your schema supports
},
],
});
console.log(JSON.stringify(res.data, null, 2));
}
main().catch((err) => {
console.error("Request failed:", err);
process.exit(1);
});
Run:
npx tsx create-layer.ts
Option B — Create a layer by uploading a floorplan (System API)
Use a file (e.g., DXF or PDF) to seed a new layer for a location. This is an async process: you request a signed URL, upload the file, and the system processes it.
Prerequisites
Completed Setup Your Development Environment and Send Your First API Request
Node.js v18+ and npm v9+
A valid gospace API key in your
.env
fileAn existing location_id
A floorplan file in DXF or PDF format
The correct MIME type for your file (
application/dxf
orapplication/pdf
)Access to the file path locally to perform the signed URL upload
1) Request a signed URL
// request-upload.ts
import "dotenv/config";
import GospaceAI from "@gospace-ai/api";
async function main() {
const gospace = new GospaceAI(process.env.GOSPACE_API_KEY!);
const upload = await gospace.system.uploadFile({
file_type: "application/dxf", // or "application/pdf"
upload_process: "floorplan", // use the floorplan ingestion process
binding_id: "loc_123", // bind the upload to your location_id
});
console.log(JSON.stringify(upload.data, null, 2));
// -> { signed_url, upload_id, ... }
}
main().catch(console.error);
Run:
npx tsx request-upload.ts
2) Upload the file to the signed URL
// put-upload.ts
import "dotenv/config";
import { readFile } from "node:fs/promises";
async function main() {
const signedUrl = process.env.SIGNED_URL!; // set from step 1 output
const filePath = "./floorplans/level1.dxf"; // your local file path
const body = await readFile(filePath);
const resp = await fetch(signedUrl, {
method: "PUT",
headers: {
"Content-Type": "application/dxf", // must match file_type used in step 1
},
body,
});
if (!resp.ok) {
throw new Error(`Upload failed: ${resp.status} ${resp.statusText}`);
}
console.log("Upload successful.");
}
main().catch((err) => {
console.error("Upload failed:", err);
process.exit(1);
});
Run:
SIGNED_URL="<<paste from step 1>>" npx tsx put-upload.ts
Last updated
Was this helpful?