Photogrammetry (DSLR / Mirrorless)
Use this workflow when you capture still photos with a DSLR, mirrorless camera, or drone and want to convert them into a WebAR³ VPS map.
Capture Guidelines
- Aim for 70–80 % overlap between consecutive photos.
- Shoot at multiple heights and include easily recognisable landmarks.
- Keep exposure consistent; avoid motion blur.
- Optional: place QR-sized ground control markers to validate scale.
Reconstruction
- Import the photo set into Metashape, RealityCapture, Meshroom, or your preferred photogrammetry suite.
- Run alignment and dense reconstruction steps.
- Export the resulting point cloud as LAS/LAZ/PLY with colour attributes. Keep texture resolution manageable (≤8K).
Upload with the Python REST API
The snippet below mirrors the flow from the space.web-ar.studio: request an upload slot, stream the LAS/PLY file, and finalise the map so that back-end processing starts.
# upload_photogrammetry.py
from pathlib import Path
import os
import requests
API_BASE = "https://was-vps.web-ar.xyz/vps/api/v3"
TOKEN = os.environ["WEBAR3_TOKEN"] # create a personal token in space.web-ar.studio
DATA_PATH = Path("outputs/cathedral.las")
headers = {"Authorization": f"Bearer {TOKEN}"}
payload = {
"name": "Old Town Square",
"dataType": "point_cloud",
"sourceFormat": "las",
"coordinate": {"lat": 50.08746, "lon": 14.42125, "alt": 194.2}
}
init = requests.post(f"{API_BASE}/maps/import", json=payload, headers=headers)
init.raise_for_status()
info = init.json()
upload_url = info["uploadUrl"]
map_id = info["mapId"]
with DATA_PATH.open("rb") as src:
put = requests.put(upload_url, data=src, headers={"Content-Type": "application/octet-stream"})
put.raise_for_status()
finalize = requests.post(f"{API_BASE}/maps/{map_id}/finalize", json={"publish": False}, headers=headers)
finalize.raise_for_status()
print(f"Map {map_id} queued → status: {finalize.json()['status']}")
WEBAR3_TOKENis a bearer token generated in Console → Settings → API tokens.dataType/sourceFormatdescribe the payload so the back-end picks the correct pipeline.- Set
publishtoTrueif you wish to auto-publish once processing finishes; otherwise review the map in the Console first.
Monitor Processing
import os
import requests
API_BASE = "https://was-vps.web-ar.xyz/vps/api/v3"
TOKEN = os.environ["WEBAR3_TOKEN"]
MAP_ID = "map_12345"
resp = requests.get(f"{API_BASE}/maps/{MAP_ID}", headers={"Authorization": f"Bearer {TOKEN}"})
resp.raise_for_status()
print(resp.json()["status"]) # e.g. PROCESSING → READY → PUBLISHED
Once the status moves to READY, open space.web-ar.studio → Maps → Preview to inspect the geometry, heatmap, and anchors. Re-run the photogrammetry step if you notice gaps or mirrored geometry.