kopia lustrzana https://github.com/jakecoppinger/safe-cycling-map
Load safe routes and plot them
Doesn't work for multiple pans at the momentload-bicycle-parking
rodzic
f5accf4a8f
commit
43166ef98a
|
@ -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",
|
||||
|
|
|
@ -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",
|
||||
|
|
84
src/api.ts
84
src/api.ts
|
@ -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);
|
||||
|
|
|
@ -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";
|
|
@ -207,4 +207,9 @@ export const mapOnLoad = (map: mapboxgl.Map) => () => {
|
|||
},
|
||||
filter: ["==", "$type", "Polygon"],
|
||||
}, layerToAddAfter);
|
||||
|
||||
///////////////
|
||||
|
||||
|
||||
|
||||
};
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}}
|
||||
`
|
Ładowanie…
Reference in New Issue