From 8581d5182b9b0b126b6cf690e40740ebf5aa1c75 Mon Sep 17 00:00:00 2001 From: Andrew Harvey Date: Fri, 7 May 2021 22:00:39 +1000 Subject: reduce numbers within a range duplication --- lib/withinRange.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 lib/withinRange.js (limited to 'lib/withinRange.js') 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 = /^(?
\D*)(?\d*)(?\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
+  }
+}
-- 
cgit v1.2.3