Load safe routes and plot them

Doesn't work for multiple pans at the moment
load-bicycle-parking
Jake Coppinger 2023-01-27 08:38:41 +11:00
rodzic f5accf4a8f
commit 43166ef98a
6 zmienionych plików z 419 dodań i 114 usunięć

328
package-lock.json wygenerowano
Wyświetl plik

@ -13,6 +13,7 @@
"@mapbox/mapbox-gl-geocoder": "^5.0.1",
"@svgr/webpack": "4.3.3",
"@types/debounce": "^1.2.1",
"@types/osmtogeojson": "^2.2.30",
"@typescript-eslint/eslint-plugin": "^2.10.0",
"@typescript-eslint/parser": "^2.10.0",
"babel-eslint": "10.1.0",
@ -45,6 +46,7 @@
"mapbox-gl": "^2.9.2",
"mini-css-extract-plugin": "0.9.0",
"optimize-css-assets-webpack-plugin": "5.0.3",
"osmtogeojson": "^3.0.0-beta.5",
"pnp-webpack-plugin": "1.6.4",
"postcss-flexbugs-fixes": "4.1.0",
"postcss-loader": "3.0.0",
@ -2412,7 +2414,7 @@
"version": "7946.0.10",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
"integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==",
"dev": true
"devOptional": true
},
"node_modules/@types/glob": {
"version": "7.1.3",
@ -2521,6 +2523,11 @@
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
"integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
},
"node_modules/@types/osmtogeojson": {
"version": "2.2.30",
"resolved": "https://registry.npmjs.org/@types/osmtogeojson/-/osmtogeojson-2.2.30.tgz",
"integrity": "sha512-2TE8PjRSqDvlSCNUU3jln9KVKERXwOAVR7Yhxaww0ST9WSqylIAT0itivECUyvuK83/JkIsCnExS4yNobP8SVg=="
},
"node_modules/@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@ -3008,6 +3015,14 @@
"@xtuc/long": "4.2.2"
}
},
"node_modules/@xmldom/xmldom": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz",
"integrity": "sha512-Lv2vySXypg4nfa51LY1nU8yDAGo/5YwF+EY/rUZgIbfvwVARcd67ttCM8SMsTeJy51YhHYavEq+FS6R0hW9PFQ==",
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@ -5099,6 +5114,20 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"node_modules/concat-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
"integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
"engines": [
"node >= 6.0"
],
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.0.2",
"typedarray": "^0.0.6"
}
},
"node_modules/confusing-browser-globals": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz",
@ -8066,6 +8095,18 @@
"node": ">=6.9.0"
}
},
"node_modules/geojson-numeric": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz",
"integrity": "sha512-rvItMp3W7pe16o2EQTnRw54v6WHdiE4bYjUsdr3FZskFb6oPC7gjLe4zginP+Wd1B/HLl2acTukfn16Lmwn7lg==",
"dependencies": {
"concat-stream": "2.0.0",
"optimist": "~0.3.5"
},
"bin": {
"geojson-numeric": "geojson-numeric"
}
},
"node_modules/geojson-vt": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
@ -10289,6 +10330,31 @@
"node": "*"
}
},
"node_modules/jsonparse": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
"integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==",
"engines": [
"node >= 0.2.0"
]
},
"node_modules/JSONStream": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz",
"integrity": "sha512-PiV28BpoUorz9kKFwRbD7+wg0t/k0ITHKn0DgCU44YZ/GaGAZRPt9q5PzoifC85gE55SEPIdMu0Labfxevj8cw==",
"dependencies": {
"jsonparse": "0.0.5",
"through": "~2.2.7"
},
"engines": {
"node": "*"
}
},
"node_modules/JSONStream/node_modules/through": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz",
"integrity": "sha512-JIR0m0ybkmTcR8URann+HbwKmodP+OE8UCbsifQDYMLD5J3em1Cdn3MYPpbEd5elGDwmP98T+WbqP/tvzA5Mjg=="
},
"node_modules/jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@ -11970,6 +12036,14 @@
"node": ">=4"
}
},
"node_modules/optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==",
"dependencies": {
"wordwrap": "~0.0.2"
}
},
"node_modules/optimize-css-assets-webpack-plugin": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz",
@ -12032,6 +12106,84 @@
"node": ">=0.10.0"
}
},
"node_modules/osm-polygon-features": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz",
"integrity": "sha512-5zNEFCq+G6X2TDkqbKYLF1+GtWVCCLA8zX+FVhSogsiTRsGquyaGRy5cYNW4BE3ci0MKOLvNTkFNsjsCNtgz0A=="
},
"node_modules/osmtogeojson": {
"version": "3.0.0-beta.5",
"resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-3.0.0-beta.5.tgz",
"integrity": "sha512-izvaUWnunrYvMB4LB0ZN15O1+g90c628yHS4SeSR3daVSBF9vdTHL7iVHfg0wEr1uEYjQ+lMJHCiYFusL5yKVg==",
"dependencies": {
"@mapbox/geojson-rewind": "0.5.2",
"@xmldom/xmldom": "0.8.3",
"concat-stream": "2.0.0",
"geojson-numeric": "0.2.1",
"htmlparser2": "3.5.1",
"JSONStream": "0.8.0",
"optimist": "~0.3.5",
"osm-polygon-features": "^0.9.1",
"tiny-osmpbf": "^0.1.0"
},
"bin": {
"osmtogeojson": "osmtogeojson"
},
"engines": {
"node": ">=0.5"
},
"optionalDependencies": {
"@types/geojson": "^7946.0"
}
},
"node_modules/osmtogeojson/node_modules/domhandler": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz",
"integrity": "sha512-MFFBQFGkyTuNe3vL9WEw9JdlCwIoBYpOGESLeZAvc/jClYNsOl6P1KzevJbWg76GovdEycfR7/2/Ra7NnqtMKw==",
"dependencies": {
"domelementtype": "1"
}
},
"node_modules/osmtogeojson/node_modules/domutils": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz",
"integrity": "sha512-1UdPmldjSGewOuWE40YYFZB1Q4im4LZoCMXGYeTeLz3R9hvxrDYJPRcPHXR4yBbubQebgGNCY2hwpJxmAiUMzQ==",
"dependencies": {
"domelementtype": "1"
}
},
"node_modules/osmtogeojson/node_modules/htmlparser2": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz",
"integrity": "sha512-9ouaQ6sjVJZS4NhPC65zNm2JCJotiH6BVm6iFvI90hRcsIEISMrgjqMUrPpU9G1VS4vTspH4dyaqSRf6JLQPbg==",
"dependencies": {
"domelementtype": "1",
"domhandler": "2.2",
"domutils": "1.3",
"readable-stream": "1.1"
}
},
"node_modules/osmtogeojson/node_modules/isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"node_modules/osmtogeojson/node_modules/readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"node_modules/osmtogeojson/node_modules/string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
},
"node_modules/p-cancelable": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
@ -16435,6 +16587,20 @@
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
},
"node_modules/tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
},
"node_modules/tiny-osmpbf": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz",
"integrity": "sha512-Sl0xuDdM0+bnrYPhTAWnQ5eui8+2cpYCnsBxq0EFR1/IgmfB7+FiC23I8aa7tdP4AjaWvBUMK34kfXdY6C1LCQ==",
"dependencies": {
"pbf": "^3.0.4",
"tiny-inflate": "^1.0.2"
}
},
"node_modules/tinyqueue": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
@ -17860,6 +18026,14 @@
"node": ">=0.10.0"
}
},
"node_modules/wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==",
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/workbox-background-sync": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz",
@ -20105,7 +20279,7 @@
"version": "7946.0.10",
"resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
"integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==",
"dev": true
"devOptional": true
},
"@types/glob": {
"version": "7.1.3",
@ -20214,6 +20388,11 @@
"resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
"integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw=="
},
"@types/osmtogeojson": {
"version": "2.2.30",
"resolved": "https://registry.npmjs.org/@types/osmtogeojson/-/osmtogeojson-2.2.30.tgz",
"integrity": "sha512-2TE8PjRSqDvlSCNUU3jln9KVKERXwOAVR7Yhxaww0ST9WSqylIAT0itivECUyvuK83/JkIsCnExS4yNobP8SVg=="
},
"@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
@ -20619,6 +20798,11 @@
"@xtuc/long": "4.2.2"
}
},
"@xmldom/xmldom": {
"version": "0.8.3",
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz",
"integrity": "sha512-Lv2vySXypg4nfa51LY1nU8yDAGo/5YwF+EY/rUZgIbfvwVARcd67ttCM8SMsTeJy51YhHYavEq+FS6R0hW9PFQ=="
},
"@xtuc/ieee754": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
@ -22320,6 +22504,17 @@
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"concat-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
"integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
"requires": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.0.2",
"typedarray": "^0.0.6"
}
},
"confusing-browser-globals": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz",
@ -24733,6 +24928,15 @@
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
"integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg=="
},
"geojson-numeric": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz",
"integrity": "sha512-rvItMp3W7pe16o2EQTnRw54v6WHdiE4bYjUsdr3FZskFb6oPC7gjLe4zginP+Wd1B/HLl2acTukfn16Lmwn7lg==",
"requires": {
"concat-stream": "2.0.0",
"optimist": "~0.3.5"
}
},
"geojson-vt": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz",
@ -26489,6 +26693,27 @@
"resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
"integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
},
"jsonparse": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
"integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ=="
},
"JSONStream": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz",
"integrity": "sha512-PiV28BpoUorz9kKFwRbD7+wg0t/k0ITHKn0DgCU44YZ/GaGAZRPt9q5PzoifC85gE55SEPIdMu0Labfxevj8cw==",
"requires": {
"jsonparse": "0.0.5",
"through": "~2.2.7"
},
"dependencies": {
"through": {
"version": "2.2.7",
"resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz",
"integrity": "sha512-JIR0m0ybkmTcR8URann+HbwKmodP+OE8UCbsifQDYMLD5J3em1Cdn3MYPpbEd5elGDwmP98T+WbqP/tvzA5Mjg=="
}
}
},
"jsprim": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
@ -27850,6 +28075,14 @@
"is-wsl": "^1.1.0"
}
},
"optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==",
"requires": {
"wordwrap": "~0.0.2"
}
},
"optimize-css-assets-webpack-plugin": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz",
@ -27900,6 +28133,78 @@
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
},
"osm-polygon-features": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz",
"integrity": "sha512-5zNEFCq+G6X2TDkqbKYLF1+GtWVCCLA8zX+FVhSogsiTRsGquyaGRy5cYNW4BE3ci0MKOLvNTkFNsjsCNtgz0A=="
},
"osmtogeojson": {
"version": "3.0.0-beta.5",
"resolved": "https://registry.npmjs.org/osmtogeojson/-/osmtogeojson-3.0.0-beta.5.tgz",
"integrity": "sha512-izvaUWnunrYvMB4LB0ZN15O1+g90c628yHS4SeSR3daVSBF9vdTHL7iVHfg0wEr1uEYjQ+lMJHCiYFusL5yKVg==",
"requires": {
"@mapbox/geojson-rewind": "0.5.2",
"@types/geojson": "^7946.0",
"@xmldom/xmldom": "0.8.3",
"concat-stream": "2.0.0",
"geojson-numeric": "0.2.1",
"htmlparser2": "3.5.1",
"JSONStream": "0.8.0",
"optimist": "~0.3.5",
"osm-polygon-features": "^0.9.1",
"tiny-osmpbf": "^0.1.0"
},
"dependencies": {
"domhandler": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz",
"integrity": "sha512-MFFBQFGkyTuNe3vL9WEw9JdlCwIoBYpOGESLeZAvc/jClYNsOl6P1KzevJbWg76GovdEycfR7/2/Ra7NnqtMKw==",
"requires": {
"domelementtype": "1"
}
},
"domutils": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz",
"integrity": "sha512-1UdPmldjSGewOuWE40YYFZB1Q4im4LZoCMXGYeTeLz3R9hvxrDYJPRcPHXR4yBbubQebgGNCY2hwpJxmAiUMzQ==",
"requires": {
"domelementtype": "1"
}
},
"htmlparser2": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz",
"integrity": "sha512-9ouaQ6sjVJZS4NhPC65zNm2JCJotiH6BVm6iFvI90hRcsIEISMrgjqMUrPpU9G1VS4vTspH4dyaqSRf6JLQPbg==",
"requires": {
"domelementtype": "1",
"domhandler": "2.2",
"domutils": "1.3",
"readable-stream": "1.1"
}
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
}
}
},
"p-cancelable": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz",
@ -31462,6 +31767,20 @@
"resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
"integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
},
"tiny-inflate": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
},
"tiny-osmpbf": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz",
"integrity": "sha512-Sl0xuDdM0+bnrYPhTAWnQ5eui8+2cpYCnsBxq0EFR1/IgmfB7+FiC23I8aa7tdP4AjaWvBUMK34kfXdY6C1LCQ==",
"requires": {
"pbf": "^3.0.4",
"tiny-inflate": "^1.0.2"
}
},
"tinyqueue": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz",
@ -32610,6 +32929,11 @@
"resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
"integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
},
"wordwrap": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
"integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw=="
},
"workbox-background-sync": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz",

