Warning: this is experimental
Generate drive-time isochrones from OpenStreetMap data using OSRM.
##Install
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)
#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:
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
node my-file.js
The output will be in GeoJSON format.
###Advanced
Alternatively the network
parameter can be an 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:
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();