-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
47 lines (46 loc) · 1.57 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var polygonFeatures = require('osm-polygon-features')
module.exports = function testItem (item) {
var isArea = false
if (item.type === 'node') { isArea = false }
else if (item.type === 'way' && item.refs.length < 3) { isArea = false }
else if (item.type === 'way' && (
item.refs[0] === item.refs[item.refs.length - 1]
|| (Array.isArray(item.refs[0])
&& item.refs[0][0] === item.refs[item.refs.length - 1][0]
&& item.refs[0][1] === item.refs[item.refs.length - 1][1])
)) {
if (item.tags === {}) { isArea = false }
if (item.tags['area'] === 'no') { isArea = false }
else polygonFeatures.forEach(function (obj) {
for (var key in item.tags) {
if (key === obj.key && obj.polygon === 'all' && item.tags[key] !== 'no') {
isArea = true
}
if (key === obj.key && obj.polygon === 'whitelist') {
obj.values.forEach(function (val) {
if (item.tags[key] === val) { isArea = true }
})
}
if (key === obj.key && obj.polygon === 'blacklist') {
isArea = true
if (key === 'natural' && item.tags[key] === 'coastline') isArea = true
else {
obj.values.forEach(function (val) {
if (item.tags[key] === val) { isArea = false }
})
}
}
}
})
}
else if (item.type === 'relation') {
if (!Array.isArray(item.members) || item.members.length === 0) {
isArea = false
}
else if (item.tags.type === 'multipolygon') {
isArea = true
}
else isArea = false
}
return isArea
}