- Map.js to Map.ts; Layer.js tp Layer.ts, TinLayer.js to TinLayer.ts

This commit is contained in:
Arno Kaimbacher 2021-04-21 17:11:15 +02:00
parent e007bcf9fa
commit 452b9f028f
10 changed files with 492 additions and 462 deletions

229
package-lock.json generated
View File

@ -10,6 +10,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^5.15.2", "@fortawesome/fontawesome-free": "^5.15.2",
"@types/three": "^0.127.1",
"bulma": "^0.9.2", "bulma": "^0.9.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
@ -58,20 +59,20 @@
"dev": true "dev": true
}, },
"node_modules/@babel/core": { "node_modules/@babel/core": {
"version": "7.13.15", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz",
"integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.16",
"@babel/helper-compilation-targets": "^7.13.13", "@babel/helper-compilation-targets": "^7.13.16",
"@babel/helper-module-transforms": "^7.13.14", "@babel/helper-module-transforms": "^7.13.14",
"@babel/helpers": "^7.13.10", "@babel/helpers": "^7.13.16",
"@babel/parser": "^7.13.15", "@babel/parser": "^7.13.16",
"@babel/template": "^7.12.13", "@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.15", "@babel/traverse": "^7.13.15",
"@babel/types": "^7.13.14", "@babel/types": "^7.13.16",
"convert-source-map": "^1.7.0", "convert-source-map": "^1.7.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"gensync": "^1.0.0-beta.2", "gensync": "^1.0.0-beta.2",
@ -88,12 +89,12 @@
} }
}, },
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "7.13.9", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz",
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/types": "^7.13.0", "@babel/types": "^7.13.16",
"jsesc": "^2.5.1", "jsesc": "^2.5.1",
"source-map": "^0.5.0" "source-map": "^0.5.0"
} }
@ -118,12 +119,12 @@
} }
}, },
"node_modules/@babel/helper-compilation-targets": { "node_modules/@babel/helper-compilation-targets": {
"version": "7.13.13", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz",
"integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/compat-data": "^7.13.12", "@babel/compat-data": "^7.13.15",
"@babel/helper-validator-option": "^7.12.17", "@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5", "browserslist": "^4.14.5",
"semver": "^6.3.0" "semver": "^6.3.0"
@ -210,13 +211,13 @@
} }
}, },
"node_modules/@babel/helper-hoist-variables": { "node_modules/@babel/helper-hoist-variables": {
"version": "7.13.0", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz",
"integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/traverse": "^7.13.0", "@babel/traverse": "^7.13.15",
"@babel/types": "^7.13.0" "@babel/types": "^7.13.16"
} }
}, },
"node_modules/@babel/helper-member-expression-to-functions": { "node_modules/@babel/helper-member-expression-to-functions": {
@ -343,14 +344,14 @@
} }
}, },
"node_modules/@babel/helpers": { "node_modules/@babel/helpers": {
"version": "7.13.10", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz",
"integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/template": "^7.12.13", "@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0", "@babel/traverse": "^7.13.17",
"@babel/types": "^7.13.0" "@babel/types": "^7.13.17"
} }
}, },
"node_modules/@babel/highlight": { "node_modules/@babel/highlight": {
@ -365,9 +366,9 @@
} }
}, },
"node_modules/@babel/parser": { "node_modules/@babel/parser": {
"version": "7.13.15", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==",
"dev": true, "dev": true,
"bin": { "bin": {
"parser": "bin/babel-parser.js" "parser": "bin/babel-parser.js"
@ -788,12 +789,12 @@
} }
}, },
"node_modules/@babel/plugin-transform-block-scoping": { "node_modules/@babel/plugin-transform-block-scoping": {
"version": "7.12.13", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz",
"integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.12.13" "@babel/helper-plugin-utils": "^7.13.0"
}, },
"peerDependencies": { "peerDependencies": {
"@babel/core": "^7.0.0-0" "@babel/core": "^7.0.0-0"
@ -830,9 +831,9 @@
} }
}, },
"node_modules/@babel/plugin-transform-destructuring": { "node_modules/@babel/plugin-transform-destructuring": {
"version": "7.13.0", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz",
"integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.13.0" "@babel/helper-plugin-utils": "^7.13.0"
@ -1299,9 +1300,9 @@
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.13.10", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.17.tgz",
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", "integrity": "sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
@ -1319,29 +1320,28 @@
} }
}, },
"node_modules/@babel/traverse": { "node_modules/@babel/traverse": {
"version": "7.13.15", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz",
"integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.16",
"@babel/helper-function-name": "^7.12.13", "@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.13.15", "@babel/parser": "^7.13.16",
"@babel/types": "^7.13.14", "@babel/types": "^7.13.17",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0" "globals": "^11.1.0"
} }
}, },
"node_modules/@babel/types": { "node_modules/@babel/types": {
"version": "7.13.14", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-validator-identifier": "^7.12.11", "@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
@ -1463,6 +1463,11 @@
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
"dev": true "dev": true
}, },
"node_modules/@types/three": {
"version": "0.127.1",
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.127.1.tgz",
"integrity": "sha512-e90iYq3zde3axANg7BPZY0fKrez1AzveamIIFk23PMh9WtCx91geokDy+yEAIymdIldgUpvezAP6+zCV3oekXw=="
},
"node_modules/@webassemblyjs/ast": { "node_modules/@webassemblyjs/ast": {
"version": "1.11.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
@ -2661,9 +2666,9 @@
} }
}, },
"node_modules/electron-to-chromium": { "node_modules/electron-to-chromium": {
"version": "1.3.717", "version": "1.3.718",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.718.tgz",
"integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==", "integrity": "sha512-CikzdUSShGXwjq1pcW740wK8j+KbazgHZiwzlHICejDaczM6OVsPcrZmBHPwzj9i2rj5twg20MBwp+cYZwldYA==",
"dev": true "dev": true
}, },
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
@ -6247,9 +6252,9 @@
} }
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.34.0", "version": "5.35.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.34.0.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.35.0.tgz",
"integrity": "sha512-+WiFMgaZqhu7zKN64LQ7z0Ml4WWI+9RwG6zmS0wJDQXiCeg3hpN8fYFNJ+6WlosDT55yVxTfK7XHUAOVR4rLyA==", "integrity": "sha512-au3gu55yYF/h6NXFr0KZPZAYxS6Nlc595BzYPke8n0CSff5WXcoixtjh5LC/8mXunkRKxhymhXmBY0+kEbR6jg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.0", "@types/eslint-scope": "^3.7.0",
@ -6675,20 +6680,20 @@
"dev": true "dev": true
}, },
"@babel/core": { "@babel/core": {
"version": "7.13.15", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.16.tgz",
"integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", "integrity": "sha512-sXHpixBiWWFti0AV2Zq7avpTasr6sIAu7Y396c608541qAU2ui4a193m0KSQmfPSKFZLnQ3cvlKDOm3XkuXm3Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.16",
"@babel/helper-compilation-targets": "^7.13.13", "@babel/helper-compilation-targets": "^7.13.16",
"@babel/helper-module-transforms": "^7.13.14", "@babel/helper-module-transforms": "^7.13.14",
"@babel/helpers": "^7.13.10", "@babel/helpers": "^7.13.16",
"@babel/parser": "^7.13.15", "@babel/parser": "^7.13.16",
"@babel/template": "^7.12.13", "@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.15", "@babel/traverse": "^7.13.15",
"@babel/types": "^7.13.14", "@babel/types": "^7.13.16",
"convert-source-map": "^1.7.0", "convert-source-map": "^1.7.0",
"debug": "^4.1.0", "debug": "^4.1.0",
"gensync": "^1.0.0-beta.2", "gensync": "^1.0.0-beta.2",
@ -6698,12 +6703,12 @@
} }
}, },
"@babel/generator": { "@babel/generator": {
"version": "7.13.9", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.16.tgz",
"integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", "integrity": "sha512-grBBR75UnKOcUWMp8WoDxNsWCFl//XCK6HWTrBQKTr5SV9f5g0pNOjdyzi/DTBv12S9GnYPInIXQBTky7OXEMg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/types": "^7.13.0", "@babel/types": "^7.13.16",
"jsesc": "^2.5.1", "jsesc": "^2.5.1",
"source-map": "^0.5.0" "source-map": "^0.5.0"
} }
@ -6728,12 +6733,12 @@
} }
}, },
"@babel/helper-compilation-targets": { "@babel/helper-compilation-targets": {
"version": "7.13.13", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz",
"integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/compat-data": "^7.13.12", "@babel/compat-data": "^7.13.15",
"@babel/helper-validator-option": "^7.12.17", "@babel/helper-validator-option": "^7.12.17",
"browserslist": "^4.14.5", "browserslist": "^4.14.5",
"semver": "^6.3.0" "semver": "^6.3.0"
@ -6808,13 +6813,13 @@
} }
}, },
"@babel/helper-hoist-variables": { "@babel/helper-hoist-variables": {
"version": "7.13.0", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz",
"integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/traverse": "^7.13.0", "@babel/traverse": "^7.13.15",
"@babel/types": "^7.13.0" "@babel/types": "^7.13.16"
} }
}, },
"@babel/helper-member-expression-to-functions": { "@babel/helper-member-expression-to-functions": {
@ -6941,14 +6946,14 @@
} }
}, },
"@babel/helpers": { "@babel/helpers": {
"version": "7.13.10", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.17.tgz",
"integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", "integrity": "sha512-Eal4Gce4kGijo1/TGJdqp3WuhllaMLSrW6XcL0ulyUAQOuxHcCafZE8KHg9857gcTehsm/v7RcOx2+jp0Ryjsg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/template": "^7.12.13", "@babel/template": "^7.12.13",
"@babel/traverse": "^7.13.0", "@babel/traverse": "^7.13.17",
"@babel/types": "^7.13.0" "@babel/types": "^7.13.17"
} }
}, },
"@babel/highlight": { "@babel/highlight": {
@ -6963,9 +6968,9 @@
} }
}, },
"@babel/parser": { "@babel/parser": {
"version": "7.13.15", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.16.tgz",
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", "integrity": "sha512-6bAg36mCwuqLO0hbR+z7PHuqWiCeP7Dzg73OpQwsAB1Eb8HnGEz5xYBzCfbu+YjoaJsJs+qheDxVAuqbt3ILEw==",
"dev": true "dev": true
}, },
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
@ -7281,12 +7286,12 @@
} }
}, },
"@babel/plugin-transform-block-scoping": { "@babel/plugin-transform-block-scoping": {
"version": "7.12.13", "version": "7.13.16",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.13.16.tgz",
"integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", "integrity": "sha512-ad3PHUxGnfWF4Efd3qFuznEtZKoBp0spS+DgqzVzRPV7urEBvPLue3y2j80w4Jf2YLzZHj8TOv/Lmvdmh3b2xg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/helper-plugin-utils": "^7.12.13" "@babel/helper-plugin-utils": "^7.13.0"
} }
}, },
"@babel/plugin-transform-classes": { "@babel/plugin-transform-classes": {
@ -7314,9 +7319,9 @@
} }
}, },
"@babel/plugin-transform-destructuring": { "@babel/plugin-transform-destructuring": {
"version": "7.13.0", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz",
"integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/helper-plugin-utils": "^7.13.0" "@babel/helper-plugin-utils": "^7.13.0"
@ -7690,9 +7695,9 @@
} }
}, },
"@babel/runtime": { "@babel/runtime": {
"version": "7.13.10", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.17.tgz",
"integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", "integrity": "sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==",
"dev": true, "dev": true,
"requires": { "requires": {
"regenerator-runtime": "^0.13.4" "regenerator-runtime": "^0.13.4"
@ -7710,29 +7715,28 @@
} }
}, },
"@babel/traverse": { "@babel/traverse": {
"version": "7.13.15", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.17.tgz",
"integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", "integrity": "sha512-BMnZn0R+X6ayqm3C3To7o1j7Q020gWdqdyP50KEoVqaCO2c/Im7sYZSmVgvefp8TTMQ+9CtwuBp0Z1CZ8V3Pvg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.12.13", "@babel/code-frame": "^7.12.13",
"@babel/generator": "^7.13.9", "@babel/generator": "^7.13.16",
"@babel/helper-function-name": "^7.12.13", "@babel/helper-function-name": "^7.12.13",
"@babel/helper-split-export-declaration": "^7.12.13", "@babel/helper-split-export-declaration": "^7.12.13",
"@babel/parser": "^7.13.15", "@babel/parser": "^7.13.16",
"@babel/types": "^7.13.14", "@babel/types": "^7.13.17",
"debug": "^4.1.0", "debug": "^4.1.0",
"globals": "^11.1.0" "globals": "^11.1.0"
} }
}, },
"@babel/types": { "@babel/types": {
"version": "7.13.14", "version": "7.13.17",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.17.tgz",
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", "integrity": "sha512-RawydLgxbOPDlTLJNtoIypwdmAy//uQIzlKt2+iBiJaRlVuI6QLUxVAyWGNfOzp8Yu4L4lLIacoCyTNtpb4wiA==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/helper-validator-identifier": "^7.12.11", "@babel/helper-validator-identifier": "^7.12.11",
"lodash": "^4.17.19",
"to-fast-properties": "^2.0.0" "to-fast-properties": "^2.0.0"
} }
}, },
@ -7838,6 +7842,11 @@
"integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
"dev": true "dev": true
}, },
"@types/three": {
"version": "0.127.1",
"resolved": "https://registry.npmjs.org/@types/three/-/three-0.127.1.tgz",
"integrity": "sha512-e90iYq3zde3axANg7BPZY0fKrez1AzveamIIFk23PMh9WtCx91geokDy+yEAIymdIldgUpvezAP6+zCV3oekXw=="
},
"@webassemblyjs/ast": { "@webassemblyjs/ast": {
"version": "1.11.0", "version": "1.11.0",
"resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz",
@ -8794,9 +8803,9 @@
} }
}, },
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.3.717", "version": "1.3.718",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.718.tgz",
"integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==", "integrity": "sha512-CikzdUSShGXwjq1pcW740wK8j+KbazgHZiwzlHICejDaczM6OVsPcrZmBHPwzj9i2rj5twg20MBwp+cYZwldYA==",
"dev": true "dev": true
}, },
"emoji-regex": { "emoji-regex": {
@ -11553,9 +11562,9 @@
} }
}, },
"webpack": { "webpack": {
"version": "5.34.0", "version": "5.35.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.34.0.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.35.0.tgz",
"integrity": "sha512-+WiFMgaZqhu7zKN64LQ7z0Ml4WWI+9RwG6zmS0wJDQXiCeg3hpN8fYFNJ+6WlosDT55yVxTfK7XHUAOVR4rLyA==", "integrity": "sha512-au3gu55yYF/h6NXFr0KZPZAYxS6Nlc595BzYPke8n0CSff5WXcoixtjh5LC/8mXunkRKxhymhXmBY0+kEbR6jg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/eslint-scope": "^3.7.0", "@types/eslint-scope": "^3.7.0",

View File

@ -5,6 +5,7 @@
"main": "dist/main.js", "main": "dist/main.js",
"dependencies": { "dependencies": {
"@fortawesome/fontawesome-free": "^5.15.2", "@fortawesome/fontawesome-free": "^5.15.2",
"@types/three": "^0.127.1",
"bulma": "^0.9.2", "bulma": "^0.9.2",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",

View File

@ -22,6 +22,7 @@ export class BoreholePopup extends Control {
height: '100%', height: '100%',
parentDiv: null parentDiv: null
}; };
_source;
//#region private class fields: //#region private class fields:
private _innerHTML; private _innerHTML;
@ -99,7 +100,7 @@ export class BoreholePopup extends Control {
domEvent.on(this._clearButton, 'mouseup', domEvent.stopPropagation); domEvent.on(this._clearButton, 'mouseup', domEvent.stopPropagation);
domEvent.on(this._clearButton, 'click', domEvent.stopPropagation); domEvent.on(this._clearButton, 'click', domEvent.stopPropagation);
domEvent.on(this._clearButton, 'click', domEvent.preventDefault); domEvent.on(this._clearButton, 'click', domEvent.preventDefault);
domEvent.on(this._clearButton, 'click', this._close, this);; domEvent.on(this._clearButton, 'click', this.close, this);;
this._toggleVisibility(false); this._toggleVisibility(false);
@ -108,7 +109,7 @@ export class BoreholePopup extends Control {
} }
} }
show(a) { show() {
//this._clearContent(); //this._clearContent();
this._toggleVisibility(true); this._toggleVisibility(true);
//this._animate(true); //this._animate(true);
@ -149,7 +150,7 @@ export class BoreholePopup extends Control {
this._contentPane.appendChild(table); this._contentPane.appendChild(table);
} }
private _close(e) { close() {
this._clearContent(); this._clearContent();
this._toggleVisibility(false); this._toggleVisibility(false);
this.emit("closed"); this.emit("closed");
@ -191,7 +192,7 @@ export class BoreholePopup extends Control {
// var f = this._eventConnections[i]; // var f = this._eventConnections[i];
// f.remove(); // f.remove();
//} //}
domEvent.off(this._clearButton, 'click', this._close); domEvent.off(this._clearButton, 'click', this.close);
//C.destroy(this.domNode); //C.destroy(this.domNode);
//this.getContainer().parentNode.removeChild(this.getContainer()); //this.getContainer().parentNode.removeChild(this.getContainer());
this._innerHTML = this._menu = this._body = this._contentLabel = this._contentPane = this._clearButton = null; this._innerHTML = this._menu = this._body = this._contentLabel = this._contentPane = this._clearButton = null;

View File

@ -1,5 +1,6 @@
import * as util from '../core/utilities'; import * as util from '../core/utilities';
import { EventEmitter } from '../core/EventEmitter'; import { EventEmitter } from '../core/EventEmitter';
import { Map } from '../core/Map';
abstract class Control extends EventEmitter { abstract class Control extends EventEmitter {
@ -32,12 +33,12 @@ abstract class Control extends EventEmitter {
abstract onAdd(map) : HTMLElement; abstract onAdd(map) : HTMLElement;
addTo(map) { addTo(map: Map): Control {
this._map = map; this._map = map;
var container = this._container = this.onAdd(map); let container = this._container = this.onAdd(map);
var pos = this.getPosition();//"topright" let pos = this.getPosition();//"topright"
var corner = map._controlCorners[pos]; let corner = map.controlCorners[pos];
if (container) { if (container) {
// $(container).addClass('gba-control'); // $(container).addClass('gba-control');
container.classList.add("gba-control"); container.classList.add("gba-control");
@ -49,7 +50,6 @@ abstract class Control extends EventEmitter {
corner.appendChild(container); corner.appendChild(container);
} }
} }
return this; return this;
} }

View File

@ -1,233 +1,230 @@
import { OrbitControls } from '../lib/OrbitControls'; import { OrbitControls } from '../lib/OrbitControls';
import * as dom from './domUtil'; import * as dom from './domUtil';
import { HomeButton } from '../controls/HomeButton'; import { HomeButton } from '../controls/HomeButton';
import { ZoomControl } from '../controls/ZoomControl'; import { ZoomControl } from '../controls/ZoomControl';
import { BoreholeControl } from '../controls/BoreholeControl'; import { BoreholeControl } from '../controls/BoreholeControl';
import { BoreholePopup } from '../controls/BoreholePopup'; import { BoreholePopup } from '../controls/BoreholePopup';
import * as util from './utilities'; import * as util from './utilities';
import { TinLayer } from '../layer/TinLayer'; import { TinLayer } from '../layer/TinLayer';
import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera'; import { PerspectiveCamera } from 'three/src/cameras/PerspectiveCamera';
import { Vector3 } from 'three/src/math/Vector3'; import { Vector3 } from 'three/src/math/Vector3';
class Map extends OrbitControls { class Map extends OrbitControls {
container; private _layers;
_layers; private _controlContainer;
_controlCorners; private _controlCorners;
_controlContainer; private _controls;
_controls; public container: HTMLElement;
size; public size: number;
camera; public camera: PerspectiveCamera;
container; public length: number;
length; public width: number;
width; public height: number;
height; public x: number; public y: number; public z: number;
x; y; z; public title: string;
title; public serviceUrl: string;
serviceUrl; public basemaps: Object;
basemaps; public baseExtent: Object;
title;
constructor(x, y, z, scene, container) {
constructor(x, y, z, scene, container) {
let size = Math.max(x.max - x.min, y.max - y.min, z.max - z.min);
let size = Math.max(x.max - x.min, y.max - y.min, z.max - z.min); let center = new Vector3((x.min + x.max) / 2, (y.min + y.max) / 2, 0);
let center = new Vector3((x.min + x.max) / 2, (y.min + y.max) / 2, 0); let width, height;
let width, height; if (container.clientWidth && container.clientHeight) {
if (container.clientWidth && container.clientHeight) { width = container.clientWidth;
width = container.clientWidth; height = container.clientHeight;
height = container.clientHeight; } else {
} else { width = window.innerWidth;
width = window.innerWidth; height = window.innerHeight;
height = window.innerHeight; }
}
let camera = new PerspectiveCamera(30, width / height, 100, 100000);
let camera = new PerspectiveCamera(30, width / height, 100, 100000); const camDirection = new Vector3(-0.5, -Math.SQRT1_2, 0.5);
const camDirection = new Vector3(-0.5, -Math.SQRT1_2, 0.5); // const camDirection = new Vector3(0, 0, 1);
// const camDirection = new Vector3(0, 0, 1); const camOffset = camDirection.multiplyScalar(size * 2);
const camOffset = camDirection.multiplyScalar(size * 2); camera.position.copy(center);
camera.position.copy(center); camera.position.add(camOffset);
camera.position.add(camOffset); camera.near = size * 0.1;
camera.near = size * 0.1; camera.far = size * 25;
camera.far = size * 25; camera.updateProjectionMatrix();
camera.updateProjectionMatrix();
// call parent constructor of OrbitControls
// call parent constructor of OrbitControls super(size, center, camera, scene, container);
super(size, center, camera, scene, container);
this.size = size;
this.size = size; this.camera = camera;
this.camera = camera; this.container = container;
this.container = container; this.length = x.max - x.min;
this.length = x.max - x.min; this.width = y.max - y.min;
this.width = y.max - y.min; this.height = z.max - z.min;
this.height = z.max - z.min; this.x = x;
this.x = x; this.y = y;
this.y = y; this.z = z;
this.z = z; this.center = center;
this.center = center; this.baseExtent = {
this.baseExtent = { x: x,
x: x, y: y
y: y };
};
//init the control corners
//init the control corners if (this._initControlPos) {
if (this._initControlPos) { this._initControlPos();
this._initControlPos(); }
}
// to do: initialize map title via serviceUrl:
// to do: initialize map title via serviceUrl: // this.title = "Geological 3D model of Vienna";
// this.title = "Geological 3D model of Vienna"; // this.serviceUrl = serviceUrl;
this._layers = {};
// to do: initialize layers via serviceUrl:
// this.serviceUrl = serviceUrl; this.basemaps = {
this._layers = {}; "currentVersion": 10.01,
"services": [
this.basemaps = { { "name": "osm:wms", "type": "MapServer", 'image': 'background_osm_world_topography.png', 'title': 'OSM WMS' },
"currentVersion": 10.01, { "name": "esri:topograhy", "type": "MapServer", 'image': 'background_esri_world_topography.png', 'title': 'ESRI Topography' },
"services": [
{ "name": "osm:wms", "type": "MapServer", 'image': 'background_osm_world_topography.png', 'title': 'OSM WMS' }, ]
{ "name": "esri:topograhy", "type": "MapServer", 'image': 'background_esri_world_topography.png', 'title': 'ESRI Topography' }, };
}
]
}; static async build(scene, container, serviceUrl) {
} const modelData = await util.getMetadata(serviceUrl);
let modelarea = modelData.modelarea;
static async build(scene, container, serviceUrl) {
const modelData = await util.getMetadata(serviceUrl); // do your async stuff here
let modelarea = modelData.modelarea; // now instantiate and return a class
let map = new Map(modelarea.x, modelarea.y, modelarea.z, scene, container);
map._initDataLayers(modelData.mappedfeatures);
map._initControls();
map.title = modelData.model.model_name;
return map;
// do your async stuff here }
// now instantiate and return a class
let map = new Map(modelarea.x, modelarea.y, modelarea.z, scene, container); get layers() {
map._initDataLayers(modelData.mappedfeatures); return this._layers;
map._initControls(); }
map.title = modelData.model.model_name; get controlCorners() {
return map; return this._controlCorners;
} }
get layers() { async _initDataLayers(mappedFeatures) {
return this._layers; const callStack = [];
} for (let i = 0; i < mappedFeatures.length; i++) {
let layerData = mappedFeatures[i];
async _initDataLayers(mappedFeatures) { let dxfLayer = new TinLayer({
const callStack = []; featuregeom_id: layerData.featuregeom_id,
for (let i = 0; i < mappedFeatures.length; i++) { q: true,
let layerData = mappedFeatures[i]; type: "3dface",
let dxfLayer = new TinLayer({ name: layerData.preview.legend_text, //layerData.legend_description,
featuregeom_id: layerData.featuregeom_id, description: "test",
q: true, color: layerData.preview.legend_color, //layerData.color
type: "3dface", citation: layerData.geologicdescription !== null ? layerData.geologicdescription.citation : null,
name: layerData.preview.legend_text, //layerData.legend_description, feature_type: layerData.geologicdescription !== null ? layerData.geologicdescription['feature type'] : null,
description: "test", });
color: layerData.preview.legend_color, //layerData.color callStack.push(this.addLayer(dxfLayer))
citation: layerData.geologicdescription !== null ? layerData.geologicdescription.citation : null, }
feature_type: layerData.geologicdescription !== null ? layerData.geologicdescription['feature type'] : null, await Promise.all(callStack);
}); this.emit("ready");
callStack.push(this.addLayer(dxfLayer)) }
}
await Promise.all(callStack); private _initControlPos() {
this.emit("ready"); let corners = this._controlCorners = {};
} let l = 'gba-';
this._controlContainer =
_initControlPos() { dom.createDom("div", { "class": l + 'control-container' }, this.container);
//var test = document.getElementById("webgl");
// function createCorner(vSide, hSide) {
var corners = this._controlCorners = {}; // var className = l + vSide + ' ' + l + hSide;
var l = 'gba-';
var container = this._controlContainer = // //corners[vSide + hSide] = util.create('div', className, container);
//util.create('div', l + 'control-container', this.domElement); // corners[vSide + hSide] = dom.createDom("div", { "class": className }, this._controlContainer);
dom.createDom("div", { "class": l + 'control-container' }, this.container); // }
let createCorner = (vSide: string, hSide: string): void => {
function createCorner(vSide, hSide) { let className = l + vSide + ' ' + l + hSide;
var className = l + vSide + ' ' + l + hSide; corners[vSide + hSide] = dom.createDom("div", { "class": className }, this._controlContainer);
}
//corners[vSide + hSide] = util.create('div', className, container);
corners[vSide + hSide] = dom.createDom("div", { "class": className }, container); createCorner('top', 'left');
} createCorner('top', 'right');
createCorner('bottom', 'left');
createCorner('top', 'left'); createCorner('bottom', 'right');
createCorner('top', 'right'); }
createCorner('bottom', 'left');
createCorner('bottom', 'right'); private _initControls() {
} this._controls = this._controls || {};
// this._controls.homeControl = (new HomeButton()).addTo(this);
_initControls() { let homeControl = this._controls.homeControl = new HomeButton();
this._controls = this._controls || {}; homeControl.addTo(this);
// this._controls.homeControl = (new HomeButton()).addTo(this);
let homeControl = this._controls.homeControl = new HomeButton(); let zoomControl = this._controls.zoomControl = new ZoomControl();
homeControl.addTo(this); zoomControl.addTo(this);
let zoomControl = this._controls.zoomControl = new ZoomControl(); this._controls.maptoolControl = new BoreholeControl().addTo(this);
zoomControl.addTo(this); this._controls.boreholePopup = new BoreholePopup({ parentDiv: 'gba-borehole-control-parent-id' });
this._controls.boreholePopup.addTo(this);
this._controls.maptoolControl = new BoreholeControl().addTo(this); }
this._controls.boreholePopup = new BoreholePopup({parentDiv: 'gba-borehole-control-parent-id'});
this._controls.boreholePopup.addTo(this); async addLayer(layer) {
} let id = util.stamp(layer);
if (this._layers[id]) {
async addLayer(layer) { return this;
let id = util.stamp(layer); }
if (this._layers[id]) { this._layers[id] = layer;
return this;
} //layer._mapToAdd = this;
this._layers[id] = layer; layer.index = id;
//layer._mapToAdd = this; //if (layer.beforeAdd) {
layer.index = id; // layer.beforeAdd(this);
//}
//if (layer.beforeAdd) { //this.whenReady(layer._layerAdd, layer);
// layer.beforeAdd(this); await layer._layerAdd(this);
//} this.emit("change");
//this.whenReady(layer._layerAdd, layer); return this;
await layer._layerAdd(this); }
this.emit("change");
return this; removeLayer(layer) {
} let id = util.stamp(layer);
removeLayer(layer) { if (!this._layers[id]) { return this; }
let id = util.stamp(layer);
//if (this._loaded) {
if (!this._layers[id]) { return this; } // layer.onRemove(this);
//}
//if (this._loaded) { layer.onRemove(this);
// layer.onRemove(this); this.emit("change");
//} //if (layer.getAttribution && this.attributionControl) {
layer.onRemove(this); // this.attributionControl.removeAttribution(layer.getAttribution());
this.emit("change");
//if (layer.getAttribution && this.attributionControl) { //}
// this.attributionControl.removeAttribution(layer.getAttribution());
//if (layer.getEvents) {
//} // this.off(layer.getEvents(), layer);
//}
//if (layer.getEvents) {
// this.off(layer.getEvents(), layer); delete this._layers[id];
//}
//if (this._loaded) {
delete this._layers[id]; // this.emit('layerremove', { layer: layer });
// layer.emit('remove');
//if (this._loaded) { //}
// this.emit('layerremove', { layer: layer });
// layer.emit('remove'); layer._map = layer._mapToAdd = null;
//}
return this;
layer._map = layer._mapToAdd = null; }
return this; hasLayer(layer) {
} return !!layer && (util.stamp(layer) in this._layers);
}
hasLayer(layer) {
return !!layer && (util.stamp(layer) in this._layers); getCenter() { // (Boolean) -> LatLng
} return this.target;
}
getCenter() { // (Boolean) -> LatLng
return this.target; }
}
}
export { Map }; export { Map };

View File

@ -7,9 +7,8 @@ import { DoubleSide, FlatShading, LinearFilter } from 'three/src/constants';
import * as browser from '../core/browser'; import * as browser from '../core/browser';
import { Texture } from 'three/src/textures/Texture'; import { Texture } from 'three/src/textures/Texture';
import { TextureLoader } from 'three/src/loaders/TextureLoader'; import { TextureLoader } from 'three/src/loaders/TextureLoader';
import { Plane } from 'three/src/math/Plane';
import { Vector3 } from 'three/src/math/Vector3'; import { Vector3 } from 'three/src/math/Vector3';
import { Color } from 'three/src/math/Color';
import proj4 from 'proj4/dist/proj4'; import proj4 from 'proj4/dist/proj4';
import { ShaderMaterial } from 'three/src/materials/ShaderMaterial'; import { ShaderMaterial } from 'three/src/materials/ShaderMaterial';
import { shader } from '../clip/shader'; import { shader } from '../clip/shader';
@ -163,13 +162,6 @@ export class DemLayer extends Layer {
this.opacity = sum_opacity / this.materials.length; this.opacity = sum_opacity / this.materials.length;
} }
// filterMaterial(filterXMin, filterXMax, filterYMax) {
// this.xMinLocalPlane.constant = filterXMin;
// this.xMaxLocalPlane.constant = filterXMax;
// this.yMaxLocalPlane.constant = filterYMax;
// }
scaleZ(z) { scaleZ(z) {
this.objectGroup.scale.z = z; this.objectGroup.scale.z = z;
} }

View File

@ -1,24 +1,38 @@
import { EventEmitter } from '../core/EventEmitter'; import { EventEmitter } from '../core/EventEmitter';
import { BoreholePopup } from '../controls/BoreholePopup'; import { BoreholePopup } from '../controls/BoreholePopup';
import { Map } from '../core/Map';
import { Scene } from 'three/src/scenes/Scene';
class Layer extends EventEmitter { abstract class Layer extends EventEmitter {
// #region "properties"
protected _map: Map;
protected _popup: BoreholePopup;
protected _popupHandlersAdded: boolean = false;
// #endregion "properties"
options = { options = {
pane: 'overlayPane', pane: 'overlayPane',
nonBubblingEvents: [] // Array of events that should not be bubbled to DOM parents (like the map) nonBubblingEvents: [] // Array of events that should not be bubbled to DOM parents (like the map)
}; };
constructor(size) { constructor() {
super(); super();
} }
addTo(map) { abstract onAdd(map): void;
abstract onRemove(map): void;
abstract scaleZ(z): void;
abstract setVisible(visible): void;
abstract setWireframeMode(wireframe: boolean): void;
addTo(map: Map) {
map.addLayer(this); map.addLayer(this);
return this; return this;
} }
async _layerAdd(e) { async _layerAdd(e) {
var map = e;//.target; let map = e;//.target;
// check in case layer gets added and then removed before the map is ready // check in case layer gets added and then removed before the map is ready
if (!map.hasLayer(this)) { return; } if (!map.hasLayer(this)) { return; }
@ -39,11 +53,8 @@ class Layer extends EventEmitter {
//map.fire('layeradd', { layer: this }); //map.fire('layeradd', { layer: this });
} }
setWireframeMode(wireframe) {
return;
}
getScene() { getScene(): Scene {
return this._map.scene; return this._map.scene;
} }
@ -61,7 +72,7 @@ class Layer extends EventEmitter {
if (!this._popup) { if (!this._popup) {
//this._popup = new L.Popup(options, this); //this._popup = new L.Popup(options, this);
this._popup = new BoreholePopup({}, this); this._popup = new BoreholePopup({});
this._popup.addTo(this._map); this._popup.addTo(this._map);
this._popup.setChartContent(content); this._popup.setChartContent(content);
} }
@ -92,7 +103,7 @@ class Layer extends EventEmitter {
// Closes the popup bound to this layer if it is open. // Closes the popup bound to this layer if it is open.
closePopup() { closePopup() {
if (this._popup) { if (this._popup) {
this._popup._close(); this._popup.close();
//this._popup.removeFrom(this._map); //this._popup.removeFrom(this._map);
} }
return this; return this;

View File

@ -4,27 +4,44 @@ import { DoubleSide } from 'three/src/constants';
import { Mesh } from 'three/src/objects/Mesh'; import { Mesh } from 'three/src/objects/Mesh';
import { Layer } from './Layer'; import { Layer } from './Layer';
import { BitStream } from '../lib/bitstream'; import { BitStream } from '../lib/bitstream';
import { Plane } from 'three/src/math/Plane';
import { Vector3 } from 'three/src/math/Vector3'; import { Vector3 } from 'three/src/math/Vector3';
import { Color } from 'three/src/math/Color'; import { Color } from 'three/src/math/Color';
import { MyMeshStandardMaterial } from '../clip/MyMeshStandardMaterial'; import { MyMeshStandardMaterial } from '../clip/MyMeshStandardMaterial';
import { Group } from 'three/src/objects/Group'; import { Group } from 'three/src/objects/Group';
// topography overlay
// import { Texture } from 'three/src/textures/Texture';
import { TextureLoader } from 'three/src/loaders/TextureLoader';
import proj4 from 'proj4/dist/proj4';
const POINTURL = 'https://geusegdi01.geus.dk/geom3d/data/nodes/'; const POINTURL = 'https://geusegdi01.geus.dk/geom3d/data/nodes/';
const EDGEURL = 'https://geusegdi01.geus.dk/geom3d/data/triangles/'; const EDGEURL = 'https://geusegdi01.geus.dk/geom3d/data/triangles/';
class TinLayer extends Layer { class TinLayer extends Layer {
q: boolean;
queryableObjects; queryableObjects;
borderVisible; borderVisible;
scale; scale;
objectGroup; objectGroup;
visible: boolean;
opacity: number;
materialParameter: Array<string>;
materialsArray: Array<any>;
material: MyMeshStandardMaterial;
featuregeom_id: number;
color: string;
mainMesh;
uniforms: Object;
public baseExtent = {
min: { x: 0, y: 0 },
max: { x: 0, y: 0 }
};
index: number;
constructor(params) { constructor(params) {
super(); super();
//this.features = [];
this.visible = true; this.visible = true;
this.opacity = 1; this.opacity = 1;
this.materialParameter = []; this.materialParameter = [];
@ -37,6 +54,7 @@ class TinLayer extends Layer {
this.borderVisible = false; this.borderVisible = false;
this.scale = 1; this.scale = 1;
this.objectGroup = new Group(); this.objectGroup = new Group();
this.q = true;
} }
setWireframeMode(wireframe) { setWireframeMode(wireframe) {
@ -53,23 +71,6 @@ class TinLayer extends Layer {
this.emit('visibility-change'); this.emit('visibility-change');
} }
addObject (object, queryable) {
if (queryable === undefined) {
queryable = this.q;
}
this.objectGroup.add(object);
if (queryable) {
this._addQueryableObject(object);
}
}
_addQueryableObject (object) {
this.queryableObjects.push(object);
//for (var i = 0, l = object.children.length; i < l; i++) {
// this._addQueryableObject(object.children[i]);
//}
}
scaleZ(z) { scaleZ(z) {
this.scale = z; this.scale = z;
this.objectGroup.scale.z = z; this.objectGroup.scale.z = z;
@ -80,18 +81,18 @@ class TinLayer extends Layer {
map.update(); map.update();
} }
async build(app_scene) { onRemove(map) {
map.scene.remove(this.objectGroup);
}
async build(app_scene) {
let geometry = new BufferGeometry(); let geometry = new BufferGeometry();
// let positions = new Float32BufferAttribute(this.vertices, 3);
let posArray = await (this.points(this.featuregeom_id)); let posArray = await (this.points(this.featuregeom_id));
// console.log(posArray);
let positions = new Float32BufferAttribute(posArray, 3); let positions = new Float32BufferAttribute(posArray, 3);
geometry.setAttribute('position', positions); geometry.setAttribute('position', positions);
//var TypeArray = this.idx.length > 65535 ? Uint32Array : Uint16Array; //var TypeArray = this.idx.length > 65535 ? Uint32Array : Uint16Array;
//var indices = this.indices = new TypeArray(this.idx); //var indices = this.indices = new TypeArray(this.idx);
// let indexArray = this.indices = new Uint16Array(this.idx); // let indexArray = this.indices = new Uint16Array(this.idx);
let indexArray = await (this.edges(this.featuregeom_id)); let indexArray = await (this.edges(this.featuregeom_id));
let indices = new Uint16BufferAttribute(indexArray, 1);//.setDynamic(true); let indices = new Uint16BufferAttribute(indexArray, 1);//.setDynamic(true);
@ -101,10 +102,11 @@ class TinLayer extends Layer {
geometry.computeBoundingSphere(); geometry.computeBoundingSphere();
geometry.computeVertexNormals();// computed vertex normals are orthogonal to the face f geometry.computeVertexNormals();// computed vertex normals are orthogonal to the face f
geometry.computeBoundingBox(); geometry.computeBoundingBox();
let boundingBox = geometry.boundingBox;
this.xLocalPlane = new Plane(new Vector3(-1, 0, 0), this._map.x.max); this.baseExtent.min.x = boundingBox.min.x;
//this.addObject(this.xLocalPlane, false); this.baseExtent.min.y = boundingBox.min.y;
this.yLocalPlane = new Plane(new Vector3(0, 1, 0), this._map.y.max); this.baseExtent.max.x = boundingBox.max.x;
this.baseExtent.max.y = boundingBox.max.y;
let color = parseInt(this.color, 16); let color = parseInt(this.color, 16);
// this.material = new MeshStandardMaterial({ // this.material = new MeshStandardMaterial({
@ -130,40 +132,52 @@ class TinLayer extends Layer {
this.material = new MyMeshStandardMaterial({ this.material = new MyMeshStandardMaterial({
color: color, color: color,
metalness: 0.1, metalness: 0.1,
roughness: 0.75, roughness: 0.75,
flatShading: true, flatShading: true,
side: DoubleSide, side: DoubleSide,
// clippingPlanes: [this.xLocalPlane, this.yLocalPlane], // clippingPlanes: [this.xLocalPlane, this.yLocalPlane],
// clipIntersection: false, // clipIntersection: false,
// clipShadows: true, // clipShadows: true,
}, uniforms.clipping); }, uniforms.clipping);
this.materialsArray.push(this.material); this.materialsArray.push(this.material);
let mesh = this.mainMesh = new Mesh(geometry, this.material); let mesh = this.mainMesh = new Mesh(geometry, this.material);
mesh.userData.layerId = this.index; mesh.userData.layerId = this.index;
this.addObject(mesh, true); this._addObject(mesh, true);
if (app_scene) { if (app_scene) {
app_scene.add(this.objectGroup); app_scene.add(this.objectGroup);
} }
} }
filterMaterial(filterX, filterY) { private _addObject(object, queryable) {
this.xLocalPlane.constant = filterX; if (queryable === undefined) {
this.yLocalPlane.constant = filterY; queryable = this.q;
}
this.objectGroup.add(object);
if (queryable) {
this._addQueryableObject(object);
}
}
private _addQueryableObject(object) {
this.queryableObjects.push(object);
//for (var i = 0, l = object.children.length; i < l; i++) {
// this._addQueryableObject(object.children[i]);
//}
} }
async points(geomId) { async points(geomId) {
const url = POINTURL + geomId; const url = POINTURL + geomId;
const buffer = await this.request(url); const buffer = await this._request(url);
return this.unpackVertices(buffer); return this._unpackVertices(buffer);
} }
async edges(geomId) { async edges(geomId) {
const url = EDGEURL + geomId; const url = EDGEURL + geomId;
const buffer = await this.request(url); const buffer = await this._request(url);
return this.unpackEdges(buffer); return this._unpackEdges(buffer);
} }
async request(url) { private async _request(url) {
const response = await fetch(url); const response = await fetch(url);
if (response.ok) { if (response.ok) {
return response.arrayBuffer(); return response.arrayBuffer();
@ -172,7 +186,7 @@ class TinLayer extends Layer {
} }
} }
unpackEdges(arrayBuffer) { private _unpackEdges(arrayBuffer) {
const METABYTES = 13; const METABYTES = 13;
var dv = new DataView(arrayBuffer, METABYTES); var dv = new DataView(arrayBuffer, METABYTES);
var indices = new Uint32Array((arrayBuffer.byteLength - METABYTES) / 4); var indices = new Uint32Array((arrayBuffer.byteLength - METABYTES) / 4);
@ -182,7 +196,7 @@ class TinLayer extends Layer {
return indices; return indices;
} }
unpackVertices(arrayBuffer) { private _unpackVertices(arrayBuffer) {
const DIMENSIONS = 3; const DIMENSIONS = 3;
const ONEBYTE = 1, FOURBYTE = 4; // bytes count for metadata in PG_pointcloud (significant bits compression) const ONEBYTE = 1, FOURBYTE = 4; // bytes count for metadata in PG_pointcloud (significant bits compression)
@ -199,9 +213,9 @@ class TinLayer extends Layer {
ptr += FOURBYTE; ptr += FOURBYTE;
significantBitsCount = dataView.getUint32(ptr, true); significantBitsCount = dataView.getUint32(ptr, true);
ptr += FOURBYTE; ptr += FOURBYTE;
commonBits = this.readCommonBits(dataView, ptr); commonBits = this._readCommonBits(dataView, ptr);
ptr += FOURBYTE; ptr += FOURBYTE;
significantBits = this.readSignificantBits(dataView, ptr, bytesCount); significantBits = this._readSignificantBits(dataView, ptr, bytesCount);
let value = 0.0; let value = 0.0;
for (var j = dim, i = 0; i < pointsCount; j += DIMENSIONS, i++) { for (var j = dim, i = 0; i < pointsCount; j += DIMENSIONS, i++) {
value = significantBits.readBits(significantBitsCount) | commonBits; value = significantBits.readBits(significantBitsCount) | commonBits;
@ -216,22 +230,67 @@ class TinLayer extends Layer {
return posArray; return posArray;
} }
readCommonBits(dataView, ptr) { private _readCommonBits(dataView, ptr) {
var temp = new Int32Array(1); var temp = new Int32Array(1);
temp[0] = dataView.getInt32(ptr, false); // why false ?? temp[0] = dataView.getInt32(ptr, false); // why false ??
var combits = new BitStream(new Uint8Array(temp.buffer)); var combits = new BitStream(new Uint8Array(temp.buffer));
return combits.readBits(32); return combits.readBits(32);
} }
readSignificantBits(dataView, ptr, bytesCount) { private _readSignificantBits(dataView, ptr, bytesCount) {
var temp = new Int32Array(bytesCount / 4); let temp = new Int32Array(bytesCount / 4);
for (var i = ptr, j = 0; i < ptr + bytesCount; i += 4, j++) { for (let i = ptr, j = 0; i < ptr + bytesCount; i += 4, j++) {
temp[j] = dataView.getInt32(i); temp[j] = dataView.getInt32(i);
} }
var sigbits = new BitStream(new Uint8Array(temp.buffer)); let sigbits = new BitStream(new Uint8Array(temp.buffer));
return sigbits; return sigbits;
} }
async loadTextureWms(url, imageParameter) {
let dest = new proj4.Proj("EPSG:3857");
let source = new proj4.Proj("EPSG:3034");
let p1 = proj4.toPoint([this.baseExtent.min.x, this.baseExtent.min.y]);
let p2 = proj4.toPoint([this.baseExtent.max.x, this.baseExtent.max.y]);
proj4.transform(source, dest, p1);
proj4.transform(source, dest, p2);
// let bbox = this.baseExtent.x.min + "," + this.baseExtent.y.min + "," + this.baseExtent.x.max + "," + this.baseExtent.y.max;
let bbox = p1.x + "," + p1.y + "," + p2.x + "," + p2.y;
let params = {
version: "1.3.0",
service: "WMS",
request: "GetMap",
"width": imageParameter.width,
"height": imageParameter.height,
// "size": imageParameter.width + "," + imageParameter.height,
"crs": "EPSG:3857", // + imageParameter.bboxSR,
// "bboxSR": imageParameter.bboxSR,
// "bbox": "3955850,2183470.1545778836,4527300,2502829.8454221168",
"bbox": bbox,
"styles": "",
// "format": "png",
"format": "image/png",
"layers": "OSM-WMS"
// "f": "pjson"
};
let query = Object.keys(params)
.map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
.join('&');
let texturePath = url + '?' + query;
const textureLoader = new TextureLoader();
return new Promise((resolve, reject) => {
textureLoader.load(
texturePath,
(texture) => resolve(texture),
undefined,
err => reject(err)
);
});
}
} }
export { TinLayer }; export { TinLayer };

View File

@ -40729,11 +40729,6 @@ class Application {
} }
addEventListeners() { addEventListeners() {
// domEvent.on(this.mapIcon, 'click', () => {
// this.basemapControl.show();
// }, this);
domEvent.on(window, 'resize', this.onWindowResize, this); domEvent.on(window, 'resize', this.onWindowResize, this);
domEvent.on(window, 'keydown', this.keydown, this); domEvent.on(window, 'keydown', this.keydown, this);
@ -40896,26 +40891,3 @@ class Application {
let container = document.getElementById("webgl"); let container = document.getElementById("webgl");
let app = new Application(container); let app = new Application(container);
app.build(); app.build();
// new Vue({
// el: '#app',
// components: { Modal },
// data() {
// return {
// isModalVisible: false,
// }
// },
// mounted() {
// let container = document.getElementById("webgl");
// let app = new Application(container);
// app.build();
// },
// methods: {
// showModal() {
// this.isModalVisible = true;
// },
// closeModal() {
// this.isModalVisible = false;
// },
// }
// });

View File

@ -14,8 +14,7 @@ export class BoreholeIdentify {
this.type = "DxfIdentify"; this.type = "DxfIdentify";
this.searchUrl = ""; this.searchUrl = "";
this.camera = defaults.camera; this.camera = defaults.camera;
this.domElement = defaults.domElement; this.domElement = defaults.domElement;
//this.layer = defaults.layer;
this.highlightMaterial = defaults.highlightMaterial; this.highlightMaterial = defaults.highlightMaterial;
this.layers = defaults.layers; this.layers = defaults.layers;
} }
@ -35,16 +34,11 @@ export class BoreholeIdentify {
} }
execute(params) { execute(params) {
// let canvasOffset = $(this.domElement).offset();
let canvasOffset = this._getOffset(this.domElement); let canvasOffset = this._getOffset(this.domElement);
let xClickedOnCanvas = params.clientX - canvasOffset.left; let xClickedOnCanvas = params.clientX - canvasOffset.left;
let yClickedonCanvas = params.clientY - canvasOffset.top; let yClickedonCanvas = params.clientY - canvasOffset.top;
//this.camera = params.camera;
let eventsResponse = this._intersectObjects(xClickedOnCanvas, yClickedonCanvas, params.width, params.height); let eventsResponse = this._intersectObjects(xClickedOnCanvas, yClickedonCanvas, params.width, params.height);
//if (objs.length == 0) {
// //
//}
return eventsResponse.then( return eventsResponse.then(
function (response) { function (response) {
return response; return response;
@ -52,7 +46,6 @@ export class BoreholeIdentify {
} }
_intersectObjects(offsetX, offsetY, width, height) { _intersectObjects(offsetX, offsetY, width, height) {
// let deferred = $.Deferred();
return new Promise( return new Promise(
(resolve, reject) => { // (A) (resolve, reject) => { // (A)
if (offsetX === undefined || offsetY === undefined) { if (offsetX === undefined || offsetY === undefined) {
@ -74,8 +67,7 @@ export class BoreholeIdentify {
//var raycaster = new THREE.Raycaster(); //var raycaster = new THREE.Raycaster();
//raycaster.set(vector, direction); //raycaster.set(vector, direction);
//raycaster.setFromCamera(mouse, this.camera); let visibleMehses = this._getvisibleQueryableObjects();//only the visible layers
let visibleMehses = this._getvisibleQueryableObjects();//nur die sichtbar sind
let allMeshes = this._getQueryableObjects2();//alle let allMeshes = this._getQueryableObjects2();//alle
let intersects = []; let intersects = [];
let intersects1 = raycaster.intersectObjects(visibleMehses, true); let intersects1 = raycaster.intersectObjects(visibleMehses, true);
@ -92,11 +84,7 @@ export class BoreholeIdentify {
//for (var i = objs.length - 1; i >= 0; i--) { //for (var i = objs.length - 1; i >= 0; i--) {
for (let i = 0; i < intersects.length; i++) { for (let i = 0; i < intersects.length; i++) {
let obj = intersects[i]; let obj = intersects[i];
if (!obj.object.visible) continue; if (!obj.object.visible) continue; ;
// get layerId and featureId of clicked object
//var object = obj.object;
//var layerId = object.userData.layerId;
//var featureId = obj.faceIndex;
let layer = obj.object; let layer = obj.object;
let layerId = layer.userData.layerId; let layerId = layer.userData.layerId;
let objectGroup = layer.parent; let objectGroup = layer.parent;