Pull tileserver into app
This commit is contained in:
parent
f6f7cc1341
commit
4422be4440
292
app/package-lock.json
generated
292
app/package-lock.json
generated
@ -161,6 +161,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@mapbox/sphericalmercator": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-pEsfZyG4OMThlfFQbCte4gegvHUjxXCjz0KZ4Xk8NdOYTQBLflj6U8PL05RPAiuRAMAQNUUKJuL6qYZ5Y4kAWA=="
|
||||||
|
},
|
||||||
"@webassemblyjs/ast": {
|
"@webassemblyjs/ast": {
|
||||||
"version": "1.5.13",
|
"version": "1.5.13",
|
||||||
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz",
|
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz",
|
||||||
@ -400,6 +405,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
|
||||||
"integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
|
"integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
|
||||||
},
|
},
|
||||||
|
"abbrev": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
|
||||||
|
},
|
||||||
"accepts": {
|
"accepts": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.5",
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
|
||||||
@ -776,6 +786,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
|
||||||
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
|
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
|
||||||
},
|
},
|
||||||
|
"are-we-there-yet": {
|
||||||
|
"version": "1.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
|
||||||
|
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
|
||||||
|
"requires": {
|
||||||
|
"delegates": "^1.0.0",
|
||||||
|
"readable-stream": "^2.0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"argparse": {
|
"argparse": {
|
||||||
"version": "1.0.10",
|
"version": "1.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||||
@ -2769,6 +2788,11 @@
|
|||||||
"date-now": "^0.1.4"
|
"date-now": "^0.1.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"console-control-strings": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
|
||||||
|
},
|
||||||
"constants-browserify": {
|
"constants-browserify": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
|
||||||
@ -3218,6 +3242,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
||||||
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
|
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
|
||||||
},
|
},
|
||||||
|
"deep-extend": {
|
||||||
|
"version": "0.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
||||||
|
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
|
||||||
|
},
|
||||||
"deep-is": {
|
"deep-is": {
|
||||||
"version": "0.1.3",
|
"version": "0.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
|
||||||
@ -3317,6 +3346,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
|
||||||
},
|
},
|
||||||
|
"delegates": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
|
||||||
|
},
|
||||||
"depd": {
|
"depd": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||||
@ -3344,6 +3378,11 @@
|
|||||||
"repeating": "^2.0.0"
|
"repeating": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"detect-libc": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||||
|
"integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
|
||||||
|
},
|
||||||
"detect-newline": {
|
"detect-newline": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
|
||||||
@ -4460,6 +4499,14 @@
|
|||||||
"universalify": "^0.1.0"
|
"universalify": "^0.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"fs-minipass": {
|
||||||
|
"version": "1.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
|
||||||
|
"integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
|
||||||
|
"requires": {
|
||||||
|
"minipass": "^2.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"fs-write-stream-atomic": {
|
"fs-write-stream-atomic": {
|
||||||
"version": "1.0.10",
|
"version": "1.0.10",
|
||||||
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
|
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
|
||||||
@ -4948,6 +4995,41 @@
|
|||||||
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
|
||||||
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
|
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
|
||||||
},
|
},
|
||||||
|
"gauge": {
|
||||||
|
"version": "2.7.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
|
||||||
|
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
|
||||||
|
"requires": {
|
||||||
|
"aproba": "^1.0.3",
|
||||||
|
"console-control-strings": "^1.0.0",
|
||||||
|
"has-unicode": "^2.0.0",
|
||||||
|
"object-assign": "^4.1.0",
|
||||||
|
"signal-exit": "^3.0.0",
|
||||||
|
"string-width": "^1.0.1",
|
||||||
|
"strip-ansi": "^3.0.1",
|
||||||
|
"wide-align": "^1.1.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"is-fullwidth-code-point": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
||||||
|
"requires": {
|
||||||
|
"number-is-nan": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string-width": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
||||||
|
"requires": {
|
||||||
|
"code-point-at": "^1.0.0",
|
||||||
|
"is-fullwidth-code-point": "^1.0.0",
|
||||||
|
"strip-ansi": "^3.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"get-caller-file": {
|
"get-caller-file": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
|
||||||
@ -5127,6 +5209,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
|
||||||
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
|
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
|
||||||
},
|
},
|
||||||
|
"has-unicode": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
|
||||||
|
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
|
||||||
|
},
|
||||||
"has-value": {
|
"has-value": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
|
||||||
@ -5392,6 +5479,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
|
||||||
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
|
"integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
|
||||||
},
|
},
|
||||||
|
"ignore-walk": {
|
||||||
|
"version": "3.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
|
||||||
|
"integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
|
||||||
|
"requires": {
|
||||||
|
"minimatch": "^3.0.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"import-cwd": {
|
"import-cwd": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
|
||||||
@ -7201,6 +7296,28 @@
|
|||||||
"object-visit": "^1.0.0"
|
"object-visit": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mapnik": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mapnik/-/mapnik-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-iVlsplv9fAJG6E3+hAUT5eNDZ5ZuEr4+Libc70C8On+Sh381rnbh56Q5dxO89DQw6Zhd4sKD5QtIxtyncWddjA==",
|
||||||
|
"requires": {
|
||||||
|
"mapnik-vector-tile": "2.2.1",
|
||||||
|
"nan": "~2.10.0",
|
||||||
|
"node-pre-gyp": "~0.10.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"nan": {
|
||||||
|
"version": "2.10.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
|
||||||
|
"integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mapnik-vector-tile": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mapnik-vector-tile/-/mapnik-vector-tile-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-+oasa2DfqArIMC7F71ca8CXpDt0rEcq9sJDv+AuhBCZJg+3m2ikDAs/oskEpPpUOwta1hH48Qr+0deCkyB/0Jg=="
|
||||||
|
},
|
||||||
"math-expression-evaluator": {
|
"math-expression-evaluator": {
|
||||||
"version": "1.2.17",
|
"version": "1.2.17",
|
||||||
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
|
"resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
|
||||||
@ -7491,6 +7608,35 @@
|
|||||||
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
"resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
|
||||||
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
|
||||||
},
|
},
|
||||||
|
"minipass": {
|
||||||
|
"version": "2.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.4.tgz",
|
||||||
|
"integrity": "sha512-mlouk1OHlaUE8Odt1drMtG1bAJA4ZA6B/ehysgV0LUIrDHdKgo1KorZq3pK0b/7Z7LJIQ12MNM6aC+Tn6lUZ5w==",
|
||||||
|
"requires": {
|
||||||
|
"safe-buffer": "^5.1.2",
|
||||||
|
"yallist": "^3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||||
|
},
|
||||||
|
"yallist": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"minizlib": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
|
||||||
|
"requires": {
|
||||||
|
"minipass": "^2.2.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"mississippi": {
|
"mississippi": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
|
||||||
@ -7618,6 +7764,16 @@
|
|||||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||||
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
|
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
|
||||||
},
|
},
|
||||||
|
"needle": {
|
||||||
|
"version": "2.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/needle/-/needle-2.2.2.tgz",
|
||||||
|
"integrity": "sha512-mW7W8dKuVYefCpNzE3Z7xUmPI9wSrSL/1qH31YGMxmSOAnjatS3S9Zv3cmiHrhx3Jkp1SrWWBdOFXjfF48Uq3A==",
|
||||||
|
"requires": {
|
||||||
|
"debug": "^2.1.2",
|
||||||
|
"iconv-lite": "^0.4.4",
|
||||||
|
"sax": "^1.2.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"negotiator": {
|
"negotiator": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
||||||
@ -7700,6 +7856,32 @@
|
|||||||
"which": "^1.3.0"
|
"which": "^1.3.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-pre-gyp": {
|
||||||
|
"version": "0.10.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz",
|
||||||
|
"integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==",
|
||||||
|
"requires": {
|
||||||
|
"detect-libc": "^1.0.2",
|
||||||
|
"mkdirp": "^0.5.1",
|
||||||
|
"needle": "^2.2.1",
|
||||||
|
"nopt": "^4.0.1",
|
||||||
|
"npm-packlist": "^1.1.6",
|
||||||
|
"npmlog": "^4.0.2",
|
||||||
|
"rc": "^1.2.7",
|
||||||
|
"rimraf": "^2.6.1",
|
||||||
|
"semver": "^5.3.0",
|
||||||
|
"tar": "^4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nopt": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
|
||||||
|
"integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
|
||||||
|
"requires": {
|
||||||
|
"abbrev": "1",
|
||||||
|
"osenv": "^0.1.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"normalize-package-data": {
|
"normalize-package-data": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
|
||||||
@ -7735,6 +7917,20 @@
|
|||||||
"sort-keys": "^1.0.0"
|
"sort-keys": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"npm-bundled": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g=="
|
||||||
|
},
|
||||||
|
"npm-packlist": {
|
||||||
|
"version": "1.1.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.11.tgz",
|
||||||
|
"integrity": "sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA==",
|
||||||
|
"requires": {
|
||||||
|
"ignore-walk": "^3.0.1",
|
||||||
|
"npm-bundled": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"npm-run-path": {
|
"npm-run-path": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
|
||||||
@ -7743,6 +7939,17 @@
|
|||||||
"path-key": "^2.0.0"
|
"path-key": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"npmlog": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
|
||||||
|
"requires": {
|
||||||
|
"are-we-there-yet": "~1.1.2",
|
||||||
|
"console-control-strings": "~1.1.0",
|
||||||
|
"gauge": "~2.7.3",
|
||||||
|
"set-blocking": "~2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"num2fraction": {
|
"num2fraction": {
|
||||||
"version": "1.2.2",
|
"version": "1.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
|
||||||
@ -7961,6 +8168,15 @@
|
|||||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
||||||
},
|
},
|
||||||
|
"osenv": {
|
||||||
|
"version": "0.1.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
|
||||||
|
"integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
|
||||||
|
"requires": {
|
||||||
|
"os-homedir": "^1.0.0",
|
||||||
|
"os-tmpdir": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"p-finally": {
|
"p-finally": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
|
||||||
@ -9852,6 +10068,24 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rc": {
|
||||||
|
"version": "1.2.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
||||||
|
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
||||||
|
"requires": {
|
||||||
|
"deep-extend": "^0.6.0",
|
||||||
|
"ini": "~1.3.0",
|
||||||
|
"minimist": "^1.2.0",
|
||||||
|
"strip-json-comments": "~2.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"minimist": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||||
|
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"react": {
|
"react": {
|
||||||
"version": "16.4.2",
|
"version": "16.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz",
|
||||||
@ -9948,28 +10182,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"react-is": {
|
|
||||||
"version": "16.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.5.0.tgz",
|
|
||||||
"integrity": "sha512-kpkCGLsChXTEQJVmowQqHpCjHKJFwB4SIChYaaaiAkq8OtE2aBg5pQe8/xnFlGmz9KmMx1H4oQRUyxP7qC9v5A=="
|
|
||||||
},
|
|
||||||
"react-leaflet": {
|
"react-leaflet": {
|
||||||
"version": "2.0.1",
|
"version": "1.9.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-1.9.1.tgz",
|
||||||
"integrity": "sha512-vySYoLzVpOwek6nvXcxPBYcBDt2+7vVvGoORnqptrxC5EvmOAdWYd9RCMFITmF+OXSAyz48GjBUsP5E8Vc66dw==",
|
"integrity": "sha512-QiYpjyf1DHy0gLAR2958Mo5Wlu2u7FubIjapPpuUAQNFmjkVSteiDLlEdDpGswTHTyNAfKLS+u9PqvfipMDZKA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"hoist-non-react-statics": "^3.0.1",
|
|
||||||
"lodash": "^4.0.0",
|
"lodash": "^4.0.0",
|
||||||
"lodash-es": "^4.0.0",
|
"lodash-es": "^4.0.0",
|
||||||
"warning": "^4.0.0"
|
"warning": "^3.0.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"hoist-non-react-statics": {
|
"warning": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
|
||||||
"integrity": "sha512-1kXwPsOi0OGQIZNVMPvgWJ9tSnGMiMfJdihqEzrPEXlHOBh9AAHXX/QYmAJTXztnz/K+PQ8ryCb4eGaN6HlGbQ==",
|
"integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
|
||||||
"requires": {
|
"requires": {
|
||||||
"react-is": "^16.3.2"
|
"loose-envify": "^1.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -11449,6 +11677,32 @@
|
|||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz",
|
||||||
"integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg=="
|
"integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg=="
|
||||||
},
|
},
|
||||||
|
"tar": {
|
||||||
|
"version": "4.4.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.6.tgz",
|
||||||
|
"integrity": "sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg==",
|
||||||
|
"requires": {
|
||||||
|
"chownr": "^1.0.1",
|
||||||
|
"fs-minipass": "^1.2.5",
|
||||||
|
"minipass": "^2.3.3",
|
||||||
|
"minizlib": "^1.1.0",
|
||||||
|
"mkdirp": "^0.5.0",
|
||||||
|
"safe-buffer": "^5.1.2",
|
||||||
|
"yallist": "^3.0.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": {
|
||||||
|
"version": "5.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||||
|
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||||
|
},
|
||||||
|
"yallist": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.2.tgz",
|
||||||
|
"integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"test-exclude": {
|
"test-exclude": {
|
||||||
"version": "4.2.2",
|
"version": "4.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-4.2.2.tgz",
|
||||||
@ -12767,6 +13021,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
|
||||||
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
|
"integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
|
||||||
},
|
},
|
||||||
|
"wide-align": {
|
||||||
|
"version": "1.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
|
||||||
|
"integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
|
||||||
|
"requires": {
|
||||||
|
"string-width": "^1.0.2 || 2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"wordwrap": {
|
"wordwrap": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
||||||
|
@ -11,16 +11,18 @@
|
|||||||
"start:prod": "NODE_ENV=production node build/server.js"
|
"start:prod": "NODE_ENV=production node build/server.js"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@mapbox/sphericalmercator": "^1.1.0",
|
||||||
"body-parser": "^1.18.3",
|
"body-parser": "^1.18.3",
|
||||||
"bootstrap": "^4.1.3",
|
"bootstrap": "^4.1.3",
|
||||||
"connect-pg-simple": "^5.0.0",
|
"connect-pg-simple": "^5.0.0",
|
||||||
"express": "4.16.3",
|
"express": "4.16.3",
|
||||||
"express-session": "^1.15.6",
|
"express-session": "^1.15.6",
|
||||||
"leaflet": "^1.3.4",
|
"leaflet": "^1.3.4",
|
||||||
|
"mapnik": "^4.0.1",
|
||||||
"razzle": "2.4.0",
|
"razzle": "2.4.0",
|
||||||
"react": "16.4.2",
|
"react": "16.4.2",
|
||||||
"react-dom": "16.4.2",
|
"react-dom": "16.4.2",
|
||||||
"react-leaflet": "^2.0.1",
|
"react-leaflet": "^1.0.1",
|
||||||
"react-leaflet-universal": "^1.2.0",
|
"react-leaflet-universal": "^1.2.0",
|
||||||
"react-router-dom": "4.3.1",
|
"react-router-dom": "4.3.1",
|
||||||
"serialize-javascript": "^1.5.0"
|
"serialize-javascript": "^1.5.0"
|
||||||
|
@ -23,16 +23,18 @@ class ColouringMap extends Component {
|
|||||||
const layer = 'Night 3857' // alternatively 'Light 3857'
|
const layer = 'Night 3857' // alternatively 'Light 3857'
|
||||||
const url = `https://api2.ordnancesurvey.co.uk/mapping_api/v1/service/zxy/${tilematrixSet}/${layer}/{z}/{x}/{y}.png?key=${key}`
|
const url = `https://api2.ordnancesurvey.co.uk/mapping_api/v1/service/zxy/${tilematrixSet}/${layer}/{z}/{x}/{y}.png?key=${key}`
|
||||||
const attribution = 'Building attribute data is © Colouring London contributors. Maps contain OS data © Crown copyright: OS Maps baselayers and building outlines.'
|
const attribution = 'Building attribute data is © Colouring London contributors. Maps contain OS data © Crown copyright: OS Maps baselayers and building outlines.'
|
||||||
|
const outline = '/tiles/outline/{z}/{x}/{y}.png'
|
||||||
return (
|
return (
|
||||||
<Map
|
<Map
|
||||||
center={position}
|
center={position}
|
||||||
zoom={this.state.zoom}
|
zoom={this.state.zoom}
|
||||||
minZoom={12}
|
minZoom={10}
|
||||||
maxZoom={18}
|
maxZoom={18}
|
||||||
doubleClickZoom={false}
|
doubleClickZoom={false}
|
||||||
zoomControl={false}
|
zoomControl={false}
|
||||||
attributionControl={false}>
|
attributionControl={false}>
|
||||||
<TileLayer url={url} attribution={attribution}/>
|
<TileLayer url={url} attribution={attribution} />
|
||||||
|
<TileLayer url={outline} />
|
||||||
<ZoomControl position="topright" />
|
<ZoomControl position="topright" />
|
||||||
<AttributionControl prefix="" />
|
<AttributionControl prefix="" />
|
||||||
</Map>
|
</Map>
|
||||||
|
@ -12,6 +12,7 @@ import App from './frontend/app';
|
|||||||
import { pool } from './db';
|
import { pool } from './db';
|
||||||
import { authUser, createUser, getUserById } from './user';
|
import { authUser, createUser, getUserById } from './user';
|
||||||
import { queryBuildingAtPoint } from './building';
|
import { queryBuildingAtPoint } from './building';
|
||||||
|
import tileserver from './tileserver';
|
||||||
|
|
||||||
// create server
|
// create server
|
||||||
const server = express();
|
const server = express();
|
||||||
@ -116,6 +117,9 @@ function renderHTML(context, data, req, res){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GET tiles
|
||||||
|
server.use('/tiles', tileserver);
|
||||||
|
|
||||||
|
|
||||||
// GET building at point
|
// GET building at point
|
||||||
server.get('/buildings', function(req, res){
|
server.get('/buildings', function(req, res){
|
||||||
|
75
app/src/tile.js
Normal file
75
app/src/tile.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import path from 'path';
|
||||||
|
import mapnik from 'mapnik';
|
||||||
|
import SphericalMercator from '@mapbox/sphericalmercator';
|
||||||
|
|
||||||
|
// config file with connection details
|
||||||
|
const config = require('../../config.json')
|
||||||
|
const DATASOURCE_CONFIG = {
|
||||||
|
'dbname': config.database.dbname,
|
||||||
|
'user': config.database.user,
|
||||||
|
'password': config.database.password,
|
||||||
|
'port': config.database.port,
|
||||||
|
'geometry_field': 'geometry_geom',
|
||||||
|
'extent' : '-20005048.4188,-9039211.13765,19907487.2779,17096598.5401',
|
||||||
|
'srid': 3857,
|
||||||
|
'type': 'postgis'
|
||||||
|
}
|
||||||
|
|
||||||
|
const TILE_SIZE = 256
|
||||||
|
const TILE_BUFFER_SIZE = 64
|
||||||
|
const PROJ4_STRING = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over';
|
||||||
|
|
||||||
|
// register datasource adapters for mapnik
|
||||||
|
if (mapnik.register_default_input_plugins) mapnik.register_default_input_plugins();
|
||||||
|
|
||||||
|
|
||||||
|
const mercator = new SphericalMercator({
|
||||||
|
size: TILE_SIZE
|
||||||
|
});
|
||||||
|
|
||||||
|
function get_bbox(params){
|
||||||
|
const { z, x, y } = params
|
||||||
|
const int_z = parseInt(z);
|
||||||
|
const int_x = parseInt(x);
|
||||||
|
const int_y = parseInt(y);
|
||||||
|
|
||||||
|
if (!int_x || !int_y || !int_z){
|
||||||
|
console.error("Missing x or y or z")
|
||||||
|
return {error:'Bad parameter'}
|
||||||
|
}
|
||||||
|
|
||||||
|
return mercator.bbox(
|
||||||
|
int_x,
|
||||||
|
int_y,
|
||||||
|
int_z,
|
||||||
|
false,
|
||||||
|
'900913'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function render_tile(bbox, table_def, style_def, cb){
|
||||||
|
const map = new mapnik.Map(TILE_SIZE, TILE_SIZE, PROJ4_STRING);
|
||||||
|
map.bufferSize = TILE_BUFFER_SIZE;
|
||||||
|
|
||||||
|
const layer = new mapnik.Layer('tile', PROJ4_STRING);
|
||||||
|
const conf = Object.assign({table: table_def}, DATASOURCE_CONFIG)
|
||||||
|
|
||||||
|
const postgis = new mapnik.Datasource(conf);
|
||||||
|
layer.datasource = postgis;
|
||||||
|
layer.styles = style_def
|
||||||
|
|
||||||
|
map.load(
|
||||||
|
path.join(__dirname, '..', 'map_styles', 'polygon.xml'),
|
||||||
|
{ strict: true },
|
||||||
|
function(err, map){
|
||||||
|
if (err) throw err
|
||||||
|
|
||||||
|
map.add_layer(layer)
|
||||||
|
const im = new mapnik.Image(map.width, map.height)
|
||||||
|
map.extent = bbox
|
||||||
|
map.render(im, cb);
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export { get_bbox, render_tile };
|
92
app/src/tileserver.js
Normal file
92
app/src/tileserver.js
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
import express from 'express';
|
||||||
|
|
||||||
|
import { get_bbox, render_tile } from './tile';
|
||||||
|
|
||||||
|
// tiles router
|
||||||
|
const router = express.Router()
|
||||||
|
|
||||||
|
// basic geometry tiles
|
||||||
|
router.get('/outline/:z/:x/:y.png', function(req, res) {
|
||||||
|
const bbox = get_bbox(req.params)
|
||||||
|
const table_def = 'geometries'
|
||||||
|
const style_def = ['polygon']
|
||||||
|
render_tile(bbox, table_def, style_def, function(err, im) {
|
||||||
|
if (err) throw err
|
||||||
|
|
||||||
|
res.writeHead(200, {'Content-Type': 'image/png'})
|
||||||
|
res.end(im.encodeSync('png'))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// highlight single geometry
|
||||||
|
router.get('/highlight/:z/:x/:y.png', function(req, res) {
|
||||||
|
const { highlight } = req.query
|
||||||
|
const geometry_id = parseInt(highlight);
|
||||||
|
if(!geometry_id) res.status(400).send({error:'Bad parameter'})
|
||||||
|
const bbox = get_bbox(req.params)
|
||||||
|
const table_def = `(
|
||||||
|
select * from geometries
|
||||||
|
where geometry_id = ${geometry_id}
|
||||||
|
) as highlight`
|
||||||
|
const style_def = ['highlight']
|
||||||
|
render_tile(bbox, table_def, style_def, function(err, im) {
|
||||||
|
if (err) throw err
|
||||||
|
|
||||||
|
res.writeHead(200, {'Content-Type': 'image/png'})
|
||||||
|
res.end(im.encodeSync('png'))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// date_year choropleth
|
||||||
|
router.get('/date_year/:z/:x/:y.png', function(req, res) {
|
||||||
|
const bbox = get_bbox(req.params)
|
||||||
|
// const table_def = 'geometries'
|
||||||
|
const table_def = `(
|
||||||
|
SELECT
|
||||||
|
cast(
|
||||||
|
b.building_doc->>'date_year'
|
||||||
|
as integer
|
||||||
|
) as date_year,
|
||||||
|
g.geometry_geom
|
||||||
|
FROM
|
||||||
|
geometries as g,
|
||||||
|
buildings as b
|
||||||
|
WHERE
|
||||||
|
g.geometry_id = b.geometry_id
|
||||||
|
) as outline`
|
||||||
|
const style_def = ['date_year']
|
||||||
|
render_tile(bbox, table_def, style_def, function(err, im) {
|
||||||
|
if (err) throw err
|
||||||
|
|
||||||
|
res.writeHead(200, {'Content-Type': 'image/png'})
|
||||||
|
res.end(im.encodeSync('png'))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
// date_year choropleth
|
||||||
|
router.get('/size_storeys/:z/:x/:y.png', function(req, res) {
|
||||||
|
const bbox = get_bbox(req.params)
|
||||||
|
// const table_def = 'geometries'
|
||||||
|
const table_def = `(
|
||||||
|
SELECT
|
||||||
|
cast(
|
||||||
|
b.building_doc->>'size_storeys'
|
||||||
|
as integer
|
||||||
|
) as size_storeys,
|
||||||
|
g.geometry_geom
|
||||||
|
FROM
|
||||||
|
geometries as g,
|
||||||
|
buildings as b
|
||||||
|
WHERE
|
||||||
|
g.geometry_id = b.geometry_id
|
||||||
|
) as outline`
|
||||||
|
const style_def = ['size_storeys']
|
||||||
|
render_tile(bbox, table_def, style_def, function(err, im) {
|
||||||
|
if (err) throw err
|
||||||
|
|
||||||
|
res.writeHead(200, {'Content-Type': 'image/png'})
|
||||||
|
res.end(im.encodeSync('png'))
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
@ -1,17 +0,0 @@
|
|||||||
/**
|
|
||||||
* Dev server for local development
|
|
||||||
* - serve static files from frontend
|
|
||||||
* - proxy /api calls to 8081
|
|
||||||
* - proxy /tiles calls to 8082
|
|
||||||
*/
|
|
||||||
const path = require('path')
|
|
||||||
|
|
||||||
const express = require('express')
|
|
||||||
const proxy = require('express-http-proxy');
|
|
||||||
|
|
||||||
const app = express()
|
|
||||||
app.use(express.static(path.join(__dirname, '..', 'frontend')))
|
|
||||||
app.use('/api', proxy('localhost:8081'))
|
|
||||||
app.use('/tiles', proxy('localhost:8082'))
|
|
||||||
|
|
||||||
app.listen(8080, () => console.log('Dev server listening on port 8080...'))
|
|
398
devserver/package-lock.json
generated
398
devserver/package-lock.json
generated
@ -1,398 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "colouring-london-devserver",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"accepts": {
|
|
||||||
"version": "1.3.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
|
|
||||||
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
|
|
||||||
"requires": {
|
|
||||||
"mime-types": "2.1.19",
|
|
||||||
"negotiator": "0.6.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"array-flatten": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
|
|
||||||
},
|
|
||||||
"body-parser": {
|
|
||||||
"version": "1.18.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
|
|
||||||
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
|
|
||||||
"requires": {
|
|
||||||
"bytes": "3.0.0",
|
|
||||||
"content-type": "1.0.4",
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "1.1.2",
|
|
||||||
"http-errors": "1.6.3",
|
|
||||||
"iconv-lite": "0.4.19",
|
|
||||||
"on-finished": "2.3.0",
|
|
||||||
"qs": "6.5.1",
|
|
||||||
"raw-body": "2.3.2",
|
|
||||||
"type-is": "1.6.16"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bytes": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
|
|
||||||
},
|
|
||||||
"content-disposition": {
|
|
||||||
"version": "0.5.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
|
|
||||||
"integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
|
|
||||||
},
|
|
||||||
"content-type": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
|
|
||||||
"integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
|
|
||||||
},
|
|
||||||
"cookie": {
|
|
||||||
"version": "0.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
|
|
||||||
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
|
|
||||||
},
|
|
||||||
"cookie-signature": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"depd": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
|
|
||||||
},
|
|
||||||
"destroy": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
|
|
||||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
|
|
||||||
},
|
|
||||||
"ee-first": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
|
|
||||||
},
|
|
||||||
"encodeurl": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
|
|
||||||
},
|
|
||||||
"es6-promise": {
|
|
||||||
"version": "4.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
|
|
||||||
"integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ=="
|
|
||||||
},
|
|
||||||
"escape-html": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
|
||||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
|
|
||||||
},
|
|
||||||
"etag": {
|
|
||||||
"version": "1.8.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
|
||||||
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
|
|
||||||
},
|
|
||||||
"express": {
|
|
||||||
"version": "4.16.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz",
|
|
||||||
"integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=",
|
|
||||||
"requires": {
|
|
||||||
"accepts": "1.3.5",
|
|
||||||
"array-flatten": "1.1.1",
|
|
||||||
"body-parser": "1.18.2",
|
|
||||||
"content-disposition": "0.5.2",
|
|
||||||
"content-type": "1.0.4",
|
|
||||||
"cookie": "0.3.1",
|
|
||||||
"cookie-signature": "1.0.6",
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "1.1.2",
|
|
||||||
"encodeurl": "1.0.2",
|
|
||||||
"escape-html": "1.0.3",
|
|
||||||
"etag": "1.8.1",
|
|
||||||
"finalhandler": "1.1.1",
|
|
||||||
"fresh": "0.5.2",
|
|
||||||
"merge-descriptors": "1.0.1",
|
|
||||||
"methods": "1.1.2",
|
|
||||||
"on-finished": "2.3.0",
|
|
||||||
"parseurl": "1.3.2",
|
|
||||||
"path-to-regexp": "0.1.7",
|
|
||||||
"proxy-addr": "2.0.4",
|
|
||||||
"qs": "6.5.1",
|
|
||||||
"range-parser": "1.2.0",
|
|
||||||
"safe-buffer": "5.1.1",
|
|
||||||
"send": "0.16.2",
|
|
||||||
"serve-static": "1.13.2",
|
|
||||||
"setprototypeof": "1.1.0",
|
|
||||||
"statuses": "1.4.0",
|
|
||||||
"type-is": "1.6.16",
|
|
||||||
"utils-merge": "1.0.1",
|
|
||||||
"vary": "1.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"express-http-proxy": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/express-http-proxy/-/express-http-proxy-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-HefDxJyPLTtVqQXYhniN0JCS3ibyDwxvIjrwTGqXUeChdeTz9+Lo9LgKHJRTqTIp8wQeknM+W52v/+/NCm4IIw==",
|
|
||||||
"requires": {
|
|
||||||
"debug": "3.1.0",
|
|
||||||
"es6-promise": "4.2.4",
|
|
||||||
"raw-body": "2.3.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"debug": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"finalhandler": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"encodeurl": "1.0.2",
|
|
||||||
"escape-html": "1.0.3",
|
|
||||||
"on-finished": "2.3.0",
|
|
||||||
"parseurl": "1.3.2",
|
|
||||||
"statuses": "1.4.0",
|
|
||||||
"unpipe": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"forwarded": {
|
|
||||||
"version": "0.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
|
|
||||||
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
|
|
||||||
},
|
|
||||||
"fresh": {
|
|
||||||
"version": "0.5.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
|
||||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
|
|
||||||
},
|
|
||||||
"http-errors": {
|
|
||||||
"version": "1.6.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
|
||||||
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
|
|
||||||
"requires": {
|
|
||||||
"depd": "1.1.2",
|
|
||||||
"inherits": "2.0.3",
|
|
||||||
"setprototypeof": "1.1.0",
|
|
||||||
"statuses": "1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"iconv-lite": {
|
|
||||||
"version": "0.4.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
|
|
||||||
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
|
||||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
|
||||||
},
|
|
||||||
"ipaddr.js": {
|
|
||||||
"version": "1.8.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
|
|
||||||
"integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4="
|
|
||||||
},
|
|
||||||
"media-typer": {
|
|
||||||
"version": "0.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
|
||||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
|
|
||||||
},
|
|
||||||
"merge-descriptors": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
|
|
||||||
},
|
|
||||||
"methods": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
|
|
||||||
},
|
|
||||||
"mime": {
|
|
||||||
"version": "1.4.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
|
|
||||||
"integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
|
|
||||||
},
|
|
||||||
"mime-db": {
|
|
||||||
"version": "1.35.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
|
|
||||||
"integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg=="
|
|
||||||
},
|
|
||||||
"mime-types": {
|
|
||||||
"version": "2.1.19",
|
|
||||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
|
|
||||||
"integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
|
|
||||||
"requires": {
|
|
||||||
"mime-db": "1.35.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
|
||||||
},
|
|
||||||
"negotiator": {
|
|
||||||
"version": "0.6.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
|
|
||||||
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk="
|
|
||||||
},
|
|
||||||
"on-finished": {
|
|
||||||
"version": "2.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
|
|
||||||
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
|
|
||||||
"requires": {
|
|
||||||
"ee-first": "1.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"parseurl": {
|
|
||||||
"version": "1.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
|
|
||||||
"integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M="
|
|
||||||
},
|
|
||||||
"path-to-regexp": {
|
|
||||||
"version": "0.1.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
|
||||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
|
||||||
},
|
|
||||||
"proxy-addr": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==",
|
|
||||||
"requires": {
|
|
||||||
"forwarded": "0.1.2",
|
|
||||||
"ipaddr.js": "1.8.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"qs": {
|
|
||||||
"version": "6.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz",
|
|
||||||
"integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A=="
|
|
||||||
},
|
|
||||||
"range-parser": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
|
|
||||||
},
|
|
||||||
"raw-body": {
|
|
||||||
"version": "2.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz",
|
|
||||||
"integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=",
|
|
||||||
"requires": {
|
|
||||||
"bytes": "3.0.0",
|
|
||||||
"http-errors": "1.6.2",
|
|
||||||
"iconv-lite": "0.4.19",
|
|
||||||
"unpipe": "1.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"depd": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
|
|
||||||
"integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k="
|
|
||||||
},
|
|
||||||
"http-errors": {
|
|
||||||
"version": "1.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
|
|
||||||
"integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
|
|
||||||
"requires": {
|
|
||||||
"depd": "1.1.1",
|
|
||||||
"inherits": "2.0.3",
|
|
||||||
"setprototypeof": "1.0.3",
|
|
||||||
"statuses": "1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"setprototypeof": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
|
|
||||||
"integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
|
|
||||||
"integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
|
|
||||||
},
|
|
||||||
"send": {
|
|
||||||
"version": "0.16.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
|
|
||||||
"integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
|
|
||||||
"requires": {
|
|
||||||
"debug": "2.6.9",
|
|
||||||
"depd": "1.1.2",
|
|
||||||
"destroy": "1.0.4",
|
|
||||||
"encodeurl": "1.0.2",
|
|
||||||
"escape-html": "1.0.3",
|
|
||||||
"etag": "1.8.1",
|
|
||||||
"fresh": "0.5.2",
|
|
||||||
"http-errors": "1.6.3",
|
|
||||||
"mime": "1.4.1",
|
|
||||||
"ms": "2.0.0",
|
|
||||||
"on-finished": "2.3.0",
|
|
||||||
"range-parser": "1.2.0",
|
|
||||||
"statuses": "1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"serve-static": {
|
|
||||||
"version": "1.13.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
|
|
||||||
"integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
|
|
||||||
"requires": {
|
|
||||||
"encodeurl": "1.0.2",
|
|
||||||
"escape-html": "1.0.3",
|
|
||||||
"parseurl": "1.3.2",
|
|
||||||
"send": "0.16.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"setprototypeof": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
|
|
||||||
},
|
|
||||||
"statuses": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
|
|
||||||
"integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
|
|
||||||
},
|
|
||||||
"type-is": {
|
|
||||||
"version": "1.6.16",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
|
|
||||||
"integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
|
|
||||||
"requires": {
|
|
||||||
"media-typer": "0.3.0",
|
|
||||||
"mime-types": "2.1.19"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"unpipe": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
|
|
||||||
},
|
|
||||||
"utils-merge": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
|
||||||
},
|
|
||||||
"vary": {
|
|
||||||
"version": "1.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
|
||||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "colouring-london-devserver",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Development server to proxy",
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"start": "node index.js",
|
|
||||||
"debug": "DEBUG=express:* node index.js",
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"author": "Tom Russell",
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"dependencies": {
|
|
||||||
"express": "^4.16.3",
|
|
||||||
"express-http-proxy": "^1.2.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,169 +0,0 @@
|
|||||||
/**
|
|
||||||
* Serve tiles
|
|
||||||
*/
|
|
||||||
const path = require('path')
|
|
||||||
|
|
||||||
const express = require('express')
|
|
||||||
const mapnik = require('mapnik')
|
|
||||||
const SphericalMercator = require('@mapbox/sphericalmercator')
|
|
||||||
|
|
||||||
// config file with connection details
|
|
||||||
const config = require('../config.json')
|
|
||||||
const DATASOURCE_CONFIG = {
|
|
||||||
'dbname': config.database.dbname,
|
|
||||||
'user': config.database.user,
|
|
||||||
'password': config.database.password,
|
|
||||||
'port': config.database.port,
|
|
||||||
'geometry_field': 'geometry_geom',
|
|
||||||
'extent' : '-20005048.4188,-9039211.13765,19907487.2779,17096598.5401',
|
|
||||||
'srid': 3857,
|
|
||||||
'type': 'postgis'
|
|
||||||
}
|
|
||||||
|
|
||||||
const TILE_SIZE = 256
|
|
||||||
const TILE_BUFFER_SIZE = 64
|
|
||||||
const PROJ4_STRING = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over';
|
|
||||||
|
|
||||||
// set up convertor (tile tms -> lat-lon envelope)
|
|
||||||
const mercator = new SphericalMercator({
|
|
||||||
size: TILE_SIZE
|
|
||||||
});
|
|
||||||
|
|
||||||
// register datasource adapters for mapnik
|
|
||||||
if (mapnik.register_default_input_plugins) mapnik.register_default_input_plugins();
|
|
||||||
|
|
||||||
// set up app
|
|
||||||
const app = express()
|
|
||||||
|
|
||||||
function get_bbox(params){
|
|
||||||
const { z, x, y } = params
|
|
||||||
|
|
||||||
const int_z = parseInt(z);
|
|
||||||
const int_x = parseInt(x);
|
|
||||||
const int_y = parseInt(y);
|
|
||||||
|
|
||||||
if (!int_x || !int_y || !int_z){
|
|
||||||
console.error("Missing x or y or z")
|
|
||||||
res.status(400).send({error:'Bad parameter'})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
return mercator.bbox(
|
|
||||||
int_x,
|
|
||||||
int_y,
|
|
||||||
int_z,
|
|
||||||
false,
|
|
||||||
'900913'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function render_tile(bbox, table_def, style_def, cb){
|
|
||||||
const map = new mapnik.Map(TILE_SIZE, TILE_SIZE, PROJ4_STRING);
|
|
||||||
map.bufferSize = TILE_BUFFER_SIZE;
|
|
||||||
|
|
||||||
const layer = new mapnik.Layer('tile', PROJ4_STRING);
|
|
||||||
const conf = Object.assign({table: table_def}, DATASOURCE_CONFIG)
|
|
||||||
|
|
||||||
const postgis = new mapnik.Datasource(conf);
|
|
||||||
layer.datasource = postgis;
|
|
||||||
layer.styles = style_def
|
|
||||||
|
|
||||||
map.load(
|
|
||||||
path.join(__dirname, 'map_styles', 'polygon.xml'),
|
|
||||||
{ strict: true },
|
|
||||||
function(err, map){
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
map.add_layer(layer)
|
|
||||||
const im = new mapnik.Image(map.width, map.height)
|
|
||||||
map.extent = bbox
|
|
||||||
map.render(im, cb);
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
// basic geometry tiles
|
|
||||||
app.get('/outline/:z/:x/:y.png', function(req, res) {
|
|
||||||
const bbox = get_bbox(req.params)
|
|
||||||
const table_def = 'geometries'
|
|
||||||
const style_def = ['polygon']
|
|
||||||
render_tile(bbox, table_def, style_def, function(err, im) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
res.writeHead(200, {'Content-Type': 'image/png'})
|
|
||||||
res.end(im.encodeSync('png'))
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
// highlight single geometry
|
|
||||||
app.get('/highlight/:z/:x/:y.png', function(req, res) {
|
|
||||||
const { highlight } = req.query
|
|
||||||
const geometry_id = parseInt(highlight);
|
|
||||||
if(!geometry_id) res.status(400).send({error:'Bad parameter'})
|
|
||||||
const bbox = get_bbox(req.params)
|
|
||||||
const table_def = `(
|
|
||||||
select * from geometries
|
|
||||||
where geometry_id = ${geometry_id}
|
|
||||||
) as highlight`
|
|
||||||
const style_def = ['highlight']
|
|
||||||
render_tile(bbox, table_def, style_def, function(err, im) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
res.writeHead(200, {'Content-Type': 'image/png'})
|
|
||||||
res.end(im.encodeSync('png'))
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
// date_year choropleth
|
|
||||||
app.get('/date_year/:z/:x/:y.png', function(req, res) {
|
|
||||||
const bbox = get_bbox(req.params)
|
|
||||||
// const table_def = 'geometries'
|
|
||||||
const table_def = `(
|
|
||||||
SELECT
|
|
||||||
cast(
|
|
||||||
b.building_doc->>'date_year'
|
|
||||||
as integer
|
|
||||||
) as date_year,
|
|
||||||
g.geometry_geom
|
|
||||||
FROM
|
|
||||||
geometries as g,
|
|
||||||
buildings as b
|
|
||||||
WHERE
|
|
||||||
g.geometry_id = b.geometry_id
|
|
||||||
) as outline`
|
|
||||||
const style_def = ['date_year']
|
|
||||||
render_tile(bbox, table_def, style_def, function(err, im) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
res.writeHead(200, {'Content-Type': 'image/png'})
|
|
||||||
res.end(im.encodeSync('png'))
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
// date_year choropleth
|
|
||||||
app.get('/size_storeys/:z/:x/:y.png', function(req, res) {
|
|
||||||
const bbox = get_bbox(req.params)
|
|
||||||
// const table_def = 'geometries'
|
|
||||||
const table_def = `(
|
|
||||||
SELECT
|
|
||||||
cast(
|
|
||||||
b.building_doc->>'size_storeys'
|
|
||||||
as integer
|
|
||||||
) as size_storeys,
|
|
||||||
g.geometry_geom
|
|
||||||
FROM
|
|
||||||
geometries as g,
|
|
||||||
buildings as b
|
|
||||||
WHERE
|
|
||||||
g.geometry_id = b.geometry_id
|
|
||||||
) as outline`
|
|
||||||
const style_def = ['size_storeys']
|
|
||||||
render_tile(bbox, table_def, style_def, function(err, im) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
res.writeHead(200, {'Content-Type': 'image/png'})
|
|
||||||
res.end(im.encodeSync('png'))
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
app.listen(8082, () => console.log('Tile server listening on port 8082'))
|
|
1423
tileserver/package-lock.json
generated
1423
tileserver/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,17 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "colouring-london-tileserver",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Serve map tiles",
|
|
||||||
"private": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@mapbox/sphericalmercator": "^1.1.0",
|
|
||||||
"express": "^4.16.3",
|
|
||||||
"mapnik": "^3.7.2"
|
|
||||||
},
|
|
||||||
"devDependencies": {},
|
|
||||||
"scripts": {
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"author": "Tom Russell",
|
|
||||||
"license": "GPL-3.0"
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user