arcgis fulcrum add in

In researching the Fulcrum API for potential use in a project, I pushed it a bit further and ended up building a tool to import Fulcrum data into ArcGIS. This happens — sometimes for the good and sometimes purely for the exercise of clicking. This time it was for the good, as I ultimately created a couple of useful things:

  1. A C# wrapper that turns Fulcrum apps and records into usable .NET objects
  2. An ArcGIS add-in that imports all records from a selected Fulcrum app into a new feature class

The wrapper turns Fulcrum API JSON responses into C# dictionaries and lists via the JavaScriptSerializer class and creates instances of custom fulcrumrecord and fulcrumform objects. This went pretty smoothly because the Fulcrum API is both documented and well thought out.

I then used this wrapper to build an ArcGIS (ArcMap) add-in that imports all records from a selected app into a new file geodatabase feature class and adds it as a layer to the current map document. This is implemented via a separate class that digs into the depths of the ArcObjects model to create the feature class and populate it. If you’re familiar with ArcObjects, this should look familiar. If you’re not… you may want to shield your eyes.

The code is available on GitHub:

GitHub repo:
https://github.com/brightrain/arcgis-fulcrum-add-in

You can also grab the .esriAddIn file directly here:
https://www.dropbox.com/s/5u0d66nylho4sf7/fulcrum.esriAddIn?dl=0

(BSD license disclaimer applies — truly alpha at this point.)


Usage

  1. Get your Fulcrum API key from your profile:
    http://web.fulcrumapp.com/users/api
    Then sign in.

  2. Create a new file geodatabase or choose an existing one.
    Both of these are set in Settings (the gear icon on the Fulcrum add-in toolbar).


Notes

  • The import is a read-only snapshot of current records in the selected app. The created feature class is static. You can extend this as needed.

  • Initially I added a setting to define a folder where photos should be downloaded. The first photo for each record was saved to that location, and the feature class stored the full file path.

    I quickly realized this could take a very long time depending on the number of records/photos, so I changed it to populate a field with a link to the photo hosted on the Fulcrum site instead.

    However, there is a branch of the GitHub repo that contains the original functionality to download photos to disk.

  • Currently, only the first photo is linked or downloaded. This could be improved by creating a separate related table to store links to multiple photos, connected by the record ID.

  • Recursion needs to be implemented in a couple of places to properly support the Fulcrum data model. Most notably in the Section element type; the application currently ignores sections. But sections can contain infinitely nested child elements.

  • If you’re looking for a COTS solution, Arc2Earth Sync (beta) now includes Fulcrum as a provider and can keep Fulcrum data up to date. I understand there are plans to make it bi-directional.