Wyświetl plik

@ -8,6 +8,7 @@
"@mapbox/mapbox-gl-geocoder": "^5.0.1",
"@svgr/webpack": "4.3.3",
"@types/debounce": "^1.2.1",
"@types/osmtogeojson": "^2.2.30",
"@typescript-eslint/eslint-plugin": "^2.10.0",
"@typescript-eslint/parser": "^2.10.0",
"babel-eslint": "10.1.0",
@ -40,6 +41,7 @@
"mapbox-gl": "^2.9.2",
"mini-css-extract-plugin": "0.9.0",
"optimize-css-assets-webpack-plugin": "5.0.3",
"osmtogeojson": "^3.0.0-beta.5",
"pnp-webpack-plugin": "1.6.4",
"postcss-flexbugs-fixes": "4.1.0",
"postcss-loader": "3.0.0",

Wyświetl plik

@ -4,7 +4,9 @@ import { OverpassResponse, RawOverpassNode } from "./interfaces";
import * as http from "https";
import { drawMarkersAndCards, removeMarkers } from "./drawing";
import { wayToNode } from "./geo-utils";
import { bicycleParking } from "./overpass-requests";
import { bicycleParking, safeCycleways } from "./overpass-requests";
import osmtogeojson from 'osmtogeojson';
/**
* Make request to Overpass Turbo.
@ -18,7 +20,8 @@ export async function getOSMData(overpassQuery: string): Promise<OverpassRespons
path: "/api/interpreter",
method: "POST",
headers: {
"Content-Type": "application/json",
// "Content-Type": "application/json",
'Content-Type': 'application/x-www-form-urlencoded'
},
};
@ -34,14 +37,15 @@ export async function getOSMData(overpassQuery: string): Promise<OverpassRespons
}
const jsonResponse = JSON.parse(body);
const bars = jsonResponse.elements;
resolve(bars);
resolve(jsonResponse);
});
});
req.on("error", function (e) {
reject(e.message);
});
req.write(overpassQuery);
req.write(new URLSearchParams({
'data': overpassQuery,
}).toString());
req.end();
});
}
@ -61,24 +65,86 @@ async function fetchAndDrawMarkers(
const eastLong = bounds.getEast();
let ads: OverpassResponse;
let safeRoutes: OverpassResponse;
const overpassBounds = [southernLat, westLong, northLat, eastLong];
const boundsStr = overpassBounds.join(",");
const overpassQuery = bicycleParking(boundsStr);;
const parkingOverpassQuery = bicycleParking(boundsStr);;
const safeRoutesOverpassQuery = safeCycleways(boundsStr);;
console.log("Started POST request...");
try {
ads = await getOSMData(overpassQuery);
ads = (await getOSMData(parkingOverpassQuery));
safeRoutes = await getOSMData(safeRoutesOverpassQuery);
} catch (e) {
console.log("Error:", e);
setLoadingStatus("unknownerror");
return;
}
const geoJson = osmtogeojson(safeRoutes, {})
console.log(geoJson);
console.log("Adding geojson to map...");
// try {
// map.removeSource('greenRoads');
// } catch (e) {
// }
map.addSource('redRoads', {
type: 'geojson',
data: {
features: geoJson.features.filter(feature => feature.properties &&
feature.properties.maxspeed > 40),
type: "FeatureCollection"
}
});
map.addSource('greenRoads', {
type: 'geojson',
data: {
features: geoJson.features.filter(feature => feature.properties &&
(feature.properties.highway === 'cycleway' || feature.properties.highway === 'pedestrian'))
,
type: "FeatureCollection"
}
});
// Add a new layer to visualize the polygon.
map.addLayer({
'id': 'redRoadsId',
'type': 'line',
'source': 'redRoads', // reference the data source
'layout': {},
'paint': {
"line-color": "red",
"line-width": 5
},
});
// Add a new layer to visualize the polygon.
map.addLayer({
'id': 'greenRoadsId',
'type': 'line',
'source': 'greenRoads', // reference the data source
'layout': {},
'paint': {
"line-color": "green",
"line-width": 5
},
});
return;
removeMarkers(markers.current);
const nodesAndWayCenters: RawOverpassNode[] = ads
.map((item) => (item.type === "way" ? wayToNode(item, ads) : item))
const nodesAndWayCenters: RawOverpassNode[] = ads.elements
.map((item) => (item.type === "way" ? wayToNode(item, ads.elements) : item))
.filter((item) => item !== null)
.map((item) => item as RawOverpassNode)
.filter((item) => item.tags !== undefined);

Wyświetl plik

@ -4,14 +4,14 @@ interface BicycleParkingInterface {
covered?: "yes" | "no";
lit?: "yes" | "no";
bicycle_parking?:
| "stands"
| "wall_loops"
| "rack"
| "safe_loops"
| "shed"
| "bollard"
| "lockers"
| "building";
| "stands"
| "wall_loops"
| "rack"
| "safe_loops"
| "shed"
| "bollard"
| "lockers"
| "building";
}
export interface RawOverpassNode {
@ -28,7 +28,9 @@ export interface RawOverpassWay {
tags?: BicycleParkingInterface;
}
export type OverpassResponse = (RawOverpassNode | RawOverpassWay)[];
export type OverpassResponse = {
elements: (RawOverpassNode | RawOverpassWay)[]
};
export type LoadingStatusType = "loading" | "success" | "429error" | "unknownerror";

Wyświetl plik

@ -207,4 +207,9 @@ export const mapOnLoad = (map: mapboxgl.Map) => () => {
},
filter: ["==", "$type", "Polygon"],
}, layerToAddAfter);
///////////////
};

Wyświetl plik

@ -38,98 +38,4 @@ export const safeCycleways = (boundsStr: string) => `
out body;
>;
out skel qt;
{{style:
way[maxspeed=80] {
color: red;
width:4;
opacity:1.0
}
way[maxspeed=70] {
color: red;
width:4;
opacity:1.0
}
way[maxspeed=60] {
color: red;
width:4;
opacity:1.0
}
way[maxspeed=50] {
color: red;
width:4;
opacity:1.0
}
way[maxspeed=40] {
color: orange;
width:3;
opacity:1.0
}
way[maxspeed=30] {
color: green;
width:5;
opacity:1.0
}
way[maxspeed=20] {
color: green;
width:6;
opacity:1.0
}
way[maxspeed=10] {
color: green;
width:7;
opacity:1.0
}
/*
#4f9267
#34c467
#15b74e
#2c9551
*/
way[highway=cycleway] {
color: #2c9551;
width:10;
opacity:1.0
}
/*
#3b7ec7
#489fff
*/
way[highway=footway],
way[highway=pedestrian],
way[foot=designated][segregated!=yes],
way[foot=yes][segregated!=yes] {
color: green;
width:10;
opacity: 1.0;
/*dashes: 5,5;*/
}
way[highway=proposed],
way[highway=construction] {
dashes: 5;
width:2;
}
way[highway=proposed] {
color: salmon;
}
way[highway=construction] {
color: purple;
}
way[cycleway=proposed] {
color: red;
}
}}
`