Esri & GIS sync

Connect ArcGIS feature services, map GIS fields onto AssetLab columns, and keep AssetLab synchronized nightly - or import GeoJSON, shapefiles, and CSV through the wizard.

If your infrastructure inventory lives in ArcGIS, it should flow into AssetLab, not be retyped. Sync connects to Esri feature services, pulls features and geometry, and keeps them current nightly.

The division of labour

One direction, no conflicts, and both teams keep their system of record.

The edit form enforces this split: on an Esri-synced feature, GIS-owned fields (name, network, physical attributes, condition, install date) are locked with a note pointing at the source, and only the AssetLab-owned financial, planning, and risk fields stay editable. Manually created features keep the full form.

Setting up a source

Under Infrastructure → Import, add an Esri source. One source connects one layer of a feature service to one network - the feature class comes from that network, so create the network (and check its class rates) first.

  1. Service URL and layer - the feature service endpoint and the layer number. Secured services authenticate with a token you provide.
  2. Match key - must be the layer's GlobalID field. OBJECTID-class keys are rejected, because geodatabase compaction renumbers them - a sync keyed on OBJECTID would silently re-identify your features.
  3. Field mapping - GIS attributes onto AssetLab's fixed column set: name, Feature ID, description, material, install date, inspection date, condition score, diameter, from/to street, from/to invert, slope, width, depth, lanes, status, and asset type - plus a condition scale setting that tells the sync how to read the source's condition values. A Feature ID must be unique across your whole organization, so map it to the layer's own asset ID field, never to OBJECTID: ArcGIS numbers every layer from 1, and the form warns you if you pick it. When an incoming Feature ID is already used by another feature, the feature still syncs, just without that ID.
  4. Options - an optional server-side WHERE filter to sync a subset of the layer, and a feature type strategy: segments, nodes, or both.
  5. Initial sync - run it, review counts, and spot-check on the map.

Ongoing sync

Sources with sync enabled run nightly on a fixed schedule - a 03:00 UTC window, one source every 5 minutes. The schedule isn't tenant-configurable; Sync now runs a source on demand regardless of the sync-enabled flag. Each run is capped at 150,000 features (paged 2,000 at a time) and:

Sync history is visible per source: each run logs its insert, update, soft-delete, and reject counts (with reasons for the rejects), so "is AssetLab current with GIS?" has an auditable answer. When a run syncs features without their Feature ID because another feature already uses it, the source page says how many, and lists up to five of the IDs with the network that holds each.

What sync does to valuation

Synced geometry yields measured quantities (segment lengths), and quantity × the resolved unit rate maintains replacement value automatically. Redraw a segment in GIS and its value updates on the next sync - your network valuation stays as current as your GIS.

No ArcGIS?

The Infrastructure module has its own import wizard - separate from the general import wizard - that loads GeoJSON, zipped shapefiles, or CSV files up to 32 MB per file (split larger layers by area or asset class and import in parts). A CSV carries its geometry in a WKT column (wkt, geometry, wkt_geom or the_geom), or, for a plain list of points such as civic addresses or meters, in a latitude and a longitude column (latitude or lat, and longitude, lon, lng or long) in decimal degrees, which places one point per row. A row whose coordinates are blank or out of range is rejected with its row number rather than placed somewhere wrong. It walks seven steps: upload, match key, field mapping, coordinate system, topology (with a snap tolerance for closing small gaps), preview, and import - and it supports an update mode for re-importing against an existing network. Field mapping covers the same column set as GIS sync (create mode), the wizard reads your file's actual columns into drop-downs with best-guess pre-fills, and columns you don't map are kept on each feature's record. The mapping step can also create custom fields on the spot - pick a source column, name the field, choose its type - or Add all to carry every unmapped column at once - and the import fills them for every feature (up to 10 custom fields per record type). The step counts the fields your organization already has, shows how many of the 10 are in use, and will not continue while the import would go past the limit; giving a field the name of an existing one fills that field instead of creating a new one. Features can also be created directly in AssetLab. GIS sync is the best path, not the only one.

The first question the wizard asks is what the file contains: features - the pipes, mains, roads and structures themselves - or zones, the areas they sit in. A polygon layer imports as zones: pick the kind once for the whole file (DMA, sewershed, pressure zone, storm catchment or maintenance district), map the column holding each area's name, and the wizard previews what it will create before anything is written. Areas made of several pieces import as one zone, so a catchment with an island stays a single record. Zone imports skip the topology step - an area binds to nothing - and a row is held back rather than written when it has no name, when two rows in the file claim the same name, or when a zone of that name already exists in the network. Importing zones does not replace existing ones; to change a zone, edit it.

Three guardrails protect the import itself. If a shapefile arrives without a readable .prj (or a WKT CSV carries no coordinate system), the wizard stops at the coordinate system step and asks you to pick the source CRS rather than guessing - when the coordinates look like latitude/longitude it preselects WGS 84 for you to confirm. A CSV with latitude and longitude columns arrives with WGS 84 already detected. GeoJSON normally skips that step, because the format's own specification says it is longitude/latitude - but ArcGIS and ogr2ogr both write projected GeoJSON anyway, so a file whose coordinates are not degrees gets the coordinate system step too (and a stated crs member in the file is read and used). If a zipped shapefile holds more than one layer, the wizard lists them and asks which one to import instead of silently taking the first - import one layer at a time, running the wizard again for the others. Attribute text is decoded with the code page the archive declares in its .cpg file, so accented street names arrive as they were written rather than as mojibake. And if you re-import a file that is byte-for-byte identical to one already imported into the same network in create mode, the wizard warns you before the preview runs - re-importing would duplicate every feature - and points you at update mode instead (you can still proceed deliberately).