Roosevelt Island: Actor Network
Developed by Anna Cao. Dataset built and populated by Anna Cao, Victoria Li, and Audrey Lau.
Roosevelt Networks is an interactive model of the actors that shape Roosevelt Island (agencies, organizations, institutions, buildings and people) and the relationships between them. This documentation explains how to use the app, how the model is constructed, and how to load your own dataset.
Open the app →1. Overview
Roosevelt Networks reads its data from a Google Spreadsheet published to the web, so any network with the same structure can be loaded. The app's source code is on GitHub.
The process takes three steps: prepare a spreadsheet in the expected format, publish it, and point a copy of the app at it. See Methodology for a detailed description of how each column is read.
Your network doesn't need to be about Roosevelt Island. The Relationships and Timeline modes work for any network. Map mode is optional: you can turn it off, or supply your own site (see Map data).
2. Prepare the spreadsheet
Make a copy of the project dataset and replace its contents with your own, keeping the column headers. Two tabs are required:
Actors (actor_working), one row per actor:
| Column | Contents |
|---|---|
actor | Full name. Must be unique, and must match the names used in the adjacency tab. |
abbrev | Short name (optional), also searchable. |
topic | Category or categories, comma-separated. |
type | Sector. |
scale | Scale, for example 0 - MICRO, 1 - MESO, 2 - MACRO. |
year_start, year_end | Active years (optional). |
public sentiment | Sentiment rating (optional, kept for reference). The Public sentiment colour mode and the Public interest halo read public/data/actor database - actor_working - with news hits.csv instead, with columns actor, hits (0–100) and sentiment (−1 to +1). Both are optional: actors without values are drawn grey and with the smallest halo. To generate them for your own actors, follow the news headline method in the methodology, changing the search context from “Roosevelt Island” to your site. |
Relationships (adjacency), one row per connection:
| Column | Contents |
|---|---|
source-target relationship | One of the relationship types, for example COLLABORATION or OWNER-TENANT. |
source, target | Actor names, exactly as written in the actors tab. |
parameter 0–parameter 2 |
Optional details: parcel area in sq ft (Owner–Tenant, parameter 0); one-time and a whole-number
closeness (Collaboration, parameters 0 and 1); upfront investment and yearly funds in dollars (Financial,
parameters 0 and 1); elected, succession or appointment (Position–Incumbent, parameter 0).
|
Blank cells are fine. Rows whose actors can't be found are skipped and reported in the browser console.
3. Publish it
In Google Sheets, choose File → Share → Publish to web and publish the entire document. Note the published
URL and the gid of each tab (the number after gid= in the tab's address).
4. Point the app at it
- Fork or download the repository.
- In
src/config.js, replacepublishedUrl,actorGidandadjacencyGidwith your own values. - Run
npm install, thennpm run dev, and click Relink data to load your sheet. - Optionally, save CSV snapshots of your tabs over
public/data/actors.csvandpublic/data/edges/adjacency.csvso the app opens with your data before relinking. - Decide how to handle Map mode (next section). If your network isn't on Roosevelt Island, set
mapEnabled: falseor replace the map data. - The page title ("Roosevelt Island: Actor Network") is set in
index.html. Edit it to match your project.
5. Map data (optional)
Map mode places actors over a site plan: actors linked to buildings sit on those buildings' footprints, and actors with a specific location are pinned to a point. You can use the app in one of three ways.
| Option | What you get | What you need |
|---|---|---|
| No map | Relationships and Timeline modes; the Map tab is hidden. | Set mapEnabled: false in src/config.js. |
| Your own site | All three modes, with actors placed on your geography. | A boundary, building footprints, a buildings tab, and optionally point SVGs (below). |
| Roosevelt Island | All three modes, using the included island data. | Nothing; this is the default. |
Without spatial data
In src/config.js, set mapEnabled: false. The Map tab is removed and everything else works as normal.
Centrality, filtering, selection, pinning and exporting don't depend on geography. If you leave Map mode on but the map files
are missing or can't be read, the app disables the Map tab ("Map data unavailable for this dataset") instead of failing.
With your own geography
-
Boundary. Save your site outline as a GeoJSON file in WGS84 longitude/latitude (EPSG:4326) in
public/data/buildings/. Only the first feature is used. To convert from a shapefile, DXF or another CRS, use QGIS (Export → Save Features As → GeoJSON, CRS EPSG:4326) orogr2ogr -f GeoJSON -t_srs EPSG:4326 boundary.geojson input.shp. -
Building footprints. Save each footprint as
public/data/buildings/bin-<id>.geojson, also in WGS84. The id can be any unique value: a NYC BIN, a parcel number, or a number you assign. -
Buildings tab. Add a tab to your spreadsheet with the columns
BIN(the footprint id),NameandActor(the actor's name, matching the actors tab), with one row per building–actor link. Publish it as CSV (Publish to web → select the tab → Comma-separated values). -
Points (optional). For actors that need an exact location rather than a building, add a row with
BINleft blank,Nameset topoint - "<name>"and the actor inActor. Then savepublic/data/buildings/point-<name>.svg. Each SVG must contain your boundary drawn as a path inside<g id="boundary">and exactly one circle or ellipse outside it. The circle is placed by its relative position within the boundary's extents. In Rhino, draw the circle over the boundary curve and select both. Then use Export Selected → SVG, and make sure the boundary ends up in a group withid="boundary". -
Build the overlay. Run
npm run sync:buildings -- --sheet=<buildings CSV URL> --boundary=<boundary file name>. This downloads the buildings tab and writespublic/data/buildings/map-overlay.svgandmap-points.json. Rows without a matching footprint file are skipped with a warning. -
Label. Set
mapLabelinsrc/config.jsto your site's name, which is shown in the corner of Map mode.
Footprints don't have to be buildings. Any polygon, such as a park, block or district, can be used. See Methodology for how positions are projected and combined.
6. Extending the model
New relationship types
To add a new relationship type, add its label to public/data/edges/manifest.json and map the spreadsheet's
name for it in SHEET_ADJACENCY_TYPES in src/config.js.