aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/withinRange.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/withinRange.js b/lib/withinRange.js
new file mode 100644
index 0000000..e75f788
--- /dev/null
+++ b/lib/withinRange.js
@@ -0,0 +1,45 @@
+/**
+ * @param {Object} feature
+ * @param {Object} rangeFeature
+ *
+ * @returns {boolean} True if addr:housenumber of feature is within the range of addr:housenumber rangeFeature and all other addr:* attributes match
+ */
+module.exports = (feature, rangeFeature) => {
+ const regexp = /^(?<pre>\D*)(?<num>\d*)(?<suf>\D*)$/
+
+ if (
+ // must have a housenumber
+ 'addr:housenumber' in feature.properties &&
+ 'addr:housenumber' in rangeFeature.properties &&
+
+ // must have a street and street must match
+ 'addr:street' in feature.properties &&
+ 'addr:street' in rangeFeature.properties &&
+ feature.properties['addr:street'] === rangeFeature.properties['addr:street'] &&
+
+ // other higher attributes must match if exists
+ feature.properties['addr:suburb'] === rangeFeature.properties['addr:suburb'] &&
+ feature.properties['addr:state'] === rangeFeature.properties['addr:state'] &&
+ feature.properties['addr:postcode'] === rangeFeature.properties['addr:postcode']
+ ) {
+ const rangeParts = rangeFeature.properties['addr:housenumber'].split('-')
+ if (rangeParts.length === 2) {
+ const from = rangeParts[0].match(regexp).groups
+ const to = rangeParts[1].match(regexp).groups
+
+ const i = feature.properties['addr:housenumber'].match(regexp).groups
+ if (i.num >= from.num && i.num <= to.num) {
+ // feature within featureRange (ignore prefix/suffix)
+ return true
+ } else {
+ return false
+ }
+
+ } else {
+ // range is not actually a range
+ return false
+ }
+ } else {
+ return false
+ }
+}