Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mapbox/osrm-isochrone

Generate drivetime isochrones from OpenStreetMap data using OSRM
https://github.com/mapbox/osrm-isochrone

banished

Last synced: 8 days ago
JSON representation

Generate drivetime isochrones from OpenStreetMap data using OSRM

Awesome Lists containing this project

README

        

osrm-isochrone
---
**Warning: this is experimental**

[![Build Status](https://travis-ci.org/mapbox/osrm-isochrone.svg)](https://travis-ci.org/mapbox/osrm-isochrone)

Generate drive-time [isochrones](http://en.wikipedia.org/wiki/Isochrone_map) from [OpenStreetMap](http://www.openstreetmap.org/) data using [OSRM](http://project-osrm.org/).

![](https://dl.dropbox.com/s/r7hntimgiv5cfeq/Screenshot%202014-11-24%2017.20.32.png?dl=0)

##Install

```sh
npm install osrm-isochrone
```

##Build
An osrm file is required for routing. This can be generated using included binaries. (*Note: this will take a lot of processing power if you are planning to use the entire planet.osm file, for general use a regional OSM data extract is preferable. More info [here](https://github.com/Project-OSRM/osrm-backend/wiki/Running-OSRM)*)

```sh
#first download an osm file containing the area you need
./node_modules/osrm-isochrone/osrm/lib/binding/osrm-extract mydata.osm -p ./node_modules/osrm-isochrone/osrm/test/data/car.lua
./node_modules/osrm-isochrone/osrm/lib/binding/osrm-prepare mydata.osrm -p ./node_modules/osrm-isochrone/osrm/test/data/car.lua
```

##Usage
Create a file containing something such as:
```js
var isochrone = require('osrm-isochrone');

var time = 300; // 300 second drivetime (5 minutes)
var location = [-77.02926635742188,38.90011780426885]; // center point
// Note: coordinates are E/W , N/S
var options = {
resolution: 25, // sample resolution
maxspeed: 70, // in 'unit'/hour
unit: 'miles', // 'miles' or 'kilometers'
network: './dc.osrm' // prebuilt dc osrm network file, or use the one just built.
}

isochrone(location, time, options, function(err, drivetime) {
if(err) throw err;
// a geojson linestring
console.log(JSON.stringify(drivetime))
});
```
Run with

```sh
node my-file.js
```

The output will be in GeoJSON format.

###Advanced
Alternatively the `network` parameter can be an [OSRM](https://github.com/Project-OSRM/node-osrm) module instance. Allowing setup an OSRM with custom parameters, e.g. usage of shared-memory.

You can too define your own function to draw line/polygon instead of default:

```js
var concave = require('turf-concave');
var Isochrone = require('osrm-isochrone');

var time = 300; // 300 second drivetime (5 minutes)
var location = [-77.02926635742188,38.90011780426885]; // center point
var options = {
resolution: 25, // sample resolution
maxspeed: 70, // in 'unit'/hour
unit: 'miles', // 'miles' or 'kilometers'
network: './dc.osrm' // prebuild dc osrm network file
}

var isochrone = new Isochrone(location, time, options, function(err, drivetime) {
if(err) throw err;
// your geojson from draw overload
console.log(JSON.stringify(drivetime))
});
isochrone.draw = function(destinations) {
var inside = destinations.features.filter(function(feat) {
return feat.properties.eta <= time;
});
destinations.features = inside;
return concave(destinations, this.sizeCellGrid, unit);
}
isochrone.getIsochrone();
```