compare-geojson
Version:
Compare a features new and old versions in GeoJSON
63 lines (51 loc) • 2.18 kB
JavaScript
;
var request = require('request');
module.exports = nameMatchesToWikidata;
function getWikidataName(feature, id) {
if (feature.hasOwnProperty('entities') &&
feature['entities'].hasOwnProperty(id) &&
feature['entities'][id].hasOwnProperty(['labels']) &&
feature['entities'][id]['labels'].hasOwnProperty('en'))
return feature['entities'][id]['labels']['en']['value'];
else
return undefined;
}
function getWikidataAliasNames(feature, id) {
var names = [];
if (feature.hasOwnProperty('entities') &&
feature['entities'].hasOwnProperty(id) &&
feature['entities'][id].hasOwnProperty(['aliases']) &&
feature['entities'][id]['aliases'].hasOwnProperty('en')) {
var aliases = feature['entities'][id]['aliases']['en'];
for (var i = 0; i < aliases.length; i++) {
names.push(aliases[i]['value']);
}
}
return names;
}
function nameMatchesToWikidata(newVersion, oldVersion, callback) {
var result = {};
if (!newVersion) return callback(null, result);
// Check if feature is newly created.
if (newVersion.properties['osm:version'] !== 1) {
if (!oldVersion || (newVersion.properties['name'] === oldVersion.properties['name'])) return callback(null, result);
}
if (newVersion.properties.hasOwnProperty('wikidata') && newVersion.properties.hasOwnProperty('name')) {
var osmName = newVersion.properties['name'];
var wikidataID = newVersion.properties['wikidata'];
var url = 'https://www.wikidata.org/w/api.php?action=wbgetentities&ids=' + wikidataID + '&format=json';
request(url, function (error, response, body) {
if (!error && response && (response.statusCode === 200)) {
var wikidataFeature = JSON.parse(body);
var wikidataName = getWikidataName(wikidataFeature, wikidataID);
var wikidataAliasNames = getWikidataAliasNames(wikidataFeature, wikidataID);
if ((osmName !== wikidataName) && (wikidataAliasNames.indexOf(osmName) === -1)) return callback(null, {
'result:name_matches_to_wikidata': false
});
}
return callback(null, result);
});
} else {
return callback(null, result);
}
}