diff --git a/.gitignore b/.gitignore
index f11645adb5a92bcaf6c10a33b95b0ec7ad91a806..04ff2ae29a67ee7afb9b13f0ede884f168e3f7ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,6 @@
 public/japan
-public/stuttgart_tileset
\ No newline at end of file
+public/stuttgart_tileset
+public/fellbach_tileset
+public/ulm_tileset
+public/tileset
+node_modules
\ No newline at end of file
diff --git a/app.js b/app.js
new file mode 100644
index 0000000000000000000000000000000000000000..0e7df8d7f084ff0cefa216d6271fbe48fe076a47
--- /dev/null
+++ b/app.js
@@ -0,0 +1,26 @@
+// import { load } from '@loaders.gl/core';
+// import { Tiles3DLoader } from '@loaders.gl/3d-tiles';
+// import { Tileset3D } from '@loaders.gl/tiles';
+import { load } from 'https://cdn.skypack.dev/@loaders.gl/core';
+import { Tiles3DLoader } from 'https://cdn.skypack.dev/@loaders.gl/3d-tiles';
+import { Tileset3D } from 'https://cdn.skypack.dev/@loaders.gl/tiles';
+async function loadTileset(url) {
+    try {
+        // Load the 3D Tiles tileset
+        const tilesetJson = await load(url, Tiles3DLoader);
+
+        // Example: Assuming you have a setup to use the loaded Tileset3D (e.g., using deck.gl or another library)
+        // This code snippet only demonstrates how to load the data.
+        const tileset3d = new Tileset3D(tilesetJson);
+        console.log('Tileset loaded:', tileset3d);
+
+        // Insert here the code to visualize the tileset (e.g., with deck.gl, three.js, etc.)
+    } catch (error) {
+        console.error('Failed to load the 3D Tiles tileset:', error);
+    }
+}
+
+// The URL to the 3D Tiles dataset
+const tilesetUrl = 'https://3dps.gis.lrg.tum.de/geovolumes/collections/Fellbach/all_buildings_lod2_textured/3dtiles/tileset.json';
+
+loadTileset(tilesetUrl);
\ No newline at end of file
diff --git a/loader.html b/loader.html
new file mode 100644
index 0000000000000000000000000000000000000000..16a20207d645d5840382d059b9f5cd325283ca33
--- /dev/null
+++ b/loader.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+    <html lang="en">
+    <head>
+        <meta charset="UTF-8">
+        <meta name="viewport" content="width=device-width, initial-scale=1.0">
+        <title>3D CityModel Viewer</title>
+    </head>
+    <body>
+        <div id="map"></div>
+        <script src="app.js" type="module"></script>
+    </body>
+    </html>
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000000000000000000000000000000000000..6804d0cc6c89d9d248cbeabe45f7b1a6334fd1ba
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,982 @@
+{
+  "name": "3dgeovisclient",
+  "version": "1.0.0",
+  "lockfileVersion": 2,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "3dgeovisclient",
+      "version": "1.0.0",
+      "license": "ISC",
+      "dependencies": {
+        "@loaders.gl/3d-tiles": "^4.1.3",
+        "@loaders.gl/core": "^4.1.3",
+        "@loaders.gl/tiles": "^4.1.3"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
+      "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
+      "dependencies": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@loaders.gl/3d-tiles": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-4.1.3.tgz",
+      "integrity": "sha512-ZIwNqgnaLG9n1reN8Z1Rb8QFFuPmxE9HwuuAyaZRo9+o6dMSxM3E0l5I46TwnL9uUVG2b+IUqW/SVvmqE+zvxw==",
+      "dependencies": {
+        "@loaders.gl/draco": "4.1.3",
+        "@loaders.gl/gltf": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/math": "4.1.3",
+        "@loaders.gl/tiles": "4.1.3",
+        "@loaders.gl/zip": "4.1.3",
+        "@math.gl/core": "^4.0.0",
+        "@math.gl/geospatial": "^4.0.0",
+        "@probe.gl/log": "^4.0.4",
+        "long": "^5.2.1"
+      },
+      "peerDependencies": {
+        "@loaders.gl/core": "^4.0.0"
+      }
+    },
+    "node_modules/@loaders.gl/compression": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/compression/-/compression-4.1.3.tgz",
+      "integrity": "sha512-SeY2oG+1gPZa7N8Oe+8FatN9305F7Eoqsv56YGRDfDKfgoZQgwSOoat85ue+GUH9SrkzktOvRSmgehsiSjX09A==",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@types/brotli": "^1.3.0",
+        "@types/pako": "^1.0.1",
+        "fflate": "0.7.4",
+        "lzo-wasm": "^0.0.4",
+        "pako": "1.0.11",
+        "snappyjs": "^0.6.1"
+      },
+      "optionalDependencies": {
+        "brotli": "^1.3.2",
+        "lz4js": "^0.2.0",
+        "zstd-codec": "^0.1"
+      }
+    },
+    "node_modules/@loaders.gl/core": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.1.3.tgz",
+      "integrity": "sha512-ZbDTvFyx5ylw4ZRfjG8Er3yzpiPohfEMIDwgX0FJwMLPkgqG3xW9ff7PYm3HNmAEMMYW94TD4jc7k7kvHavIUQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@probe.gl/log": "^4.0.2"
+      }
+    },
+    "node_modules/@loaders.gl/crypto": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/crypto/-/crypto-4.1.3.tgz",
+      "integrity": "sha512-jR/jH17j0Qrw97+UwEDoVetqO+1zamYkegFbehk+5n26BHplbwovYDjr/yvlM9G+IhGDxJ5fLelcF1t03aj+HQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@types/crypto-js": "^4.0.2"
+      }
+    },
+    "node_modules/@loaders.gl/draco": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-4.1.3.tgz",
+      "integrity": "sha512-hYK4Fp/i4PwgYDbKjCifo9B7N+8p628k+Zw4NMDAXKU+o4xnJeyAuVWqNuqHEN0Ui4DrC9zBetw7O7aDNphFWw==",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/schema": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "draco3d": "1.5.5"
+      }
+    },
+    "node_modules/@loaders.gl/gltf": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-4.1.3.tgz",
+      "integrity": "sha512-MSX/aO2NJ9YmKL8fX7fSJa6Oh6MA++6jbwfqxjnmIxJvzZ5EJoZX8ZNex5H1XpQqLKDOfP3j0uUiRTP0FS8Ovg==",
+      "dependencies": {
+        "@loaders.gl/draco": "4.1.3",
+        "@loaders.gl/images": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/textures": "4.1.3",
+        "@math.gl/core": "^4.0.0"
+      }
+    },
+    "node_modules/@loaders.gl/images": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-4.1.3.tgz",
+      "integrity": "sha512-XG/FDRnhHUzdztQrqlWf1bWv6i0bsTuNaGMdDeOP6ch9plgGXEWoHG6yl9oL8er9mgR/IJ2JcveW6u+htIhasA==",
+      "dependencies": {
+        "@loaders.gl/loader-utils": "4.1.3"
+      }
+    },
+    "node_modules/@loaders.gl/loader-utils": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-4.1.3.tgz",
+      "integrity": "sha512-yx1Cgzdgy5qnPWDWamWzJ6riq3l11TTjdo++BtDft6U5NHULdZvC/x/mBiylvc7kB0vkO1JKId4I0LxkWFcKRg==",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@probe.gl/stats": "^4.0.2"
+      }
+    },
+    "node_modules/@loaders.gl/math": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-4.1.3.tgz",
+      "integrity": "sha512-rsMnVX8QKlT8Fh0Yywve3LDc1200kbdnhSzURI6ASwFQqs2tlVZUI08kF10iH8swmBTO6xuIlOMNKQ6ICC/XrQ==",
+      "dependencies": {
+        "@loaders.gl/images": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@math.gl/core": "^4.0.0"
+      }
+    },
+    "node_modules/@loaders.gl/schema": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-4.1.3.tgz",
+      "integrity": "sha512-X+EqCshYpTUSm2gqJUKyKpdruu6xtXFMDhfjBCHixnLn8cefneQxv7hp2a7mUMd0UEy9spe9SAAD07gTPxXLSQ==",
+      "dependencies": {
+        "@types/geojson": "^7946.0.7"
+      }
+    },
+    "node_modules/@loaders.gl/textures": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-4.1.3.tgz",
+      "integrity": "sha512-Jb50t2pZ0QYy/Pk4VddsEP6sXaEhCtIBwRc9Rqvtrv0t4D/nwNbCNXJmnBfoS8cQaaKleuxBkjRlFLxaxeV6eQ==",
+      "dependencies": {
+        "@loaders.gl/images": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/schema": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "ktx-parse": "^0.0.4",
+        "texture-compressor": "^1.0.2"
+      }
+    },
+    "node_modules/@loaders.gl/tiles": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-4.1.3.tgz",
+      "integrity": "sha512-kjJJRcfHrXhnad6yNmANtDIKMav1G4V/gpgeL/jDYYAUBc/H03HEBGTCZCRt12bS3Byw9bReAo0vR5lSWizA3w==",
+      "dependencies": {
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/math": "4.1.3",
+        "@math.gl/core": "^4.0.0",
+        "@math.gl/culling": "^4.0.0",
+        "@math.gl/geospatial": "^4.0.0",
+        "@math.gl/web-mercator": "^4.0.0",
+        "@probe.gl/stats": "^4.0.2"
+      },
+      "peerDependencies": {
+        "@loaders.gl/core": "^4.0.0"
+      }
+    },
+    "node_modules/@loaders.gl/worker-utils": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-4.1.3.tgz",
+      "integrity": "sha512-Nozed0KqlI52b4SVK/QtipjodjcE9AxgOhjnZ67eMRnyD6VIofEP3iUiZ55jDkpRxzL+q5LB6u8wUCqI1dD7OQ==",
+      "dependencies": {
+        "@babel/runtime": "^7.3.1"
+      }
+    },
+    "node_modules/@loaders.gl/zip": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/zip/-/zip-4.1.3.tgz",
+      "integrity": "sha512-b10rIpczTZ0CfTXI9lrqJiOAqnv4byDZ2EgCp/T0MYQF3IGUvZMNvglLxRgo2Osw1L7w2sYP48wjr8/sJ/UF6g==",
+      "dependencies": {
+        "@loaders.gl/compression": "4.1.3",
+        "@loaders.gl/crypto": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "jszip": "^3.1.5",
+        "md5": "^2.3.0"
+      }
+    },
+    "node_modules/@math.gl/core": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-4.0.1.tgz",
+      "integrity": "sha512-9IewNjR9V66o+gYIIq5agFoHy6ZT6DRpRGQBfsUpZz4glAqOjVt64he8GGzjpmqfT+kKT4qwQ7nQl/hZLF15qA==",
+      "dependencies": {
+        "@math.gl/types": "4.0.1"
+      }
+    },
+    "node_modules/@math.gl/culling": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-4.0.1.tgz",
+      "integrity": "sha512-lv83sMKp0n1HjORhuNtWgX9ylYyj+/zHEPF0xxRXZvcpurB85fhgFLhvR81KLjmSbhQmFgzl0fZe7Ei3WxEP5Q==",
+      "dependencies": {
+        "@math.gl/core": "4.0.1"
+      }
+    },
+    "node_modules/@math.gl/geospatial": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/geospatial/-/geospatial-4.0.1.tgz",
+      "integrity": "sha512-FfTUMk8uRlBa4W3dMSFwPjRgdEBnOeVjBr3mcGqb3lHA/PPMvKuE+o7OJfA61Wj6ItuZqCEZHbLbA3WRAENoqQ==",
+      "dependencies": {
+        "@math.gl/core": "4.0.1"
+      }
+    },
+    "node_modules/@math.gl/types": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-4.0.1.tgz",
+      "integrity": "sha512-E9qBKAjVBiZD8Is7TbygiLGtYBP3GSLus6RUJSuzFQegdYXeVagvrs4UkBJxhrRAxw4crfH0Tq7IhTMKuuJNQw=="
+    },
+    "node_modules/@math.gl/web-mercator": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-4.0.1.tgz",
+      "integrity": "sha512-eJ0nDw8140kJorf8ASyKRC53rI+UG6vPxpsKJiGRD6lXsoKTeKYebeEAXiGDWTvi2AMe6+xngxTqqwm58fL3Fw=="
+    },
+    "node_modules/@probe.gl/env": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.0.9.tgz",
+      "integrity": "sha512-AOmVMD0/j78mX+k4+qX7ZhE0sY9H+EaJgIO6trik0BwV6VcrwxTGCGFAeuRsIGhETDnye06tkLXccYatYxAYwQ=="
+    },
+    "node_modules/@probe.gl/log": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.0.9.tgz",
+      "integrity": "sha512-ebuZaodSRE9aC+3bVC7cKRHT8garXeT1jTbj1R5tQRqQYc9iGeT3iemVOHx5bN9Q6gAs/0j54iPI+1DvWMAW4A==",
+      "dependencies": {
+        "@probe.gl/env": "4.0.9"
+      }
+    },
+    "node_modules/@probe.gl/stats": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.9.tgz",
+      "integrity": "sha512-Q9Xt/sJUQaMsbjRKjOscv2t7wXIymTrOEJ4a3da4FTCn7bkKvcdxdyFAQySCrtPxE+YZ5I5lXpWPgv9BwmpE1g=="
+    },
+    "node_modules/@types/brotli": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/@types/brotli/-/brotli-1.3.4.tgz",
+      "integrity": "sha512-cKYjgaS2DMdCKF7R0F5cgx1nfBYObN2ihIuPGQ4/dlIY6RpV7OWNwe9L8V4tTVKL2eZqOkNM9FM/rgTvLf4oXw==",
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/crypto-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz",
+      "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ=="
+    },
+    "node_modules/@types/geojson": {
+      "version": "7946.0.14",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz",
+      "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg=="
+    },
+    "node_modules/@types/node": {
+      "version": "20.11.25",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
+      "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "node_modules/@types/pako": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.7.tgz",
+      "integrity": "sha512-YBtzT2ztNF6R/9+UXj2wTGFnC9NklAnASt3sC0h2m1bbH7G6FyBIkt4AN8ThZpNfxUo1b2iMVO0UawiJymEt8A=="
+    },
+    "node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "optional": true
+    },
+    "node_modules/brotli": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+      "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+      "optional": true,
+      "dependencies": {
+        "base64-js": "^1.1.2"
+      }
+    },
+    "node_modules/charenc": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+    },
+    "node_modules/crypt": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/draco3d": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz",
+      "integrity": "sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q=="
+    },
+    "node_modules/fflate": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz",
+      "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw=="
+    },
+    "node_modules/image-size": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz",
+      "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==",
+      "bin": {
+        "image-size": "bin/image-size.js"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+    },
+    "node_modules/jszip": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+      "dependencies": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "setimmediate": "^1.0.5"
+      }
+    },
+    "node_modules/ktx-parse": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz",
+      "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A=="
+    },
+    "node_modules/lie": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+      "dependencies": {
+        "immediate": "~3.0.5"
+      }
+    },
+    "node_modules/long": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+      "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+    },
+    "node_modules/lz4js": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/lz4js/-/lz4js-0.2.0.tgz",
+      "integrity": "sha512-gY2Ia9Lm7Ep8qMiuGRhvUq0Q7qUereeldZPP1PMEJxPtEWHJLqw9pgX68oHajBH0nzJK4MaZEA/YNV3jT8u8Bg==",
+      "optional": true
+    },
+    "node_modules/lzo-wasm": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/lzo-wasm/-/lzo-wasm-0.0.4.tgz",
+      "integrity": "sha512-VKlnoJRFrB8SdJhlVKvW5vI1gGwcZ+mvChEXcSX6r2xDNc/Q2FD9esfBmGCuPZdrJ1feO+YcVFd2PTk0c137Gw=="
+    },
+    "node_modules/md5": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+      "dependencies": {
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
+      }
+    },
+    "node_modules/pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+    },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "node_modules/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=="
+    },
+    "node_modules/setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
+    },
+    "node_modules/snappyjs": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/snappyjs/-/snappyjs-0.6.1.tgz",
+      "integrity": "sha512-YIK6I2lsH072UE0aOFxxY1dPDCS43I5ktqHpeAsuLNYWkE5pGxRGWfDM4/vSUfNzXjC1Ivzt3qx31PCLmc9yqg=="
+    },
+    "node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+    },
+    "node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/texture-compressor": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz",
+      "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==",
+      "dependencies": {
+        "argparse": "^1.0.10",
+        "image-size": "^0.7.4"
+      },
+      "bin": {
+        "texture-compressor": "bin/texture-compressor.js"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/zstd-codec": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/zstd-codec/-/zstd-codec-0.1.4.tgz",
+      "integrity": "sha512-KYnWoFWgGtWyQEKNnUcb3u8ZtKO8dn5d8u+oGpxPlopqsPyv60U8suDyfk7Z7UtAO6Sk5i1aVcAs9RbaB1n36A==",
+      "optional": true
+    }
+  },
+  "dependencies": {
+    "@babel/runtime": {
+      "version": "7.24.0",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz",
+      "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==",
+      "requires": {
+        "regenerator-runtime": "^0.14.0"
+      }
+    },
+    "@loaders.gl/3d-tiles": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-4.1.3.tgz",
+      "integrity": "sha512-ZIwNqgnaLG9n1reN8Z1Rb8QFFuPmxE9HwuuAyaZRo9+o6dMSxM3E0l5I46TwnL9uUVG2b+IUqW/SVvmqE+zvxw==",
+      "requires": {
+        "@loaders.gl/draco": "4.1.3",
+        "@loaders.gl/gltf": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/math": "4.1.3",
+        "@loaders.gl/tiles": "4.1.3",
+        "@loaders.gl/zip": "4.1.3",
+        "@math.gl/core": "^4.0.0",
+        "@math.gl/geospatial": "^4.0.0",
+        "@probe.gl/log": "^4.0.4",
+        "long": "^5.2.1"
+      }
+    },
+    "@loaders.gl/compression": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/compression/-/compression-4.1.3.tgz",
+      "integrity": "sha512-SeY2oG+1gPZa7N8Oe+8FatN9305F7Eoqsv56YGRDfDKfgoZQgwSOoat85ue+GUH9SrkzktOvRSmgehsiSjX09A==",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@types/brotli": "^1.3.0",
+        "@types/pako": "^1.0.1",
+        "brotli": "^1.3.2",
+        "fflate": "0.7.4",
+        "lz4js": "^0.2.0",
+        "lzo-wasm": "^0.0.4",
+        "pako": "1.0.11",
+        "snappyjs": "^0.6.1",
+        "zstd-codec": "^0.1"
+      }
+    },
+    "@loaders.gl/core": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-4.1.3.tgz",
+      "integrity": "sha512-ZbDTvFyx5ylw4ZRfjG8Er3yzpiPohfEMIDwgX0FJwMLPkgqG3xW9ff7PYm3HNmAEMMYW94TD4jc7k7kvHavIUQ==",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@probe.gl/log": "^4.0.2"
+      }
+    },
+    "@loaders.gl/crypto": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/crypto/-/crypto-4.1.3.tgz",
+      "integrity": "sha512-jR/jH17j0Qrw97+UwEDoVetqO+1zamYkegFbehk+5n26BHplbwovYDjr/yvlM9G+IhGDxJ5fLelcF1t03aj+HQ==",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@types/crypto-js": "^4.0.2"
+      }
+    },
+    "@loaders.gl/draco": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-4.1.3.tgz",
+      "integrity": "sha512-hYK4Fp/i4PwgYDbKjCifo9B7N+8p628k+Zw4NMDAXKU+o4xnJeyAuVWqNuqHEN0Ui4DrC9zBetw7O7aDNphFWw==",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/schema": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "draco3d": "1.5.5"
+      }
+    },
+    "@loaders.gl/gltf": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-4.1.3.tgz",
+      "integrity": "sha512-MSX/aO2NJ9YmKL8fX7fSJa6Oh6MA++6jbwfqxjnmIxJvzZ5EJoZX8ZNex5H1XpQqLKDOfP3j0uUiRTP0FS8Ovg==",
+      "requires": {
+        "@loaders.gl/draco": "4.1.3",
+        "@loaders.gl/images": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/textures": "4.1.3",
+        "@math.gl/core": "^4.0.0"
+      }
+    },
+    "@loaders.gl/images": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-4.1.3.tgz",
+      "integrity": "sha512-XG/FDRnhHUzdztQrqlWf1bWv6i0bsTuNaGMdDeOP6ch9plgGXEWoHG6yl9oL8er9mgR/IJ2JcveW6u+htIhasA==",
+      "requires": {
+        "@loaders.gl/loader-utils": "4.1.3"
+      }
+    },
+    "@loaders.gl/loader-utils": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-4.1.3.tgz",
+      "integrity": "sha512-yx1Cgzdgy5qnPWDWamWzJ6riq3l11TTjdo++BtDft6U5NHULdZvC/x/mBiylvc7kB0vkO1JKId4I0LxkWFcKRg==",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "@probe.gl/stats": "^4.0.2"
+      }
+    },
+    "@loaders.gl/math": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-4.1.3.tgz",
+      "integrity": "sha512-rsMnVX8QKlT8Fh0Yywve3LDc1200kbdnhSzURI6ASwFQqs2tlVZUI08kF10iH8swmBTO6xuIlOMNKQ6ICC/XrQ==",
+      "requires": {
+        "@loaders.gl/images": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@math.gl/core": "^4.0.0"
+      }
+    },
+    "@loaders.gl/schema": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-4.1.3.tgz",
+      "integrity": "sha512-X+EqCshYpTUSm2gqJUKyKpdruu6xtXFMDhfjBCHixnLn8cefneQxv7hp2a7mUMd0UEy9spe9SAAD07gTPxXLSQ==",
+      "requires": {
+        "@types/geojson": "^7946.0.7"
+      }
+    },
+    "@loaders.gl/textures": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-4.1.3.tgz",
+      "integrity": "sha512-Jb50t2pZ0QYy/Pk4VddsEP6sXaEhCtIBwRc9Rqvtrv0t4D/nwNbCNXJmnBfoS8cQaaKleuxBkjRlFLxaxeV6eQ==",
+      "requires": {
+        "@loaders.gl/images": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/schema": "4.1.3",
+        "@loaders.gl/worker-utils": "4.1.3",
+        "ktx-parse": "^0.0.4",
+        "texture-compressor": "^1.0.2"
+      }
+    },
+    "@loaders.gl/tiles": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-4.1.3.tgz",
+      "integrity": "sha512-kjJJRcfHrXhnad6yNmANtDIKMav1G4V/gpgeL/jDYYAUBc/H03HEBGTCZCRt12bS3Byw9bReAo0vR5lSWizA3w==",
+      "requires": {
+        "@loaders.gl/loader-utils": "4.1.3",
+        "@loaders.gl/math": "4.1.3",
+        "@math.gl/core": "^4.0.0",
+        "@math.gl/culling": "^4.0.0",
+        "@math.gl/geospatial": "^4.0.0",
+        "@math.gl/web-mercator": "^4.0.0",
+        "@probe.gl/stats": "^4.0.2"
+      }
+    },
+    "@loaders.gl/worker-utils": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-4.1.3.tgz",
+      "integrity": "sha512-Nozed0KqlI52b4SVK/QtipjodjcE9AxgOhjnZ67eMRnyD6VIofEP3iUiZ55jDkpRxzL+q5LB6u8wUCqI1dD7OQ==",
+      "requires": {
+        "@babel/runtime": "^7.3.1"
+      }
+    },
+    "@loaders.gl/zip": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/@loaders.gl/zip/-/zip-4.1.3.tgz",
+      "integrity": "sha512-b10rIpczTZ0CfTXI9lrqJiOAqnv4byDZ2EgCp/T0MYQF3IGUvZMNvglLxRgo2Osw1L7w2sYP48wjr8/sJ/UF6g==",
+      "requires": {
+        "@loaders.gl/compression": "4.1.3",
+        "@loaders.gl/crypto": "4.1.3",
+        "@loaders.gl/loader-utils": "4.1.3",
+        "jszip": "^3.1.5",
+        "md5": "^2.3.0"
+      }
+    },
+    "@math.gl/core": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-4.0.1.tgz",
+      "integrity": "sha512-9IewNjR9V66o+gYIIq5agFoHy6ZT6DRpRGQBfsUpZz4glAqOjVt64he8GGzjpmqfT+kKT4qwQ7nQl/hZLF15qA==",
+      "requires": {
+        "@math.gl/types": "4.0.1"
+      }
+    },
+    "@math.gl/culling": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-4.0.1.tgz",
+      "integrity": "sha512-lv83sMKp0n1HjORhuNtWgX9ylYyj+/zHEPF0xxRXZvcpurB85fhgFLhvR81KLjmSbhQmFgzl0fZe7Ei3WxEP5Q==",
+      "requires": {
+        "@math.gl/core": "4.0.1"
+      }
+    },
+    "@math.gl/geospatial": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/geospatial/-/geospatial-4.0.1.tgz",
+      "integrity": "sha512-FfTUMk8uRlBa4W3dMSFwPjRgdEBnOeVjBr3mcGqb3lHA/PPMvKuE+o7OJfA61Wj6ItuZqCEZHbLbA3WRAENoqQ==",
+      "requires": {
+        "@math.gl/core": "4.0.1"
+      }
+    },
+    "@math.gl/types": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-4.0.1.tgz",
+      "integrity": "sha512-E9qBKAjVBiZD8Is7TbygiLGtYBP3GSLus6RUJSuzFQegdYXeVagvrs4UkBJxhrRAxw4crfH0Tq7IhTMKuuJNQw=="
+    },
+    "@math.gl/web-mercator": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-4.0.1.tgz",
+      "integrity": "sha512-eJ0nDw8140kJorf8ASyKRC53rI+UG6vPxpsKJiGRD6lXsoKTeKYebeEAXiGDWTvi2AMe6+xngxTqqwm58fL3Fw=="
+    },
+    "@probe.gl/env": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.0.9.tgz",
+      "integrity": "sha512-AOmVMD0/j78mX+k4+qX7ZhE0sY9H+EaJgIO6trik0BwV6VcrwxTGCGFAeuRsIGhETDnye06tkLXccYatYxAYwQ=="
+    },
+    "@probe.gl/log": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.0.9.tgz",
+      "integrity": "sha512-ebuZaodSRE9aC+3bVC7cKRHT8garXeT1jTbj1R5tQRqQYc9iGeT3iemVOHx5bN9Q6gAs/0j54iPI+1DvWMAW4A==",
+      "requires": {
+        "@probe.gl/env": "4.0.9"
+      }
+    },
+    "@probe.gl/stats": {
+      "version": "4.0.9",
+      "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.9.tgz",
+      "integrity": "sha512-Q9Xt/sJUQaMsbjRKjOscv2t7wXIymTrOEJ4a3da4FTCn7bkKvcdxdyFAQySCrtPxE+YZ5I5lXpWPgv9BwmpE1g=="
+    },
+    "@types/brotli": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/@types/brotli/-/brotli-1.3.4.tgz",
+      "integrity": "sha512-cKYjgaS2DMdCKF7R0F5cgx1nfBYObN2ihIuPGQ4/dlIY6RpV7OWNwe9L8V4tTVKL2eZqOkNM9FM/rgTvLf4oXw==",
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/crypto-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz",
+      "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ=="
+    },
+    "@types/geojson": {
+      "version": "7946.0.14",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz",
+      "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg=="
+    },
+    "@types/node": {
+      "version": "20.11.25",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
+      "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
+      "requires": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "@types/pako": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/@types/pako/-/pako-1.0.7.tgz",
+      "integrity": "sha512-YBtzT2ztNF6R/9+UXj2wTGFnC9NklAnASt3sC0h2m1bbH7G6FyBIkt4AN8ThZpNfxUo1b2iMVO0UawiJymEt8A=="
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "optional": true
+    },
+    "brotli": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz",
+      "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==",
+      "optional": true,
+      "requires": {
+        "base64-js": "^1.1.2"
+      }
+    },
+    "charenc": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
+      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
+    },
+    "core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+    },
+    "crypt": {
+      "version": "0.0.2",
+      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
+      "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow=="
+    },
+    "draco3d": {
+      "version": "1.5.5",
+      "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz",
+      "integrity": "sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q=="
+    },
+    "fflate": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.4.tgz",
+      "integrity": "sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw=="
+    },
+    "image-size": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz",
+      "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g=="
+    },
+    "immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+    },
+    "jszip": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+      "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
+      "requires": {
+        "lie": "~3.3.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.3.6",
+        "setimmediate": "^1.0.5"
+      }
+    },
+    "ktx-parse": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz",
+      "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A=="
+    },
+    "lie": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+      "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
+      "requires": {
+        "immediate": "~3.0.5"
+      }
+    },
+    "long": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+      "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
+    },
+    "lz4js": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/lz4js/-/lz4js-0.2.0.tgz",
+      "integrity": "sha512-gY2Ia9Lm7Ep8qMiuGRhvUq0Q7qUereeldZPP1PMEJxPtEWHJLqw9pgX68oHajBH0nzJK4MaZEA/YNV3jT8u8Bg==",
+      "optional": true
+    },
+    "lzo-wasm": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/lzo-wasm/-/lzo-wasm-0.0.4.tgz",
+      "integrity": "sha512-VKlnoJRFrB8SdJhlVKvW5vI1gGwcZ+mvChEXcSX6r2xDNc/Q2FD9esfBmGCuPZdrJ1feO+YcVFd2PTk0c137Gw=="
+    },
+    "md5": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
+      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
+      "requires": {
+        "charenc": "0.0.2",
+        "crypt": "0.0.2",
+        "is-buffer": "~1.1.6"
+      }
+    },
+    "pako": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+      "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "requires": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "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=="
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
+    },
+    "snappyjs": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/snappyjs/-/snappyjs-0.6.1.tgz",
+      "integrity": "sha512-YIK6I2lsH072UE0aOFxxY1dPDCS43I5ktqHpeAsuLNYWkE5pGxRGWfDM4/vSUfNzXjC1Ivzt3qx31PCLmc9yqg=="
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "texture-compressor": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz",
+      "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==",
+      "requires": {
+        "argparse": "^1.0.10",
+        "image-size": "^0.7.4"
+      }
+    },
+    "undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "zstd-codec": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/zstd-codec/-/zstd-codec-0.1.4.tgz",
+      "integrity": "sha512-KYnWoFWgGtWyQEKNnUcb3u8ZtKO8dn5d8u+oGpxPlopqsPyv60U8suDyfk7Z7UtAO6Sk5i1aVcAs9RbaB1n36A==",
+      "optional": true
+    }
+  }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..d63d27e9ea45b216f450198df023b8a98ed72797
--- /dev/null
+++ b/package.json
@@ -0,0 +1,20 @@
+{
+  "name": "3dgeovisclient",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://transfer.hft-stuttgart.de/gitlab/thunyathep.santhanavanich/3dgeovisclient.git"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "@loaders.gl/3d-tiles": "^4.1.3",
+    "@loaders.gl/core": "^4.1.3",
+    "@loaders.gl/tiles": "^4.1.3"
+  }
+}
diff --git a/public/convert_command.md b/public/convert_command.md
new file mode 100644
index 0000000000000000000000000000000000000000..ba00f3b06702d54e2b528754a673a3fc5c6f60ab
--- /dev/null
+++ b/public/convert_command.md
@@ -0,0 +1,5 @@
+## First try
+```bash
+npx tile-converter --install-dependencies
+npx tile-converter --input-type="3DTILES" --tileset="/home/joe/2021_rtgis_3dps_geovolumes/geovolumes/collections/Fellbach/all_buildings_lod2_textured/3dtiles/tileset.json" --name="Fellbach_Textures" --slpk=TRUE --generate-textures=TRUE
+```
\ No newline at end of file
diff --git a/public/index_fellbach3d_smart_adv.html b/public/index_fellbach3d_smart_adv.html
new file mode 100644
index 0000000000000000000000000000000000000000..f9dc7c39f9a0355fba71fa1084d6d02f6cb1514e
--- /dev/null
+++ b/public/index_fellbach3d_smart_adv.html
@@ -0,0 +1,56 @@
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <script src="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Cesium.js"></script>
+    <link href="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
+    <script src="viewerCesiumNavigationMixin.js"> </script>
+</head>
+
+<body>
+    <div id="cesiumContainer" style="width: 100%; height:100%"></div>
+    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
+    <script>
+        Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJmNDI1ZTg5OC05MWU1LTQ5YTYtOTEyZS1mODk1ODZiZGRhMjgiLCJpZCI6MTcxNDQsImlhdCI6MTY4MDIwNTA2MX0.fM4zc4RUfbrgLvaD4FXP-EUNMceSRA1ILRt2qVNACpc';
+        var viewer = new Cesium.Viewer('cesiumContainer', {
+            // terrainProvider: Cesium.createWorldTerrain(),
+            baseLayerPicker: true,
+            vrButton: true,
+            geocoder: true,
+            navigationHelpButton: false,
+            selectionIndicator: false,
+            shadows: false,
+            timeline: true,
+            sceneModePicker: true,
+            terrainProvider: new Cesium.CesiumTerrainProvider({
+                url: 'https://web3d.basemap.de/cesium/dgm5-mesh',
+                credit: new Cesium.Credit("\u0026copy; 2023 basemap.de", true)
+            })
+        });
+        viewer.extend(Cesium.viewerCesiumNavigationMixin, {});
+
+        var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
+            url: 'https://web3d.basemap.de/cesium/buildings-fly/root.json'
+        }));
+        viewer.camera.setView({ "destination": { "x": 4154353.86673887, "y": 678154.7981396901, "z": 4776795.2223274 }, "orientation": { "direction": { "x": -0.9635249406751695, "y": -0.15728536436861265, "z": 0.2165202134959783 }, "up": { "x": 0.21369179371637717, "y": 0.03488294928175081, "z": 0.9762781351375663 } } })
+        basicStyle = new Cesium.Cesium3DTileStyle({
+            color: "color('white')",
+            show: true
+        });
+        waterDemandStyle = new Cesium.Cesium3DTileStyle({
+            color: {
+                conditions: [
+                    ["${gebaeudefunktion} === '31001_1010'", "color('#ffffcc')"],
+                    ["${gebaeudefunktion} === '31001_3013'", "color('#bae4bc')"],
+                    ["${gebaeudefunktion} === '31001_1123'", "color('#7bccc4')"],
+                    ["${gebaeudefunktion} === '31001_2111'", "color('#2b8cbe')"],
+                    ["true", "color('#2b8cbe')"],
+                ],
+            },
+        });
+        tileset.style = basicStyle;
+
+    </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/public/index_fellbach3d_test.html b/public/index_fellbach3d_test.html
new file mode 100644
index 0000000000000000000000000000000000000000..3349a6ca057ce52ab2e855b8453c63fbb16b7b9b
--- /dev/null
+++ b/public/index_fellbach3d_test.html
@@ -0,0 +1,110 @@
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <script src="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Cesium.js"></script>
+    <link href="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
+    <script src="viewerCesiumNavigationMixin.js"> </script>
+</head>
+
+<body>
+    <div id="cesiumContainer" style="width: 100%; height:100%"></div>
+    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
+    <script>
+        Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJmNDI1ZTg5OC05MWU1LTQ5YTYtOTEyZS1mODk1ODZiZGRhMjgiLCJpZCI6MTcxNDQsImlhdCI6MTY4MDIwNTA2MX0.fM4zc4RUfbrgLvaD4FXP-EUNMceSRA1ILRt2qVNACpc';
+        var viewer = new Cesium.Viewer('cesiumContainer', {
+            // terrainProvider: Cesium.createWorldTerrain(),
+            baseLayerPicker: true,
+            vrButton: true,
+            geocoder: true,
+            navigationHelpButton: false,
+            selectionIndicator: false,
+            shadows: false,
+            timeline: true,
+            sceneModePicker: true,
+            terrainProvider: new Cesium.CesiumTerrainProvider({
+                url: 'https://web3d.basemap.de/cesium/dgm5-mesh',
+                credit: new Cesium.Credit("\u0026copy; 2023 basemap.de", true)
+            })
+            // imageryProvider: new Cesium.MapboxStyleImageryProvider({
+            //     // check style ID at https://docs.mapbox.com/api/maps/styles/
+            //     styleId: 'light-v10',
+            //     // styleId: 'navigation-day-v1',
+            //     accessToken: 'pk.eyJ1IjoidGh1bnlhdGhlcCIsImEiOiJjamFpOWV4a2gxd21vMndxdXd2M3VoY3hmIn0.jLlCscei0yH-ZHwcfxF_ug'
+            // })
+            // imageryProvider: new Cesium.OpenStreetMapImageryProvider({
+            //     url: 'https://a.tile.openstreetmap.org/'
+            // }),
+        });
+        viewer.extend(Cesium.viewerCesiumNavigationMixin, {});
+
+        var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
+            url: 'https://3dps.gis.lrg.tum.de/geovolumes/collections/Fellbach/all_buildings_lod2_textured/3dtiles/tileset.json'
+        }));
+        tileset.readyPromise.then(function (tileset) {
+            viewer.flyTo(tileset)
+        });
+
+
+        // var cityStyle = new Cesium.Cesium3DTileStyle({
+        //     color: {
+        //         conditions: [
+        //             ["${surface} === 'wall'", "color('#f2f2f2')"],
+        //             ["${surface} === 'roof'", "color('#ff5c4d')"],
+        //             // ["${surface} === 'roof'", "color('#005c4d')"],
+        //             ["${surface} === 'bridge'", "color('#999999')"]
+        //         ]
+        //     },
+        // });
+        // tileset.style = cityStyle
+        // const provider = new Cesium.WebMapServiceImageryProvider({
+        //     url: 'https://sgx.geodatenzentrum.de/wms_basemapde?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities',
+        //     layers: "de_basemapde_web_raster_farbe",
+        //     parameters: {
+        //         transparent: true,
+        //         format: "image/png",
+        //     }
+        // });
+        // viewer.imageryLayers.addImageryProvider(provider);
+        // Get the URL of the current page
+        // var url = window.location.href;
+
+        // // Use a regular expression to extract the lat and lng parameters
+        // var regex = /lat=([0-9.]+)&lng=([0-9.]+)/;
+        // var match = regex.exec(url);
+
+        // // Check if the match is not null
+        // if (match) {
+        //     // Get the lat and lng values from the match array
+        //     var lat = match[1];
+        //     var lng = match[2];
+
+        //     // Do something with the lat and lng values
+        //     console.log("Latitude: " + lat);
+        //     console.log("Longitude: " + lng);
+        //     viewer.camera.flyTo({
+        //         destination: Cesium.Cartesian3.fromDegrees(lng, lat, 3500.0),
+        //         orientation: {
+        //             heading: Cesium.Math.toRadians(0.0),
+        //             pitch: Cesium.Math.toRadians(-40.0),
+        //             roll: 0.0
+        //         }
+        //     });
+        // } else {
+        //     // No lat and lng parameters found
+        //     console.log("No latitude and longitude values found in the URL");
+        //     viewer.camera.flyTo({
+        //         destination: Cesium.Cartesian3.fromDegrees(10.277367, 47.415311, 3500.0),
+        //         orientation: {
+        //             heading: Cesium.Math.toRadians(0.0),
+        //             pitch: Cesium.Math.toRadians(-40.0),
+        //             roll: 0.0
+        //         }
+        //     });
+        // }
+        
+
+    </script>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/public/index_ulm3d_lod2.html b/public/index_ulm3d_lod2.html
new file mode 100644
index 0000000000000000000000000000000000000000..957625910615bbb3d6d9ca3d40214b4adb8bb42b
--- /dev/null
+++ b/public/index_ulm3d_lod2.html
@@ -0,0 +1,88 @@
+<html lang="en">
+
+<head>
+    <meta charset="utf-8">
+    <script src="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Cesium.js"></script>
+    <link href="https://cesium.com/downloads/cesiumjs/releases/1.94/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
+    <script src="viewerCesiumNavigationMixin.js"> </script>
+</head>
+
+<body>
+    <div id="cesiumContainer" style="width: 100%; height:100%"></div>
+    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
+    <script>
+        Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJmNDI1ZTg5OC05MWU1LTQ5YTYtOTEyZS1mODk1ODZiZGRhMjgiLCJpZCI6MTcxNDQsImlhdCI6MTY4MDIwNTA2MX0.fM4zc4RUfbrgLvaD4FXP-EUNMceSRA1ILRt2qVNACpc';
+        var viewer = new Cesium.Viewer('cesiumContainer', {
+            // terrainProvider: Cesium.createWorldTerrain(),
+            baseLayerPicker: true,
+            vrButton: true,
+            geocoder: true,
+            navigationHelpButton: false,
+            selectionIndicator: false,
+            shadows: false,
+            timeline: true,
+            sceneModePicker: true,
+            terrainProvider: new Cesium.CesiumTerrainProvider({
+                url: 'https://web3d.basemap.de/cesium/dgm5-mesh',
+                credit: new Cesium.Credit("\u0026copy; 2023 basemap.de", true)
+            })
+        });
+        viewer.extend(Cesium.viewerCesiumNavigationMixin, {});
+
+        var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
+            url: 'ulm_tileset/tileset.json'
+        }));
+        viewer.flyTo(tileset)
+
+        
+        // const provider = new Cesium.WebMapServiceImageryProvider({
+        //     url: 'https://sgx.geodatenzentrum.de/wms_basemapde?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities',
+        //     layers: "de_basemapde_web_raster_farbe",
+        //     parameters: {
+        //         transparent: true,
+        //         format: "image/png",
+        //     }
+        // });
+        // viewer.imageryLayers.addImageryProvider(provider);
+        // Get the URL of the current page
+        // var url = window.location.href;
+
+        // // Use a regular expression to extract the lat and lng parameters
+        // var regex = /lat=([0-9.]+)&lng=([0-9.]+)/;
+        // var match = regex.exec(url);
+
+        // // Check if the match is not null
+        // if (match) {
+        //     // Get the lat and lng values from the match array
+        //     var lat = match[1];
+        //     var lng = match[2];
+
+        //     // Do something with the lat and lng values
+        //     console.log("Latitude: " + lat);
+        //     console.log("Longitude: " + lng);
+        //     viewer.camera.flyTo({
+        //         destination: Cesium.Cartesian3.fromDegrees(lng, lat, 3500.0),
+        //         orientation: {
+        //             heading: Cesium.Math.toRadians(0.0),
+        //             pitch: Cesium.Math.toRadians(-40.0),
+        //             roll: 0.0
+        //         }
+        //     });
+        // } else {
+        //     // No lat and lng parameters found
+        //     console.log("No latitude and longitude values found in the URL");
+        //     viewer.camera.flyTo({
+        //         destination: Cesium.Cartesian3.fromDegrees(10.277367, 47.415311, 3500.0),
+        //         orientation: {
+        //             heading: Cesium.Math.toRadians(0.0),
+        //             pitch: Cesium.Math.toRadians(-40.0),
+        //             roll: 0.0
+        //         }
+        //     });
+        // }
+        
+
+    </script>
+</body>
+
+</html>
\ No newline at end of file