Skip to content
This repository has been archived by the owner. It is now read-only.
Security Force Monitor CSV proxy
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
data
docs
lib
schemas/validation
tasks
CHANGELOG.md
Gemfile
Gemfile.lock
LICENSE
Procfile
README.md
Rakefile
config.ru

README.md

Security Force Monitor: CSV Proxy

API

Tasks

Use rbenv or rvm. Install dependencies:

gem install bundler
bundle

Drop the local sfm MongoDB database, and import the data from Google Sheets:

mongo sfm --eval "db.dropDatabase()"
bundle exec rake import_csv

To import faster, skip the validation of records against the JSON Schema:

bundle exec rake import_csv novalidate=true

Import geometries:

bundle exec rake import_geo country_code=ng

Link areas, events and sites to geometries:

bundle exec rake link_geometries

Create the geospatial indices in the MongoDB shell:

db.geometries.createIndex({point: '2dsphere'})
db.areas.createIndex({point: '2dsphere'})
db.events.createIndex({point: '2dsphere'})
db.sites.createIndex({point: '2dsphere'})
db.geometries.createIndex({geo: '2dsphere'})
db.areas.createIndex({geo: '2dsphere'})

Testing

Start a local server:

rackup

Test the endpoints of a local server:

bundle exec rake

Maintenance

Create GeoJSON and TopoJSON from Natural Earth shapefiles:

ogr2ogr -f "GeoJSON" -t_srs EPSG:4326 -select 'iso_a2' data/geojson/adm0/xa.geojson shapefiles/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp
ogr2ogr -f "GeoJSON" -t_srs EPSG:4326 -select 'iso_a2' -where "iso_a2='EG'" data/geojson/adm0/eg.geojson shapefiles/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp
ogr2ogr -f "GeoJSON" -t_srs EPSG:4326 -select 'iso_a2' -where "iso_a2='MX'" data/geojson/adm0/mx.geojson shapefiles/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp
ogr2ogr -f "GeoJSON" -t_srs EPSG:4326 -select 'iso_a2' -where "iso_a2='NG'" data/geojson/adm0/ng.geojson shapefiles/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp

topojson -o data/topojson/adm0/xa.topojson data/geojson/adm0/xa.geojson
topojson -o data/topojson/adm0/eg.topojson data/geojson/adm0/eg.geojson
topojson -o data/topojson/adm0/mx.topojson data/geojson/adm0/mx.geojson
topojson -o data/topojson/adm0/ng.topojson data/geojson/adm0/ng.geojson

If you have access to GAUL, extract a country, in this case Nigeria:

ogr2ogr -f "ESRI Shapefile" -select 'ADM1_CODE,ADM1_NAME' -where "ADM0_CODE=182" shapefiles/gaul_ng_adm1 path/to/g2015_2014_1.shp
ogr2ogr -f "ESRI Shapefile" -select 'ADM2_CODE,ADM2_NAME,ADM1_CODE,ADM1_NAME' -where "ADM0_CODE=182" shapefiles/gaul_ng_adm2 path/to/g2015_2014_2.shp

In QGIS, simplify the geometries by a factor of 0.01. Then, create GeoJSON:

ogr2ogr -f "GeoJSON" -t_srs EPSG:4326 -select 'ADM1_CODE,ADM1_NAME' data/geojson/adm1/ng.geojson shapefiles/gaul_ng_adm1_0.01/gaul_ng_adm1_0.01.shp
ogr2ogr -f "GeoJSON" -t_srs EPSG:4326 -select 'ADM2_CODE,ADM2_NAME,ADM1_CODE,ADM1_NAME' data/geojson/adm2/ng.geojson shapefiles/gaul_ng_adm2_0.01/gaul_ng_adm2_0.01.shp

Note: Creating GeoJSON and TopoJSON from GADM shapefiles produces large files:

bundle exec rake topojson output=adm0/ng input=shapefiles/NGA_adm/NGA_adm0.shp

Deployment

heroku apps:create
heroku addons:create mongolab
git push heroku master
heroku run rake import_csv novalidate=true
heroku run rake import_geo country_code=ng
bundle exec rake link_geometries

Log into the remote MongoDB database and create the geospatial indices as above.

Copyright (c) 2015 Open North Inc., released under the MIT license

You can’t perform that action at this time.