Skip to content

Instantly share code, notes, and snippets.

@botic
Created July 16, 2017 10:22
Show Gist options
  • Select an option

  • Save botic/3032439db0bffc5d0fc0be5d2dfb300f to your computer and use it in GitHub Desktop.

Select an option

Save botic/3032439db0bffc5d0fc0be5d2dfb300f to your computer and use it in GitHub Desktop.
Geocoder
const addresses = require("./wien22.json");
const lookup = function(name, number) {
return addresses.features.find(function(feature) {
return feature.properties["NAME_STR"].indexOf(name) === 0 && feature.properties["NAME_ONR"].indexOf(number) === 0;
});
};
const splitAddress = function(fullName) {
const numberReg = /\ [1-9][0-9]?([-–][1-9][0-9]?)?/g;
const doorsReg = /\ [1-9][0-9]?(\/\w{1,3})?(\/\w{1,3})/;
const streetReg = /([\w\-\ßäöüÄÖÜ]+)(\ [1-9])?/;
let streetMatch = fullName.match(streetReg);
let streetName = (streetMatch && streetMatch.length >= 2 ? streetMatch[1] : "").trim();
let numberMatch = fullName.match(numberReg);
let number = numberMatch && numberMatch.length === 1 ? numberMatch[0].trim() : "";
let doorsMatch = fullName.match(doorsReg);
let stairCase = "";
let door = "";
if (doorsMatch && doorsMatch.length === 3) {
stairCase = (doorsMatch[1] || "").replace("/", "");
door = doorsMatch[2].replace("/", "");
} else if (doorsMatch && doorsMatch.length === 2) {
door = doorsMatch[1].replace("/", "");
}
return {
streetName: streetName,
houseNumber: number,
stairCase: stairCase,
doorNumber: door
};
};
const testData = require("vereine.json");
for (let key in testData) {
let entry = testData[key];
if (entry.adresse == null) {
continue;
}
let ogdAddress = splitAddress(entry.adresse);
let ogdDataset = lookup(ogdAddress.streetName, ogdAddress.houseNumber);
if (ogdDataset == null) {
console.log(entry.adresse, ogdAddress.streetName, ogdAddress.houseNumber);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment