compare-geojson
Version:
Compare a features new and old versions in GeoJSON
74 lines (57 loc) • 1.77 kB
JavaScript
;
var TRIGGER_AFTER_VERSION = 10;
var MAJOR_ROAD_TYPES = [
'motorway',
'trunk',
'primary',
'secondary',
'tertiary',
'motorway_link',
'trunk_link',
'primary_link',
'secondary_link',
'tertiary_link'
];
function getHighwayType(feature) {
return feature.properties.highway;
}
function getVersion(feature) {
return feature.properties['osm:version'];
}
function isMajorRoad(feature) {
var highwayType = getHighwayType(feature);
return MAJOR_ROAD_TYPES.indexOf(highwayType) !== -1;
}
function majorRoadChanged(newVersion, oldVersion, callback) {
var result = {};
result['result:major_road_changed'] = {};
if (!oldVersion && !newVersion) {
return callback(null, {});
}
if (!oldVersion && newVersion) {
return callback(null, {});
}
var oldVersionNumber = getVersion(oldVersion);
var oldHighwayType = getHighwayType(oldVersion);
if (oldVersion && newVersion) {
var newVersionNumber = getVersion(newVersion);
var newHighwayType = getHighwayType(newVersion);
if (oldVersionNumber > TRIGGER_AFTER_VERSION && isMajorRoad(oldVersion)) {
if (oldHighwayType !== newHighwayType) {
result['result:major_road_changed'].modified = true;
result['result:major_road_changed'].from = oldHighwayType;
result['result:major_road_changed'].to = newHighwayType;
return callback(null, result);
}
}
}
if (oldVersion && !newVersion) {
if (oldVersionNumber > TRIGGER_AFTER_VERSION && isMajorRoad(oldVersion)) {
result['result:major_road_changed'].deleted = true;
result['result:major_road_changed'].version = oldVersionNumber;
return callback(null, result);
}
}
return callback(null, {});
}
module.exports = majorRoadChanged;