01Overview
This guide is for designers and GIS analysts who create flood protection geometry in Rhino or ArcGIS Pro and need to format that work for the BCA flood analysis pipeline. It covers the exact geometry types, attribute fields, naming conventions, and coordinate system requirements the pipeline expects.
For the mechanics of actually loading formatted data into the pipeline, see the companion Data Loading Guide.
Rhino users export .3dm files, which are ingested via ingest_cad.py.
Attributes are set per-object using Rhino's SetUserText command.
ArcGIS Pro users export .geojson files directly. Attributes are columns
in the feature class attribute table. Both routes produce the same pipeline-ready GeoJSON.
02Quick Reference: What to Produce
Every feature you create falls into one of three categories. Each has a required geometry type and a small set of required attributes.
Both measure_type and measure_name are automatically determined —
measure_type from the Rhino layer name, and measure_name as a sequential label
(e.g., levee_1, levee_2) if not set via SetUserText or Rhino object name.
The table below shows the attributes you should provide, along with
default values that apply if you don't override them.
| Category | Measure Type | Geometry | Flood-Relevant Attributes | Optional Attributes | Defaults (if not set) |
|---|---|---|---|---|---|
| Barriers | levee | LineString | crest_elevation_m, width_m |
measure_name, scenario, scenario_label |
measure_name: levee_1, …; crest_elevation_m: 3.5; width_m: 2.0 |
| seawall | LineString | crest_elevation_m, width_m |
measure_name, scenario, scenario_label |
measure_name: seawall_1, …; crest_elevation_m: 3.5; width_m: 2.0 |
|
| gate | LineString | crest_elevation_m |
measure_name, scenario, scenario_label |
measure_name: gate_1, …; crest_elevation_m: 3.5 |
|
| platform | Polygon | crest_elevation_m, width_m |
measure_name, scenario, scenario_label |
measure_name: levee_1, …; crest_elevation_m: 4.064 (13′4″); width_m: 0 |
|
| Stormwater | pump | Point | capacity_cms |
measure_name, invert_elev_m |
measure_name: pump_1, …; capacity_cms: 5.0 |
| culvert | Polyline | capacity_cms |
measure_name |
measure_name: culvert_1, …; capacity_cms: 2.0 |
|
| retention | Polygon | capacity_m3, infiltration_rate_mm_hr |
measure_name, outlet_elev_m |
measure_name: retention_1, …; capacity_m3: 10,000; infiltration_rate_mm_hr: 5.0 |
|
| green_infra | Polygon | retention_pct |
measure_name |
measure_name: green_infra_1, …; retention_pct: 0.25 |
|
| Buildings | custom building | Polygon | ground_elevation_m, first_floor_height_m, replacement_value_usd |
use_category, height_m |
use_category: miscellaneous; ground_elevation_m: from DEM; first_floor_height_m: by use_category; height_m: 9.0 |
Linear features (barriers, walls, gates) → open polylines / LineStrings.
Area features (basins, green infra, buildings, platforms) → closed polylines / Polygons.
Point features (pump stations) → single points.
03Rhino Workflow
Layer Setup
Organize your Rhino model using the layer names below. The ingestion script maps each layer to a pipeline target directory. Layer names are case-insensitive and spaces are treated as underscores. Any layer not in this list is skipped with a warning.
Each layer automatically sets measure_type and default attribute values.
You only need to use SetUserText on an object if it differs from the layer default.
See the Quick Reference table for the full list of defaults per measure type.
Geometry Rules
The ingestion script converts Rhino geometry to 2D GeoJSON. Follow these rules to ensure clean conversion:
| What You’re Drawing | Rhino Geometry to Use | Result |
|---|---|---|
| Levee, seawall, gate | Open polyline (or line, NurbsCurve). Do NOT close the curve. | LineString |
| Retention basin, green infra, platform | Closed polyline or closed curve. Rhino auto-detects via IsClosed. |
Polygon |
| Pump station | Point object placed at the pump location. | Point |
| Culvert | Open polyline drawn from inlet to outlet. Line direction defines flow direction. | LineString |
| Building footprint | Closed polyline, Extrusion, Brep, or Mesh. 3D solids are projected to a 2D convex hull. | Polygon |
All geometry is projected to 2D (X, Y only). Do not encode elevation data in Z coordinates.
Instead, set elevation values as attributes (crest_elevation_m, ground_elevation_m)
using SetUserText. This ensures consistency with the NAVD88 vertical datum used by the flood model.
Curve Simplification
NURBS curves, arcs, and splines are sampled at 0.5m intervals (max 500 vertices). If your barrier alignment has complex curvature, the sampled output will still be accurate to sub-metre precision. For simple straight-line barriers, use a basic polyline to keep vertex counts low.
User Text Attributes
Select an object in Rhino and use the SetUserText command to attach key-value pairs.
These override the layer defaults for that specific object.
// Barrier with specific crest elevation SetUserText crest_elevation_m 5.33 SetUserText width_m 2.5 SetUserText measure_name "East Harlem Seawall Section A" // Pump station with custom capacity SetUserText capacity_cms 12.5 SetUserText measure_name "West 225th St Pump" // Building with usage data SetUserText use_category multi_family SetUserText replacement_value_usd 1200000 SetUserText first_floor_height_m 0.46
If you don't set measure_name, the pipeline generates one automatically:
levee_1, levee_2, pump_1, etc., numbered sequentially
per measure type. You can also set a Rhino object name (via the Properties panel)
as a quick alternative to SetUserText — object names are used as
measure_name when present.
Coordinate System
The ingestion script assumes your Rhino model is in UTM Zone 18N (EPSG:32618) by default, which means your model units should be metres and your coordinates should be in UTM easting/northing.
If your model uses a different CRS, specify it at ingest time:
# NY State Plane Long Island (US survey feet) python scripts/ingest_cad.py my_design.3dm --source-crs EPSG:2263 # NY State Plane Long Island (metres, NAD83 2011) python scripts/ingest_cad.py my_design.3dm --source-crs EPSG:6539
If your Rhino model is in feet but you don't specify the CRS, the script will treat those coordinates as metres and your geometry will be wildly misplaced. Always verify your model units match your declared CRS.
Rhino Export Checklist
Before saving your .3dm file for ingestion:
- All barrier alignments are open polylines (not closed)
- All area features (basins, green infra, buildings) are closed curves
- Pump stations are Point objects, not short lines or circles
- Culverts are open polylines drawn from inlet to outlet
- Every object is on a recognized layer (barriers, levee, seawall, gate, platform, pump, culvert, retention, green_infra, buildings)
crest_elevation_mis set on all barrier objects (viaSetUserTextor layer default)use_categoryis set on all building footprints- All elevation values are in metres NAVD88, not feet
- No stray geometry on unmapped layers (or you're okay with it being skipped)
- Model units match the CRS you'll declare at ingest time
04ArcGIS Pro Workflow
Feature Class Setup
In ArcGIS Pro, organize your data into separate feature classes (or layers in a geodatabase) by measure category. Each feature class should contain a single geometry type.
| Feature Class | Geometry Type | Contains |
|---|---|---|
| barriers | Polyline | Levees, seawalls, gates — all linear barrier features |
| stormwater_areas | Polygon | Retention basins, green infrastructure coverage areas |
| pump_stations | Point | Pump station locations |
| culverts | Polyline | Drainage culverts (inlet to outlet) |
| custom_buildings | Polygon | Proposed or hypothetical building footprints |
Export each feature class to its own .geojson file. The pipeline expects
one GeoJSON per file, placed in the correct subdirectory
(protection_measures/barriers/, protection_measures/stormwater/,
or custom_buildings/).
Geometry Rules
| What You’re Drawing | ArcGIS Geometry | Notes |
|---|---|---|
| Levee, seawall, gate | Polyline feature class | Draw as standard polylines. Multi-part polylines are exploded into individual LineStrings on export. |
| Retention basin, green infra | Polygon feature class | Draw as standard polygons. Donuts (holes) are preserved. |
| Pump station | Point feature class | Single point at pump location. Do not use a polygon buffer. |
| Culvert | Polyline feature class | Draw from inlet to outlet. Line direction defines flow direction. |
| Building footprint | Polygon feature class | Standard building footprint polygon. Must be a closed ring. |
The pipeline reads 2D geometry only. If you have 3D features (Multipatch, 3D polylines with Z values), flatten them to 2D before exporting. In ArcGIS Pro, Z values in polylines/polygons are silently ignored by the GeoJSON export, but Multipatch features will fail to convert.
Attribute Table Schema
Add these fields to your feature class attribute tables. The pipeline reads property names from the
GeoJSON properties object, which mirrors your attribute table column names.
Field names are case-sensitive and must use snake_case.
Barriers (Polyline Feature Class)
| Field Name | Type | Description |
|---|---|---|
| measure_type | Text required | One of: levee, seawall, gate |
| measure_name | Text required | Human-readable name (e.g., "East Harlem — Seawall") |
| crest_elevation_m | Double required | Top-of-barrier elevation in metres NAVD88 |
| width_m | Double optional | Structural width for DEM rasterization. Default: 2.0 |
| scenario | Text optional | Scenario identifier (e.g., harlem_river_frontline) |
| scenario_label | Text optional | Human-readable scenario name |
Stormwater — Pump Stations (Point Feature Class)
| Field Name | Type | Description |
|---|---|---|
| measure_type | Text required | Must be pump |
| measure_name | Text required | Pump station name |
| capacity_cms | Double optional | Pumping capacity in m³/s. Default: 5.0 |
| invert_elev_m | Double optional | Inlet invert elevation in metres NAVD88 |
Stormwater — Culverts (Polyline Feature Class)
| Field Name | Type | Description |
|---|---|---|
| measure_type | Text required | Must be culvert |
| measure_name | Text required | Culvert name or identifier |
| capacity_cms | Double optional | Flow capacity in m³/s. Default: 2.0 |
Stormwater — Areas (Polygon Feature Class)
| Field Name | Type | Description |
|---|---|---|
| measure_type | Text required | One of: retention, green_infra |
| measure_name | Text required | Feature name |
| capacity_m3 | Double optional | Storage volume in m³ (retention only). Default: 10,000 |
| infiltration_rate_mm_hr | Double optional | Soil infiltration rate (retention only). Default: 5.0 |
| retention_pct | Double optional | Fraction of rainfall retained, 0–1 (green_infra only). Default: 0.25 |
Custom Buildings (Polygon Feature Class)
| Field Name | Type | Description |
|---|---|---|
| use_category | Text required | One of: single_family, multi_family, commercial, industrial, miscellaneous |
| height_m | Double optional | Building height in metres. Default: 9.0 |
| replacement_value_usd | Double optional | Full replacement cost for damage calculation |
| ground_elevation_m | Double optional | Ground elevation NAVD88. Sampled from DEM if omitted. |
| first_floor_height_m | Double optional | First floor above grade. Uses default by use_category if omitted. |
Coordinate System
GeoJSON files must be in WGS 84 (EPSG:4326) with coordinates as
[longitude, latitude] in decimal degrees. If your ArcGIS Pro project uses a projected CRS
(State Plane, UTM, etc.), the export tool will reproject automatically — but you should verify the
output CRS after export.
Open your exported .geojson file in a text editor. Coordinates should look like
[-73.935, 40.836] (longitude in the −70s, latitude in the 40s for NYC).
If you see large numbers like [583000, 4515000], the export is still in a projected CRS
and must be reprojected.
Export to GeoJSON
Use the Features to JSON geoprocessing tool in ArcGIS Pro. After export, you need to add the collection-level metadata fields that the pipeline expects.
- Open Geoprocessing → search for Features to JSON
- Set Input Features to your feature class
- Set Output JSON File to your desired filename (e.g.,
my_barriers.geojson) - Check Formatted JSON for readability
- Check Output to GeoJSON
- Set GeoJSON Output Geometry Type appropriately
- Ensure the output CRS is WGS 84
- Run the tool
After exporting, open the .geojson file in a text editor and add these
collection-level fields at the top of the JSON object, alongside "type" and
"features":
{ "type": "FeatureCollection", "name": "my_barriers", // machine ID (snake_case, no spaces) "label": "My Custom Barriers", // display name "description": "Barrier set for...", // optional "category": "barriers", // "barriers" | "stormwater" | "building" "features": [ ... ] }
Use this ArcPy snippet to export with metadata in one step:
import arcpy, json fc = "my_barriers" # feature class name out = "protection_measures/barriers/my_barriers.geojson" # Export to temp GeoJSON arcpy.conversion.FeaturesToJSON( fc, out.replace(".geojson", "_tmp.geojson"), geoJSON="GEOJSON", outputToWGS84="WGS84" ) # Add collection-level metadata with open(out.replace(".geojson", "_tmp.geojson")) as f: data = json.load(f) data["name"] = "my_barriers" data["label"] = "My Custom Barriers" data["category"] = "barriers" with open(out, "w") as f: json.dump(data, f, indent=2) print(f"Exported {len(data['features'])} features to {out}")
05Barriers: Detailed Formatting
Barriers are the most critical feature type. They modify the SFINCS hydrodynamic model terrain by rasterizing the crest elevation along the alignment onto the DEM grid. Incorrect formatting here will cause modeling errors.
Geometry
- Type: LineString (open polyline / polyline feature). Do not close barrier alignments into rings.
- Vertex density: Include enough vertices to capture the alignment faithfully. The model rasterizes at 1m DEM resolution, so vertices every 2–5m along curves are sufficient.
- Direction: Vertex order does not matter for modeling, but consistent direction (e.g., south-to-north along a river) improves readability.
- Segmentation: Split a long barrier into multiple features only if segments have different crest elevations or types. Otherwise, keep it as one continuous LineString.
If two barrier segments don't connect end-to-end, water flows through the gap in the model. Snap segment endpoints precisely. In Rhino, use Point Osnap. In ArcGIS Pro, use snapping to ensure polyline endpoints coincide exactly. The pipeline generates automatic tie-in extensions to high ground for unconnected endpoints, but this works best for endpoints near the study area boundary—not for mid-alignment gaps.
Required Attributes
| Attribute | What to Set | Example |
|---|---|---|
| measure_type |
levee — earthen embankment or generic wallseawall — shoreline barrier (modeled identically to levee)gate — deployable barrier or floodgate
|
levee |
| measure_name | A descriptive, human-readable label. Include the project area and feature type for clarity. | East Harlem — Seawall |
| crest_elevation_m | Top-of-barrier elevation in metres NAVD88. This is the elevation at which the barrier blocks water. To convert from feet: multiply by 0.3048. | 5.33 (= 17.5 ft) |
Optional Attributes
| Attribute | When to Set | Default |
|---|---|---|
| width_m | If the barrier has a specific structural width. Used to buffer the LineString for DEM rasterization. | 2.0 m |
| scenario | To group barriers into named scenarios for comparison (e.g., frontline vs setback_75m). |
— |
| scenario_label | Human-readable version of scenario for display. |
— |
Example: Complete Barrier Feature
{ "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [-73.9348, 40.8353], [-73.9341, 40.8339], [-73.9335, 40.8322], [-73.9348, 40.8299] ] }, "properties": { "measure_type": "levee", "measure_name": "East Harlem — Seawall", "crest_elevation_m": 5.33, "width_m": 2.5, "scenario": "harlem_river_frontline", "scenario_label": "Harlem River Frontline Seawall" } }
06Stormwater: Detailed Formatting
Pump Stations
Pump stations are Point features located where the pump removes water from the model. They are the simplest feature to format.
| Attribute | What to Set | Default |
|---|---|---|
| measure_type | Must be pump | — |
| measure_name | Station name | — |
| capacity_cms | Pumping rate in m³ per second. To convert from gallons per minute: GPM × 0.0000631. | 5.0 |
| invert_elev_m | Inlet invert elevation (metres NAVD88). Only if known. | — |
Culverts
Culverts are LineString features drawn from inlet to outlet. The line direction defines the flow path. In SFINCS, culverts are modeled as passive drainage structures that convey water along the alignment at the specified capacity.
| Attribute | What to Set | Default |
|---|---|---|
| measure_type | Must be culvert | — |
| measure_name | Culvert name or identifier | — |
| capacity_cms | Flow capacity in m³ per second. | 2.0 |
Retention Basins
Retention basins are Polygon features representing the storage footprint. Draw the polygon to match the basin's plan-view footprint.
| Attribute | What to Set | Default |
|---|---|---|
| measure_type | Must be retention | — |
| measure_name | Basin name | — |
| capacity_m3 | Total storage volume in cubic metres. To convert from cubic feet: ft³ × 0.0283. | 10,000 |
| infiltration_rate_mm_hr | Soil infiltration rate in mm/hr. Use site-specific data if available. | 5.0 |
| outlet_elev_m | Overflow outlet elevation (metres NAVD88). | — |
Green Infrastructure
Green infrastructure is a Polygon representing the coverage area of a distributed network (bioswales, rain gardens, permeable pavement, etc.). It need not represent individual installations; draw it as the overall service area.
| Attribute | What to Set | Default |
|---|---|---|
| measure_type | Must be green_infra | — |
| measure_name | Network name (e.g., "University Ave Corridor") | — |
| retention_pct | Fraction of rainfall retained within the network, from 0 to 1. A value of 0.25 means 25% of rainfall is captured. | 0.25 |
07Custom Buildings: Detailed Formatting
Custom buildings represent proposed developments, hypothetical structures, or corrections to the NYC building database. They must be Polygon features representing the building footprint.
use_category Values
This is the only required attribute. It determines which HAZUS depth-damage curve is applied and what default first-floor height is assumed.
| Value | Description | Default FFE Above Grade |
|---|---|---|
| single_family | 1–2 family residential | 0.46 m (18″) — raised foundation |
| multi_family | 3+ unit residential (apartments, condos) | 0.30 m (12″) — low entry |
| commercial | Retail, office, mixed-use commercial | 0.00 m — slab on grade |
| industrial | Warehouse, factory, industrial | 0.00 m — slab on grade |
| miscellaneous | Other / unknown | 0.15 m (6″) |
Optional Attributes
| Attribute | When to Set | Default |
|---|---|---|
| height_m | If you know the building height. Affects visualization but not the damage model. | 9.0 m |
| replacement_value_usd | If you have a specific replacement cost estimate. Otherwise the pipeline estimates from PLUTO data. | Estimated from PLUTO |
| ground_elevation_m | If you have surveyed ground elevation. Otherwise sampled from the DEM at the polygon centroid. | Sampled from DEM |
| first_floor_height_m | If the building has a non-standard first-floor height (e.g., flood-adapted construction with elevated entry). | By use_category (see above) |
Flood depth is sampled at the polygon centroid. As long as the footprint is roughly correct in plan, small inaccuracies in the outline do not significantly affect damage estimates. Focus on getting the location and size right rather than tracing every architectural detail.
08Units & Vertical Datums
All Values Are Metric
The pipeline uses metres for all dimensions and elevations. If your source data is in feet, convert before setting attributes. Common conversions:
| From | To | Multiply By |
|---|---|---|
| US survey feet | metres | 0.3048 |
| cubic feet | cubic metres | 0.02832 |
| gallons per minute | m³/s | 0.0000631 |
| inches per hour | mm/hr | 25.4 |
Vertical Datum: NAVD88
All elevation attributes (crest_elevation_m, ground_elevation_m, etc.)
must reference NAVD88. The pipeline defines these offsets for other tidal datums
at the study area:
| Datum | Offset from NAVD88 |
|---|---|
| NAVD88 | 0.00 m (reference) |
| MHHW (Mean Higher High Water) | +0.67 m |
| MSL (Mean Sea Level) | +0.20 m |
| MLW (Mean Low Water) | −0.50 m |
HATS crest elevations are often reported as 17.5 ft NAVD88. This equals 5.33 m.
Entering 17.5 in the crest_elevation_m field would create a
57-foot wall in the model. Always double-check your unit conversions.
Horizontal CRS
| Context | CRS | EPSG |
|---|---|---|
| GeoJSON files (the export target) | WGS 84 | 4326 |
| Rhino model (default assumption) | UTM Zone 18N | 32618 |
| ArcGIS Pro (common for NYC) | NY State Plane LI | 2263 |
09Naming Conventions
File Names
- Use snake_case:
harlem_river_seawall.geojson, notHarlem River Seawall.geojson - Use
.geojsonextension (not.json) - Name should be descriptive of the contents:
frontline_barriers.geojson,west_225th_pump.geojson
measure_type Values
These are the exact, case-sensitive strings the pipeline recognizes:
| Value | Description |
|---|---|
| levee | Continuous embankment or flood wall |
| seawall | Shoreline barrier (modeled identically to levee) |
| gate | Deployable barrier or floodgate |
| pump | Active pumping system |
| culvert | Passive drainage culvert |
| retention | Detention/retention basin |
| green_infra | Distributed green infrastructure network |
| platform | Elevated structure footprint |
"Levee", "LEVEE", "flood_wall", "floodwall" —
none of these will work. The value must be one of the exact lowercase strings listed above.
Misspelled or variant measure types are silently ignored during loading, which means your
feature won't appear in any scenario.
scenario Identifiers
- All lowercase, underscores for spaces:
harlem_river_frontline - Keep them short but descriptive
- Pair with a
scenario_labelfor the human-readable version:"Harlem River Frontline Seawall" - Features with the same
scenariovalue are grouped together for modeling
GeoJSON Collection Metadata
Every .geojson file needs these top-level fields in the FeatureCollection:
| Field | Description | Example |
|---|---|---|
| name | Machine identifier (snake_case, must match filename stem) | frontline_seawall |
| label | Human-readable display name | Frontline Seawall |
| category | Pipeline target category | barriers, stormwater, or building |
| description | Optional longer description | Seawall along the Harlem River waterfront |
10Common Pitfalls
| Mistake | Symptom | Fix |
|---|---|---|
| Closed polyline for a barrier | Pipeline interprets it as a Polygon instead of LineString; barrier becomes a filled area in the model | Open the curve: remove the closing segment or use Explode in Rhino |
| Elevation in feet instead of metres | Barrier crest is impossibly high (e.g., 17m instead of 5.3m), blocking all flooding | Multiply by 0.3048 before setting crest_elevation_m |
| Projected CRS in GeoJSON | Features appear at the wrong location or don't load at all | Ensure export is in WGS 84 (EPSG:4326). Coordinates should be [lon, lat] not [easting, northing] |
Missing measure_type |
Feature is silently skipped during loading | Add the field to every feature; use exact lowercase values from the reference table |
| Gap between barrier segments | Water flows through the gap in simulation results | Snap endpoints. In Rhino: Point Osnap. In ArcGIS: enable snapping. |
| Multi-part geometry not exploded | Entire MultiLineString treated as one feature; crest applies to disconnected segments | In ArcGIS: Multipart to Singlepart tool. In Rhino: Explode polycurves. |
| Misspelled attribute name | Value is ignored; default is used instead | Use exact names: crest_elevation_m, not crest_elev or CrestElevation |
| Missing collection-level metadata | File loads but has no display name or category in the webapp | Add name, label, category fields to the FeatureCollection root |
| Rhino Z used for elevation | Z coordinates are discarded; barrier has no crest elevation | Set elevation via SetUserText crest_elevation_m, not via geometry Z |
retention_pct as percentage |
Setting 25 instead of 0.25 means 2500% retention |
Use a fraction from 0 to 1, not a percentage |
11Pre-Flight Checklist
Run through this checklist before handing off your data. Items marked with Rhino or ArcGIS apply to that tool only; unmarked items apply to both.
Geometry
- Barriers are open polylines / LineStrings (not closed)
- Area features (basins, green infra, buildings) are closed curves / Polygons
- Pump stations are Points (not buffered polygons or short lines)
- No self-intersecting geometry
- Barrier segment endpoints are snapped where they should connect
- Multi-part features are exploded into single-part features
- Rhino No stray geometry on unmapped layers
- ArcGIS Multipatch features are flattened to 2D
Attributes
measure_typeis set on every protection measure feature (exact lowercase string)measure_nameis set on every protection measure feature (or auto-generated as{type}_1,{type}_2, …)crest_elevation_mis set on all barrier featuresuse_categoryis set on all custom building features- All elevation values are in metres NAVD88 (not feet, not MHHW)
retention_pctis a fraction (0–1), not a percentagecapacity_cmsis in m³/s (not GPM or L/s)- Rhino Attributes set via
SetUserText(not Z coordinates) - ArcGIS Field names are snake_case and match this guide exactly
Coordinate System & Export
- ArcGIS GeoJSON export is in WGS 84 (EPSG:4326)
- ArcGIS Coordinates look like
[-73.9, 40.8](not[583000, 4515000]) - ArcGIS Collection-level metadata (
name,label,category) is present - Rhino Model units match the CRS you'll declare at ingest time
- Rhino If not UTM 18N, you know the
--source-crsEPSG code - File extension is
.geojson - Filename uses snake_case (no spaces)
Rhino users: Run python scripts/ingest_cad.py your_file.3dm --dry-run
to preview what will be exported without writing any files.
ArcGIS users: Open your .geojson in geojson.io
to visually verify feature locations, geometry types, and attribute values before
placing the file in the pipeline directory.