Concept The goal of the module is to find the most “nature-filled” walk one could take, given a set of input parameters regarding the walk (speed, distance, etc.).

STROLL (MODULE)

This project was developed at the 2019 Thornton Tomasetti AEC Hackathon in Seattle. It won “Best Open Source Project” in the competition along with the application which this module powers.

This library finds the most nature-filled walks/paths that one can take throughout the day in order to stimulate creativity and boost mental health.

Path-finding is performed via Weighted Graph computation, with weights being given for characteristics such as proximity to parks, and amount of nature in the field of view

GitHub
Project GitHub (Computational Module)
Project GitHub (App)

NPM
Public Module

Tools:
Backend: Google Maps API, Yelp API, node-vibrant, turf.js, ngraph
Deployment: NPM

Team: Adam Chernick, Nate Holland, Petr Mitev, Jason Wheeler, Brandon Yu
Presentation: Link

Stack A series of APIs come together to create the data model for the graph math engine which computes the possible paths.

PATH FINDING

In order to compute the “most nature-filled” path a user could take, we leveraged a number of Open Source tools and datasets to help us create a weighted graph which would quickly compute paths and variations. To aggregate these APIs and domain-specific computation, we created the Stroll Javascript module. The module allowed us to start with a location, create a point grid around it for sampling, and then assign a “nature score” to each point and path within that grid. The platforms listed below were used to compute the “nature score”.

Yelp
The Yelp API was used to get a list of nearby parks and green spaces.

Google Maps
The Google Maps API was used to compute human-walkable routes, and to gather “Street View” images from the points in our point grid. The images were then analyzed for dominant colors (using node-vibrant) and dominant objects (using tensorflow.js and the pre-trained coco-ssd model with reinforcement learning). This allowed us to compute how much nature was roughly “visible” at a given point.

Path-finding The “Stroll” Javascript module was created to provide a high-level interface into computing a “nature score” for a given point or area.

Distribution

Our module was not only developed as an open-source project, but is also being maintained as an open-source project with the support of NBBJ. As part of our continued development, we are hosting the package on npm and it is available for download/install from any machine using Node.js. Going forward, we’ll be working on optimizing the core functionality as well as adding new features.

USAGE

The module aggregates the individual pieces which we use to calculate our “nature score”, and exposes the members publicly. The user can either use our pre-built path-finding algorithms, or use the individual pieces which make up our score to design and curate their own version of the “nature score”.


IMport

// import everything
const Stroll = require('./index.js');

// or import individual members
const ColorParse = require('./ColorParse');
const RouteData = require('./RouteData');

MAIN PATH-finding computation

const RouteData = require('./RouteData');

// Create a custom grid around a origin lat/long
let grid = RouteData.GetPointGrid(47.660273, -122.409887, 1, 0.5);

RouteData.GetGraph(grid, 0.7) // get a graph from point grid
  .then(graph => RouteData.FindNaturePaths(graph)) // find all possible paths
  .then(paths => RouteData.FindTopNaturePaths(paths)) // return sorted paths
  .then(results => {
    console.log(results); // do something with results
  }).catch(err => console.error(err));