diff options
| author | Andrew Harvey <andrew@alantgeo.com.au> | 2021-06-18 15:37:45 +1000 | 
|---|---|---|
| committer | Andrew Harvey <andrew@alantgeo.com.au> | 2021-06-18 15:37:45 +1000 | 
| commit | d979aeb8e311ba3970c77a57b07ec1dea622b39f (patch) | |
| tree | e0dea114966910d10875fe5a7bd66f2ee9e33c5b /bin | |
| parent | dfc9041eb086e32b00f597bc1aebb284946d412f (diff) | |
Where one of the range endpoints is mapped with `addr:flats` and the range itself has no `addr:flats` then the range is removed (for example at _116 Anderson Street, South Yarra_)
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/reduceDuplicates.js | 1 | ||||
| -rwxr-xr-x | bin/reduceOverlap.js | 10 | ||||
| -rwxr-xr-x | bin/reduceRangeDuplicates.js | 23 | 
3 files changed, 29 insertions, 5 deletions
diff --git a/bin/reduceDuplicates.js b/bin/reduceDuplicates.js index 0880abf..e4373c1 100755 --- a/bin/reduceDuplicates.js +++ b/bin/reduceDuplicates.js @@ -45,7 +45,6 @@ const index = new Transform({      }      const key = [ -      // feature.properties['addr:unit:prefix'],        feature.properties['addr:unit'],        feature.properties['addr:housenumber'],        feature.properties['addr:street'], diff --git a/bin/reduceOverlap.js b/bin/reduceOverlap.js index 90ca036..7414241 100755 --- a/bin/reduceOverlap.js +++ b/bin/reduceOverlap.js @@ -1,5 +1,9 @@  #!/usr/bin/env node +/** + * Reduce overlapping features which can be combined together into a single feature. + */ +  const fs = require('fs')  const { Readable, Transform, pipeline } = require('stream')  const ndjson = require('ndjson') @@ -85,7 +89,7 @@ const reduce = new Transform({        // multiple features with the same geometry        // group by housenumber, street, suburb, state, postcode to reduce units into addr:flats -      // groupedFeatures all all the features at the same point +      // groupedFeatures is all the features at the same point        const featuresGroupByNonUnit = {}        groupedFeatures.forEach(feature => {          const key = [ @@ -175,7 +179,9 @@ const reduce = new Transform({  })  /** - * limit values + * Per https://wiki.openstreetmap.org/wiki/API_v0.6#Maximum_string_lengths + * tag values are limited to 255 characters. Because some addr:flats values can + * exceed this, they are split into addr:flatsN tags.   */  let limitValuesIndex = 0  const limitValues = new Transform({ diff --git a/bin/reduceRangeDuplicates.js b/bin/reduceRangeDuplicates.js index 89f8a11..6fac0b5 100755 --- a/bin/reduceRangeDuplicates.js +++ b/bin/reduceRangeDuplicates.js @@ -134,6 +134,9 @@ const reduceRange = new Transform({          let foundStart = false          let foundEnd = false +        let matchedStart +        let matchedEnd +          let startNum          let endNum          let pre = '' @@ -142,6 +145,7 @@ const reduceRange = new Transform({          for (const matchCandidate of matchCandidates) {            if (!foundStart && start === matchCandidate.properties['addr:housenumber']) {              foundStart = true +            matchedStart = matchCandidate              const match = start.match(regexp)              if (match && match.groups) { @@ -152,6 +156,7 @@ const reduceRange = new Transform({            }            if (!foundEnd && end === matchCandidate.properties['addr:housenumber']) {              foundEnd = true +            matchedEnd = matchCandidate              const match = end.match(regexp)              if (match && match.groups) { @@ -203,8 +208,22 @@ const reduceRange = new Transform({            // keep track of removed features for filter B, so we don't double remove both range and midpoints            rangesRemovedInFilterA[hash(feature)] = true          } else { -          // since not both start and end found, then still include the range -          this.push(feature) +          // not both start and end found, +          // if one of start or end found and that start/end has addr:flats... +          if (foundStart || foundEnd) { +            // ...if the range has no flats AND the non-range has addr:flats +            if (!feature.properties['addr:flats'] && ( +              (matchedStart && matchedStart.properties['addr:flats']) || (matchedEnd && matchedEnd.properties['addr:flats']) +            )) { +              // drop the range, eg "112-116 Anderson Street, South Yarra" +            } else { +              // then still include the range +              this.push(feature) +            } +          } else { +            // then still include the range +            this.push(feature) +          }          }        } else {          // there are no non-ranges on this street so still include the range  | 
