From 98f5be7c748f11df37df73fc7c65df38abcaa52b Mon Sep 17 00:00:00 2001 From: Ol86 Date: Tue, 28 Apr 2026 09:51:06 +0200 Subject: [PATCH] Change polygons to feature and remove hardcoded geoJSON --- pnpm-lock.yaml | 1657 ++++++++++++++++++++++++++++++++++++++++ src/app/map/geojson.ts | 67 -- src/app/map/map.ts | 155 ++-- src/app/overpass.ts | 4 +- 4 files changed, 1754 insertions(+), 129 deletions(-) delete mode 100644 src/app/map/geojson.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d43cf90..ff89029 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,6 +29,9 @@ importers: '@bluehalo/ngx-leaflet': specifier: ^21.2.0 version: 21.2.0(@angular/common@21.2.7(@angular/core@21.2.7(@angular/compiler@21.2.7)(rxjs@7.8.2))(rxjs@7.8.2))(@angular/core@21.2.7(@angular/compiler@21.2.7)(rxjs@7.8.2))(leaflet@1.9.4) + '@turf/turf': + specifier: ^7.3.5 + version: 7.3.5 '@types/geojson': specifier: ^7946.0.16 version: 7946.0.16 @@ -1335,12 +1338,363 @@ packages: resolution: {integrity: sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==} engines: {node: ^20.17.0 || >=22.9.0} + '@turf/along@7.3.5': + resolution: {integrity: sha512-Ee4AHV9j2Bnlm/5nm4ChY7nkwpaaMffSez9nsJ9HcMbzG+GgTkt0F5pn9d02U7YvuWqckM5lfr3kBI+w2uTz+g==} + + '@turf/angle@7.3.5': + resolution: {integrity: sha512-+c3UZfkL1nNacfpLkj89rRreIlKM5UALeeWpcw7hCEK4MycXCBmITkyLLXOzoQaRBc/7ua4PV0Ov13Y6Ck9PzQ==} + + '@turf/area@7.3.5': + resolution: {integrity: sha512-sSn80wPT7XfBIDN3vurCPxhk9W4U8ozS/XImSqeLN8qveTICOxzZkhsGDMp0CuncaN+plWut4a2TdNM7mzZB6Q==} + + '@turf/bbox-clip@7.3.5': + resolution: {integrity: sha512-FuADTCBfRwdzJb2gFawDGnD1jKlUOfsWcu5Uv8iyEgu9JLuLAIYtI/l9xVF76BAoAvSkLgMfUvrPQ4SXCSUrVA==} + + '@turf/bbox-polygon@7.3.5': + resolution: {integrity: sha512-Cs9Laej8zfSY51kORM9UcbY4Uf/7X3OIZr/LydbrmmARFSpYH/FZsEQjAGi1S1Q0aYbibVqjEUReHN3ZVsV5eA==} + + '@turf/bbox@7.3.5': + resolution: {integrity: sha512-oG1ya/HtBjAIg4TimbWx+nOYPbY0bCvt82Bq8tm6sBw3qqtbOyRSfDz79Sq90TnH7DXJprJ1qnVGKNtZ6jemfw==} + + '@turf/bearing@7.3.5': + resolution: {integrity: sha512-/qabIt/IuPsGlE6RukJ0zOirc6afNxoK7fK1WBNVnHuJjeOpSkW+7q1QW5XQGXBMv3odcD0ZgRR+MBiAHduYSA==} + + '@turf/bezier-spline@7.3.5': + resolution: {integrity: sha512-54qnreNRvV9BeTGz2YXJyma+m8HMusuXWw3AkG0bIJGtqJMHqFKC/rWOcYxVj1VM2ScoTgglFxvq7GtSna+KMw==} + + '@turf/boolean-clockwise@7.3.5': + resolution: {integrity: sha512-VpDIpTKBjH4oPbzx1ns18TWcosi+qCRtgU1HIJHLj4NWyLNr7TX86DvomCvZRPfsFxkYYgkFlqHBG1a29dcyqQ==} + + '@turf/boolean-concave@7.3.5': + resolution: {integrity: sha512-CHrmnEww43CAwEPszrKtLjM13hWDmsFZe0eCocxOtXLMspj+LCheB0bjMfcoBYfoTsvOPXxnoLTK9n4xuWBRSA==} + + '@turf/boolean-contains@7.3.5': + resolution: {integrity: sha512-P4JUAHgvJkD+8ybQ6d1OHp9TBsGsjJxF5lWeXJgp0k4+Hd/D0CVy4/mhLkZdNa6QdljVdwNcfU0CTqy1WsSQig==} + + '@turf/boolean-crosses@7.3.5': + resolution: {integrity: sha512-o4Gmb2gbPl4j7810ZrT9GZsGigY+HRwcOI9pkkKH6BJ4ewSlQCPzP4JFruZp0+mIXS6NnPv7+Lw3J8LN3kYw1g==} + + '@turf/boolean-disjoint@7.3.5': + resolution: {integrity: sha512-Pz1GGUC6iL6xGVqhyo+fYg35kl4j/HONMEoC1voN3DcBOCcVlzq+ljvMpvE+oQiR7Q38xLhIxZneLCqMp5YrQA==} + + '@turf/boolean-equal@7.3.5': + resolution: {integrity: sha512-xjSFi/BpxBY5tDDuSbixIRVq2AnDGcdLL8XOHzZtJWZjSa6tAi6afxSiMbQTGIhYfwwcB/sJcIUUffBaIQ2BiA==} + + '@turf/boolean-intersects@7.3.5': + resolution: {integrity: sha512-Z6GPYjozrmTuzWQD0x7o8RPm+4HC7hz9q23hdB3U1+Qahesv8Mtc+wo82tO4CG6/NRnJ9u79DlEhmR1DxUU4iQ==} + + '@turf/boolean-overlap@7.3.5': + resolution: {integrity: sha512-DUeiPVqFSTjW79erPbo780pRcKCRad59NcscVsTYkZD/92peF/4rQvHbvAUpUDPZaQCxe+mvfeDHfUFmfVKCGA==} + + '@turf/boolean-parallel@7.3.5': + resolution: {integrity: sha512-+shvGYFUx1vPQRPNeKiJcHtLAf9fl3mzAl9tBx2z+dU0IZDKz76/MAaDYSrMya/BYilFZ0E4RCEVq1X3s+AfkA==} + + '@turf/boolean-point-in-polygon@7.3.5': + resolution: {integrity: sha512-ba7+B0wzaS9GtERZOoXUZ6oW8IcIJHNQZf3c+tiD9ESjcsPO1Q/4qIJGTKl92nBLhhracHJxMWBM/U6hAVkaRg==} + + '@turf/boolean-point-on-line@7.3.5': + resolution: {integrity: sha512-TuWfrAT63W43BDzgYc94UzQ5/PjF1aTnh4AIzmQwez1YnimShYcOTwo8OIHzDaB6gbbvFsfxYMuOA5JOp942Kg==} + + '@turf/boolean-touches@7.3.5': + resolution: {integrity: sha512-GwD0gmbV1p+EFHojBjaa1cwGMybayOZUDLj562RlAAoexC8ownrW7W6oMAlM2VCxk4gq6CLx3hss9pONuQcKjQ==} + + '@turf/boolean-valid@7.3.5': + resolution: {integrity: sha512-ZezJCgFJS0JRJfj6fVSI1idcifTaWFW70NYRCUur9926DHLvSkfbtEF5i63yPQt2Zxx00FTUJPcHRzdgOiwECA==} + + '@turf/boolean-within@7.3.5': + resolution: {integrity: sha512-FsZhkAoi9KU2F0D5dyOQ38A7y9Bk8XTmUfLKAJa12xHN0QtXZEYH86YdVlrI1XgfFB9gmUddJPFX+bJATy6rxw==} + + '@turf/buffer@7.3.5': + resolution: {integrity: sha512-TGls3nYtWzviKHT00XVBfHKa7Z2oIZKqiHN7R0xErGwMSAR7YhxVROhxq/iyIsWZjl1SlPwweZZIxWILQuxpZA==} + + '@turf/center-mean@7.3.5': + resolution: {integrity: sha512-8IpS7zUZg0fuUpN9ViqT4gR6YMjSR1R1kHysaDxhP1zMrTJ84U5lGG+VQC7HpHqybOnuwkXZrV970h9Ni78n6g==} + + '@turf/center-median@7.3.5': + resolution: {integrity: sha512-e+NeDKyZzIzSTA0qd9cwIuguCnDQSc6TLd1MjkHKTd37PCaPSc40TMEIBX1x+kJRwOxzmUgpubfHUG9zfjdtyA==} + + '@turf/center-of-mass@7.3.5': + resolution: {integrity: sha512-eEzx4YKxUP55Apdjt7XXuQ906KKx4uSQWLxJw5OHE0rKOSN/qYTSdu0s7nQBAmGgAqeSC2538vuN7wEqMfYMvQ==} + + '@turf/center@7.3.5': + resolution: {integrity: sha512-eub5/Kfdmn89ZqwCONHI7astmTDEtN5M6+JfOkgoSyhKKFhUJYNxUyH1F/vCtIP7j1K369Vs4L9TYiuGapvIKQ==} + + '@turf/centroid@7.3.5': + resolution: {integrity: sha512-hkWaqwGFdOn6Tf0EWfn2yn1XZ1FWE1h2C5ZWstDMu/FxYO5DB+YjlmOFPl4K6SmSOEgdV07eK2vDCyPeTHqKGA==} + + '@turf/circle@7.3.5': + resolution: {integrity: sha512-Tse7GJrx0rxaQ5BdY6pHZ9HFPrZwRMry2yaqq94UsUyonhy1m7U2icB3Zp4M8o4XjHIGTCq9i2BYcGJram51Sw==} + + '@turf/clean-coords@7.3.5': + resolution: {integrity: sha512-e0ZTqVWiQaCI/b8EFb+HAS8lCDomWafAKxQuIv0IYks0GwOlVTDWTwsY2RX2685j2Y+QssqOsyHsPZCtAjc3YQ==} + + '@turf/clone@7.3.5': + resolution: {integrity: sha512-qfIaHj3410QEcTpiCRnTzhq8YrUp2gWrUIPLBAEFykopNxJkq1du1VrRzvuAo36ap2UV7KppkS6wGNypbcxswQ==} + + '@turf/clusters-dbscan@7.3.5': + resolution: {integrity: sha512-xdc0ccv2fyiUSWrJYJFE6RTluf8oVCB0/aCOdUD/ZvtG3eyqGIXMRMzAR1PujQHjBWtI+ndD4Eq+DqiGukGK+g==} + + '@turf/clusters-kmeans@7.3.5': + resolution: {integrity: sha512-MnKymdmL7vy4TR5CLkcNkNgsJP8ZBEiWkqnRYBJLq/hFoppTvXxKvkRzftWtLfkIWb5oQ2XMvBh8BgALN22d5A==} + + '@turf/clusters@7.3.5': + resolution: {integrity: sha512-ZYQSCxElarAaG4azNieZ0ylX1sietkHIVAZv6H5JfSz/EXbAekQIom/isoynfDl/jVyNonDT7UrDZdCIjKQ2Gg==} + + '@turf/collect@7.3.5': + resolution: {integrity: sha512-ddcBDdnM2Rwjfedxsbjvb7Zhoqo6uCTcnaHvu3ej/g+Z9iJ/K2wkRWhEUVAg/wppso5io6qEPmmPpNlefePt+w==} + + '@turf/combine@7.3.5': + resolution: {integrity: sha512-olQH6WmLl3XAalbpiz7RSRr4/mogan38gvgDlo37ypW1ckeBUi+2TX5HgJUZq4wxa2gMlny72QYkqY9zW4Jw+A==} + + '@turf/concave@7.3.5': + resolution: {integrity: sha512-T496U4K5mXsJXTKjnf7eW+4SYoDP0bXWhpcfpWuCAaDJy8n1Q8Dbslj7wqrWd2lqIhulVRF+3zWAh0bJS34L5g==} + + '@turf/convex@7.3.5': + resolution: {integrity: sha512-d/pq86he+/GB/2ObuBHapeT15QFsCPhhGab3uE4YjogLMbD8qtu0sRGF+cvvPRDNuCLycOBL/xgFLnf9SteYlA==} + + '@turf/destination@7.3.5': + resolution: {integrity: sha512-x6ylChhOlIbucRSw7wF6z2gSEqqQl+dE0nSH5AL/ojZkqqGYahiw+2P4A8ZMuDM6rzH+FIqRYDes0o4nSArZCw==} + + '@turf/difference@7.3.5': + resolution: {integrity: sha512-iDyWYCvgS3vgB8W1ai2cvfJaTq9bOt1QghiVkCNIyccF97CgtYJzenREVVUlp8qU9lJlbQ/ameyKvXPA1uOAlA==} + + '@turf/directional-mean@7.3.5': + resolution: {integrity: sha512-Fm3rVgX7xiCL8Ed68dZpUl5NEAgEpaUdkAaZLvhedfUmKcuXcfBwX8RebHwNWctxcvKVOhoAMSlogpV33JnKdQ==} + + '@turf/dissolve@7.3.5': + resolution: {integrity: sha512-6kZTc8rbGuBqxWW8iK1sJZC8r7vr5uWdv7nsMJ0eX8/g0mTKNgSGXo14hYqp2GN4bE7JzpAgpFeSX8Xu1psxlQ==} + + '@turf/distance-weight@7.3.5': + resolution: {integrity: sha512-GpV2h5ZkbWMdUFe5BWm9lfeLFMnYR8CRj6HiguZBLesarSub6I0UNO1u8UhkRGi26YLGnFlBh7c4KyaakNx1Gg==} + + '@turf/distance@7.3.5': + resolution: {integrity: sha512-uQAC63zg/l91KUxzfhqio7Ii3+UXTrPOVJScIdRj6EO6+9XHI4kC+AdyIS4cPAv14sZfJLIBxzMnzcGrss+kEA==} + + '@turf/ellipse@7.3.5': + resolution: {integrity: sha512-C478LrdvUkjwIVGN6PoYsFp27PuT+W2IH4ZOVt9sd4359hRPFhJ2m+f8jSPfS6rdamdvc/O+h7vNmOIBRP/TeA==} + + '@turf/envelope@7.3.5': + resolution: {integrity: sha512-0Sc2AVx0JZ3MaQ0k6+khplU3wO7bwc1qAQ6Fd+Q4RhIVPY2JKstBdq5ftU1T/BHNf8KK+9y4qbSV2u8hnw/PqA==} + + '@turf/explode@7.3.5': + resolution: {integrity: sha512-Qdd7ehX5AF0DdpJl+JJyxws7jEmsZBRV35wTm+Lyhapuc3yLHU7tN5EqJ+2lVV7RkUgBXEFQV+34pmPLPGQn+w==} + + '@turf/flatten@7.3.5': + resolution: {integrity: sha512-4dDAyoY8wf4UCIJ2lH3JbypmEeqyuRFExHEPu6eJeaOybdpOV9kn3LqB0lsWArizFjJWQNS+0qpv08jD85jSPg==} + + '@turf/flip@7.3.5': + resolution: {integrity: sha512-qDSBFqo5+8yE5gfBCsQZxgj0bGRx6abQg6TgYvg1wvYYHtUJL/0VS+QdDTmxZiYm8N46uNAv9pKvun9MGK+elA==} + + '@turf/geojson-rbush@7.3.5': + resolution: {integrity: sha512-30/hQqc+ErnlcavvDdxGfgm8VtsJDEzSYpf3mPqYxOyI976l49T6+1jCQD5xKswml6o8zZAaTSe6ZcSKF+SCNw==} + + '@turf/great-circle@7.3.5': + resolution: {integrity: sha512-VAio6hwPJIheSzrvsMkLDMHkCfHyOi4H4r1Y2ynb2oMiGiqZjkQ7jIFlRYBcTyO2RnwEOgwM/d3kwRImAwMVBA==} + + '@turf/helpers@7.3.5': + resolution: {integrity: sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==} + + '@turf/hex-grid@7.3.5': + resolution: {integrity: sha512-sPtYXqbNvUxt8h4NzspcoFAVotd/75LgrLxxI84LGIVPCN+fsK1uWwr4a6MAlzfSbWbOYOq7OSWMSSXzHoQzJg==} + + '@turf/interpolate@7.3.5': + resolution: {integrity: sha512-rl5LwK85etpvbSW1VEXp/I85kzgiGviXInrvvhQxzEF9xGKvs1ed/6dc1uy1LsczSr4wUnbdGATzZTF9lFYjIw==} + + '@turf/intersect@7.3.5': + resolution: {integrity: sha512-v11Do9ySbsE08ffiwboQeFKvYByyxzvAz0ls837A9T3rSC+8vKMmK815S+C5v8CBMLNhuBCSgqnOIV3zonNICQ==} + + '@turf/invariant@7.3.5': + resolution: {integrity: sha512-ZVIvsBvjr8lO7WxC5zYNjRsjSDvyGvWkJMjuWaJjTU8x+1tmfNnw3gDX/TI2Sit83gcRYLYkNo23lB/udqx/Hg==} + + '@turf/isobands@7.3.5': + resolution: {integrity: sha512-WX6vpPkM8O8SY7hsijOtj4owVXP24nU33Q0eMhWdZ+YiDmAHgEOQcDhPJLvp0mIbyYj81mU73hdnilf3q9tk/A==} + + '@turf/isolines@7.3.5': + resolution: {integrity: sha512-n5QUX1/Z/PuPVpTUrKhYcKF95L5+nKF8hWznYtG/GsiMXfRqMeAEjTCqgKIgF8T65H4LrvcpLyq8VPQSi7aISw==} + + '@turf/jsts@2.7.2': + resolution: {integrity: sha512-zAezGlwWHPyU0zxwcX2wQY3RkRpwuoBmhhNE9HY9kWhFDkCxZ3aWK5URKwa/SWKJbj9aztO+8vtdiBA28KVJFg==} + + '@turf/kinks@7.3.5': + resolution: {integrity: sha512-dPW8d4vs1v8WMobjyq/TVqajjPwkMsl94IF58yp1UYlmJDQrW4iNRUmI9fFzww+fl7epCKNwY+jZhXf1DRi93w==} + + '@turf/length@7.3.5': + resolution: {integrity: sha512-Bi+vEP54wt1ly3BRcCOP0nd2kGTYEhGk6haQxTpkrqr3XtmqDh8c3NowSgseN2cegIZRjwCOEC8eSsZ0JemJdA==} + + '@turf/line-arc@7.3.5': + resolution: {integrity: sha512-XrPicIoN7XCtiJ7e7ELje7GjMZrBw/nuJnz0mQoCwwHwmX8Oz9oRfb6uaiS8NeR4WBzUVdkmVR/ro0kW4lypog==} + + '@turf/line-chunk@7.3.5': + resolution: {integrity: sha512-z5/EBv79oyNXMYFpFIsA9gw/7TAKoJ9a/Ijo/jBeO47Fr1mV3JLtE3aB2i/nqLTYZWMU7K3Lnzwqt2Rn5Gri/Q==} + + '@turf/line-intersect@7.3.5': + resolution: {integrity: sha512-2Cl4oPsjaDdfIwz/5IRDdG2fNdfp3W6atICm81vnzl/GwURoVP+CLjXJ64QWWzpzIbgX2XprJQTmamByDt5MDw==} + + '@turf/line-offset@7.3.5': + resolution: {integrity: sha512-7tNI+4xKFOTQj720aJI7vuRMyTC+4hAqd7N8AnnZ0EpzH+sBfyrt8rNI/Vf3+d/iY0c9ZNbhU9Qhyb0ckJUdsA==} + + '@turf/line-overlap@7.3.5': + resolution: {integrity: sha512-7lZMWYHuzM6EMlL5pIIi/Nh7GLsM7ilW8/jVyHP1yGfQ0c0YAUoJd/Xy3J2+9v8OkYiZW/t2LdwVoTmCEJLWxg==} + + '@turf/line-segment@7.3.5': + resolution: {integrity: sha512-TM1aCu7utM6fllAEHO8PNqBJZ/uoFJVNp2A0YI7FyWN928hPbacsvNtLeVz/Kq1ZbeqQ1ZIKRxo9FdVjaj8hGg==} + + '@turf/line-slice-along@7.3.5': + resolution: {integrity: sha512-zLOU9mGFXJdbPvA3/zXpDsBmXY2paA7eD6/p0iYiP9OASYO0GDcarwY5K/E0uuEdLrMf8G8YA2cJDcEl9gRgFw==} + + '@turf/line-slice@7.3.5': + resolution: {integrity: sha512-BGw5N4UvjH691J/z1P2S+hWBgCcvbl2/HXaqGvKTijXw5i1vzsZ9m07wLl/qH+i38OJDRMJ/+FkNZnrKpsoXLw==} + + '@turf/line-split@7.3.5': + resolution: {integrity: sha512-GEuy+LdbbaqtYjHk/i1G8sK51wfCdPqTO8uH0dJZ6WlcIcZQfRcKKI4ksFm7NkVyfmw8gXWbpMJD8lO380GFBQ==} + + '@turf/line-to-polygon@7.3.5': + resolution: {integrity: sha512-PNWDN1B0nJRlgA4DAXeYEf53OZSWwsu/rtDB4wxe/1NwfM9zlDVElQ/mtgDPtZpwC2aDKV5+B0vTXfKR/MMIfg==} + + '@turf/mask@7.3.5': + resolution: {integrity: sha512-zs9bBtdANOsSkG7xiLFYforeI2nszXu0QwPv3vkaX747oEVdcyd0nSW81aQRmSWw/fvhXja++8duIVXOIYr4ng==} + + '@turf/meta@7.3.5': + resolution: {integrity: sha512-r+ohqxoyqeigFB0oFrQx/YEHIkOKqcKpCjvZkvZs7Tkv+IFco5MezAd2zd4rzK+0DfFgDP3KpJc7HqrYjvEjhg==} + + '@turf/midpoint@7.3.5': + resolution: {integrity: sha512-y92O2YDDBkZp7jAUuUPgof/HiXHjJSkKjEtQRjWXZcjTlzHd/Fqg6/twarY2wNkENK2EuaaiV9MDy74FeRG2Ow==} + + '@turf/moran-index@7.3.5': + resolution: {integrity: sha512-l/FgZkgPzwAsdj7rtKYWv2rxeTy+Tv8NMk6qSEwKqB4eHqn1TYHcTASWRcZIyipH4LtOJJOl77n7FmKcaDBtSg==} + + '@turf/nearest-neighbor-analysis@7.3.5': + resolution: {integrity: sha512-6vnSqt7OH8zTPdvUxCYnnN86Ci8VS5G3q2G1UrAcrnjTH7DbJ4KvIkRQlv4y6hj53G+bm9cA6TjeJuyP2jAOcg==} + + '@turf/nearest-point-on-line@7.3.5': + resolution: {integrity: sha512-MZn6OkEFZpjS6BNUANfqiHMIbQSivu7TNji3a+OAIrnPJ71vp8cbz0N2aVEa5M7I8ipvxoxAPIV3eqg3h280Vg==} + + '@turf/nearest-point-to-line@7.3.5': + resolution: {integrity: sha512-O27A9dFAqDYBRPhhoLP82Da7Q6rd0fXRR/jwQcBiycjTGdsXJmzxywuR08aDvWiARbJAmohEzdYzk4f9/eWXhA==} + + '@turf/nearest-point@7.3.5': + resolution: {integrity: sha512-qcsbj9fo5CYhGeIDaJORoqiZyjNGu2+Te31MVaFoTTxqqkXypxp9e6HJGvUi2zPd1Zk3oAWXhvm1a+UXw2G56w==} + + '@turf/planepoint@7.3.5': + resolution: {integrity: sha512-+hjECX1hDbol8psuG6iYSwcZHQ+RPJqFIBh3pXKc/pa0cdjZyB/L6q1d8ahnFrQBEpuoO3XVvo2hHN49VOEPjw==} + + '@turf/point-grid@7.3.5': + resolution: {integrity: sha512-aEPnqj/4C9ejNz4uCJKgk6Flux6SxnqxjQHAYPIP5C7ooAB1xRAT1NMnCzxUjjUq1SMtgdZ6skoNfvKNK4Rzrw==} + + '@turf/point-on-feature@7.3.5': + resolution: {integrity: sha512-Y7W+JZJCmm9Qq93NHpk4dVhzAtAk2Uyau2Uk1ttCJ2Jsnuu4dwSjOurpmgDmMUe7yPmzihAUYhMFDumpAja8ZA==} + + '@turf/point-to-line-distance@7.3.5': + resolution: {integrity: sha512-mR1NAIX+JfpYAJQ9u3gpIV37QzYvBOefDP+/16uBCAOM8Fp12goT8l7WdenT0dvB4wPibbqM2+2kyEl5u9XJog==} + + '@turf/point-to-polygon-distance@7.3.5': + resolution: {integrity: sha512-SQPhAlfiuCkIIFos/OPCxtt8iR3BlZqGKzKXLYqt6z8iaICaf2SjMyn4Zsr1oFO+Gy2K1rqandR+kuLTIo8Eqg==} + + '@turf/points-within-polygon@7.3.5': + resolution: {integrity: sha512-TRyVY5Xlx6j72sNIyBaHZNgTbILs2iUDevX5lnCFTiThkzp25BIBBQ77tv2VPilYH+v7+9/0T/pLO37SaVhsQw==} + + '@turf/polygon-smooth@7.3.5': + resolution: {integrity: sha512-dc/dlYFqVBcel6d5HM5tBANh1HfWbJ89lSVLR7YhRX+Y/UABTvbtJCWwxBBiFxFBeRmW7B45nv3jytHUYxQUOA==} + + '@turf/polygon-tangents@7.3.5': + resolution: {integrity: sha512-3/TtCQlXc2Lrgzb+LjwqbtILWan7lRD6P9Nn3edm2xGAZw5WY17+yZfpeySJPfcZhOWten9dXkOwDvSZF5uyWQ==} + + '@turf/polygon-to-line@7.3.5': + resolution: {integrity: sha512-Mat5tvJcW3grpXCNFcMvjHL3d8hO4eoIgF3qYpXj25BHx/S7SJUOgyCV5x3arC0rCfM/cB71VmNDm9k57ec7bw==} + + '@turf/polygonize@7.3.5': + resolution: {integrity: sha512-pD3Zv/392sLlZVKRGUrJ4CKLN/Im+TO6wMCOfm/uiq4F9pEL5R+HPvXTcwEyxbhEPKYn3cylGKt21Wq0OfNQDQ==} + + '@turf/projection@7.3.5': + resolution: {integrity: sha512-G4bejYKT0vCQZryMhEoS9aLmP7ThDg6nb3zi3wPzELiTrGNOd2YgkWVheQDGCk4hcqEIWZc9fI2alaRSSkkLVw==} + + '@turf/quadrat-analysis@7.3.5': + resolution: {integrity: sha512-e5Am3cJuiP43f89Xv7n9cv3Z4P0I17zBvQPvhj6UowpRbiYoD4TKHfOr2PWHLYUkXjQ+vKY5CwiWvCYbfj3BIg==} + + '@turf/random@7.3.5': + resolution: {integrity: sha512-Fid43jfmQpvrpr/wrUaW9hr66ukPqfZPuwzEt3gfCx6mAVpFWbCPx2yRuVlLNiRkMgmKTphFfh6267UCPOSnCg==} + + '@turf/rectangle-grid@7.3.5': + resolution: {integrity: sha512-SVtXOJIz7FYaRUinxb0HfE/GNSJU6eU9tlKQaERDo/vG7wjPoTCDvnH8p4BdE5GRdXZMjvBUhtNdMj+M3rGRjQ==} + + '@turf/rewind@7.3.5': + resolution: {integrity: sha512-4AZdDh55JeCoKWLS5AC6MuXqAvoqSpj2WigtowtA3JIJ/1J4SclRrV6BGq/Xemwm5yKtRePHazBVUmG5uU75og==} + + '@turf/rhumb-bearing@7.3.5': + resolution: {integrity: sha512-pYjBAuQTND0+6Y+v+zlQ7Y68SGjP4iG8qJ5QKjFRbB/yeorTY3m9yiXIN4lSyno3TPzEgBeNULuo26H6ygDyng==} + + '@turf/rhumb-destination@7.3.5': + resolution: {integrity: sha512-znICdPBtZq5EKh/Qu0TkiMyNhqiYfM2VUlFOWa7iegCWe1E+X7q/f6rlZ5TcmYVyLZ95XZ6eciDNmgVmpHVWaw==} + + '@turf/rhumb-distance@7.3.5': + resolution: {integrity: sha512-dBFxmKrjRaAdwc4SCmGyAS2BDPCH35IBNl++Ypd1RB8JR2D3khl3zrTvxrlJ5qoN1WDvyPbvDYCrt2UnTX+8Nw==} + + '@turf/sample@7.3.5': + resolution: {integrity: sha512-ayl/QlDAkqIDJjbzcBeAsMzFmIDanQP4xXdNKZmnYg83FhvH/Sgu7mMNNhrYwCVMWrmOicviDHu3xKuJ6jVnMA==} + + '@turf/sector@7.3.5': + resolution: {integrity: sha512-9mtBorGPZfbZI2MoI0nkN5ogmbCz/NLpHdEM0UwwWiOW430iPhwZ649DXH32lDGerfzREX10vpamX8v1P9YVrw==} + + '@turf/shortest-path@7.3.5': + resolution: {integrity: sha512-RmrfdDVTuBsHDNr88tGMRmIdJNFTdna3nQWRF8yFsgKR9LhZ4MWqebL24eQFn2hkyclL7O6lyPpOEJJtQxvcDw==} + + '@turf/simplify@7.3.5': + resolution: {integrity: sha512-9wzxlRA+0yNALeqyXNHFgj+8ebsg2aKdMrWRiSMS+ZqbiknZ/mCARiDYqM2Qz8TgTqdrNt53ze4o1vS6WeJrJw==} + + '@turf/square-grid@7.3.5': + resolution: {integrity: sha512-mcwefBumsO3nwRG4nPfmXsq7YqHOsa71Z3h4JwWQn/XOrhV/8l1/QX3IAIx1qUWC2RqRMOImt3et5mlc+g2SxQ==} + + '@turf/square@7.3.5': + resolution: {integrity: sha512-zUh9cxlZ4bPkSK2XynY26JSLDVy8oUss94mXACqSGrGjv308q3Voj4dzvfeh0E/Q3PQ3D8GJRZECXdCB/PU78Q==} + + '@turf/standard-deviational-ellipse@7.3.5': + resolution: {integrity: sha512-CIJaQ61bjmxxqi5CpRLWAwxnbeHcG6e7esK2IX2DXBIE/7p/F7Sk9F2GOAL6vt1o29GnmzU2APHZvTX/YKcLbw==} + + '@turf/tag@7.3.5': + resolution: {integrity: sha512-jwLOP7ZFfOcMPbK+0puT0SMOs0urSKYSYax7G4LDtZ9oPFAicVJtr2K0OB/rgmdoTK4VfUwb2nVZUdYAVnXtAw==} + + '@turf/tesselate@7.3.5': + resolution: {integrity: sha512-MI+pSkehJyZmbl2L5/43B9DlD6MEDcr63pW/LDSXYRDoRUXtSGY/NAAibIQ0gMAr8VxsimGCZKSuGMNUZdsuRQ==} + + '@turf/tin@7.3.5': + resolution: {integrity: sha512-70747SmLQttt+ywq+NmMqmkHdXsinO57SjHNFKX6G6qHuvxUu48vN7Kf3zjkqGAp2kQnu38OOqB4QPus6RdUqw==} + + '@turf/transform-rotate@7.3.5': + resolution: {integrity: sha512-WXkteI0DihwCukZesVXVVYpsoyftYoiBtq1b+u1Dz4HyATK25zfEeWChlgRtApbiePF6uqG7bSQS+K8vjC4c0A==} + + '@turf/transform-scale@7.3.5': + resolution: {integrity: sha512-eAmey/LtJVT6WlCMULsnd+sCAOwCezG6lVP67qN5HARZ8ft+b7yBiU4FC+IGXbVsrdRcCRLSzoQc6K0fROoo2Q==} + + '@turf/transform-translate@7.3.5': + resolution: {integrity: sha512-OMQLOFLIjqeDNARaa2kdh1AgvWKFgq41/I6k3CAaj1UcB4javpVFMlcjRJY+pL2oZtMRZRcUZxhO+zSNl6p83Q==} + + '@turf/triangle-grid@7.3.5': + resolution: {integrity: sha512-oiwtTm+yqZwuODOSEyLSQSFaZFyjC6kgftUFFW6kLGQtm+Fw1GjxwS7QjiY55GRWxgfgbg2l1iNZNgfsCiPQWA==} + + '@turf/truncate@7.3.5': + resolution: {integrity: sha512-Qx2iv3KIqKuDAUduMfaJ5fFegEWBeRve5zePalRevS16bMUqEX+jnKPK9fWGyUuPqT61qP1Kybz0PTWPbUbljQ==} + + '@turf/turf@7.3.5': + resolution: {integrity: sha512-l5Z1ZFEizN9p5GxX3mzUGf+i4t7AP3YpWcNdf9+kIzJcQD3eYuGBabj2hLrfrluqFJ+uxsuo4RgPtortQ9Dwpg==} + + '@turf/union@7.3.5': + resolution: {integrity: sha512-/FSKhl+LX4+M7L/Trmiln0CDPWS8vCneGnQktt1o5XbCY/zIpH1JdxHEBFXhFZg4beAyXCz0uuxRyW9N/DH+KA==} + + '@turf/unkink-polygon@7.3.5': + resolution: {integrity: sha512-7MwKCm7sPHVF4xBO/3s08/DtA/09UEBXaLNnm8/RUq3abS5zZ9PnakLsd36J18IHDscM6RmH7IZPLSwYh4TLcQ==} + + '@turf/voronoi@7.3.5': + resolution: {integrity: sha512-v51D9H+er/K5lP+rBs7jIBEXTFhl0FQOZn4mfhb7brN5sGGDmnfEFOaxIYOiJN4Qco1GtFD2Tq0NgZ8+dmJmEA==} + '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} + '@types/d3-voronoi@1.1.12': + resolution: {integrity: sha512-DauBl25PKZZ0WVJr42a6CNvI6efsdzofl9sajqZr2Gf5Gu733WkDdUGiPkUHXiUvYGzNNlFQde2wdZdfQPG+yw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -1350,6 +1704,9 @@ packages: '@types/geojson@7946.0.16': resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} + '@types/kdbush@3.0.5': + resolution: {integrity: sha512-tdJz7jaWFu4nR+8b2B+CdPZ6811ighYylWsu2hpsivapzW058yP0KdfZuNY89IiRe5jbKvBGXN3LQdN2KPXVdQ==} + '@types/leaflet@1.9.21': resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} @@ -1438,6 +1795,10 @@ packages: resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} + arc@0.2.0: + resolution: {integrity: sha512-8NFOo126uYKQJyXNSLY/jSklgfLQL+XWAcPXGo876JwEQ8nSOPXWNI3TV2jLZMN8QEw8uksJ1ZwS4npjBca8MA==} + engines: {node: '>=0.4.0'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1458,6 +1819,9 @@ packages: bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + body-parser@2.2.2: resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} engines: {node: '>=18'} @@ -1549,6 +1913,12 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + concaveman@1.2.1: + resolution: {integrity: sha512-PwZYKaM/ckQSa8peP5JpVr7IMJ4Nn/MHIaWUjP4be+KoZ7Botgs8seAZGpmaOM+UZXawcdYRao/px9ycrCihHw==} + content-disposition@1.0.1: resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} engines: {node: '>=18'} @@ -1594,6 +1964,15 @@ packages: resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} engines: {node: '>=20'} + d3-array@1.2.4: + resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} + + d3-geo@1.7.1: + resolution: {integrity: sha512-O4AempWAr+P5qbk2bC2FuN/sDW4z+dN2wDf9QV3bxQt4M5HfOEeXLgJ/UKQW0+o1Dj8BE+L5kiDbdWUMjsmQpw==} + + d3-voronoi@1.1.2: + resolution: {integrity: sha512-RhGS1u2vavcO7ay7ZNAPo4xeDh/VYeGof3x5ZLJBQgYhLegxr3s5IykvWmJ94FTU6mcbtp4sloqZ54mP6R4Utw==} + data-urls@7.0.0: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -1635,6 +2014,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + earcut@2.2.4: + resolution: {integrity: sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -1779,6 +2161,12 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + geojson-equality-ts@1.0.2: + resolution: {integrity: sha512-h3Ryq+0mCSN/7yLs0eDgrZhvc9af23o/QuC4aTiuuzP/MRCtd6mf5rLsLRY44jX0RPUfM8c4GqERQmlUxPGPoQ==} + + geojson-polygon-self-intersections@1.2.2: + resolution: {integrity: sha512-6XRNF4CsRHYmR9z5YuIk5f/aOototnDf0dgMqYGcS7y1l57ttt6MAIAxl3rXyas6lq1HEbTuLMh4PgvO+OV42w==} + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1960,6 +2348,10 @@ packages: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} + jsts@2.7.1: + resolution: {integrity: sha512-x2wSZHEBK20CY+Wy+BPE7MrFQHW6sIsdaGUMEqmGAio+3gFzQaBYPwLRonUfQf9Ak8pBieqj9tUofX1+WtAEIg==} + engines: {node: '>= 12'} + leaflet-indoor@1.0.3: resolution: {integrity: sha512-sSeezQXNXU7RFEbpD5RTJx1vULbU3teA48kF9N3mBdw7tBSAMbGnDXacV7Ctox7XR2ycLclsf+Xyd4FEAVWHtA==} @@ -2220,6 +2612,15 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} + point-in-polygon-hao@1.2.4: + resolution: {integrity: sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==} + + point-in-polygon@1.1.0: + resolution: {integrity: sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw==} + + polyclip-ts@0.16.8: + resolution: {integrity: sha512-JPtKbDRuPEuAjuTdhR62Gph7Is2BS1Szx69CFOO3g71lpJDFo78k4tFyi+qFOMVPePEzdSKkpGU3NBXPHHjvKQ==} + postcss-media-query-parser@0.2.3: resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} @@ -2258,6 +2659,12 @@ packages: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} + quickselect@1.1.1: + resolution: {integrity: sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==} + + quickselect@2.0.0: + resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -2266,6 +2673,12 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} + rbush@2.0.2: + resolution: {integrity: sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==} + + rbush@3.0.1: + resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -2292,6 +2705,12 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + robust-predicates@2.0.4: + resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==} + + robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + rolldown@1.0.0-rc.4: resolution: {integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2376,6 +2795,9 @@ packages: resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} engines: {node: ^20.17.0 || >=22.9.0} + skmeans@0.9.7: + resolution: {integrity: sha512-hNj1/oZ7ygsfmPZ7ZfN5MUBRoGg1gtpnImuJBgLO0ljQ67DtJuiQaiYdS4lUA6s0KCwnPhGivtC/WRwIZLkHyg==} + slice-ansi@7.1.2: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} @@ -2420,6 +2842,9 @@ packages: spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + splaytree-ts@1.0.2: + resolution: {integrity: sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA==} + ssri@13.0.1: resolution: {integrity: sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==} engines: {node: ^20.17.0 || >=22.9.0} @@ -2458,6 +2883,9 @@ packages: resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} + sweepline-intersections@1.5.0: + resolution: {integrity: sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==} + symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} @@ -2476,6 +2904,9 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} + tinyqueue@2.0.3: + resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -2491,6 +2922,14 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + topojson-client@3.1.0: + resolution: {integrity: sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==} + hasBin: true + + topojson-server@3.0.1: + resolution: {integrity: sha512-/VS9j/ffKr2XAOjlZ9CgyyeLmgJ9dMwq6Y0YEON8O7p/tGGk+dCWnrE03zEdu7i4L7YsFZLEPZPzCvcB7lEEXw==} + hasBin: true + tough-cookie@6.0.1: resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} @@ -3793,6 +4232,1142 @@ snapshots: '@tufjs/canonical-json': 2.0.0 minimatch: 10.2.5 + '@turf/along@7.3.5': + dependencies: + '@turf/bearing': 7.3.5 + '@turf/destination': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/angle@7.3.5': + dependencies: + '@turf/bearing': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/rhumb-bearing': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/area@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/bbox-clip@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/bbox-polygon@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/bbox@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/bearing@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/bezier-spline@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-clockwise@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-concave@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-contains@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/boolean-point-on-line': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-split': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-crosses@7.3.5': + dependencies: + '@turf/boolean-equal': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-intersect': 7.3.5 + '@turf/polygon-to-line': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-disjoint@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/line-intersect': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/polygon-to-line': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-equal@7.3.5': + dependencies: + '@turf/clean-coords': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + geojson-equality-ts: 1.0.2 + tslib: 2.8.1 + + '@turf/boolean-intersects@7.3.5': + dependencies: + '@turf/boolean-disjoint': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-overlap@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-intersect': 7.3.5 + '@turf/line-overlap': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + geojson-equality-ts: 1.0.2 + tslib: 2.8.1 + + '@turf/boolean-parallel@7.3.5': + dependencies: + '@turf/clean-coords': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/line-segment': 7.3.5 + '@turf/rhumb-bearing': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-point-in-polygon@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + point-in-polygon-hao: 1.2.4 + tslib: 2.8.1 + + '@turf/boolean-point-on-line@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-touches@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/boolean-point-on-line': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/boolean-valid@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/boolean-crosses': 7.3.5 + '@turf/boolean-disjoint': 7.3.5 + '@turf/boolean-overlap': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/boolean-point-on-line': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-intersect': 7.3.5 + '@types/geojson': 7946.0.16 + geojson-polygon-self-intersections: 1.2.2 + tslib: 2.8.1 + + '@turf/boolean-within@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/boolean-point-on-line': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-split': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/buffer@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/center': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/jsts': 2.7.2 + '@turf/meta': 7.3.5 + '@turf/projection': 7.3.5 + '@types/geojson': 7946.0.16 + d3-geo: 1.7.1 + + '@turf/center-mean@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/center-median@7.3.5': + dependencies: + '@turf/center-mean': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/center-of-mass@7.3.5': + dependencies: + '@turf/centroid': 7.3.5 + '@turf/convex': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/center@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/centroid@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/circle@7.3.5': + dependencies: + '@turf/destination': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/clean-coords@7.3.5': + dependencies: + '@turf/boolean-point-on-line': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/clone@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/clusters-dbscan@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + rbush: 3.0.1 + tslib: 2.8.1 + + '@turf/clusters-kmeans@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + skmeans: 0.9.7 + tslib: 2.8.1 + + '@turf/clusters@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/collect@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + rbush: 3.0.1 + tslib: 2.8.1 + + '@turf/combine@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/concave@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/tin': 7.3.5 + '@types/geojson': 7946.0.16 + topojson-client: 3.1.0 + topojson-server: 3.0.1 + tslib: 2.8.1 + + '@turf/convex@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + concaveman: 1.2.1 + tslib: 2.8.1 + + '@turf/destination@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/difference@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + polyclip-ts: 0.16.8 + tslib: 2.8.1 + + '@turf/directional-mean@7.3.5': + dependencies: + '@turf/bearing': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/destination': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/length': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/dissolve@7.3.5': + dependencies: + '@turf/flatten': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + polyclip-ts: 0.16.8 + tslib: 2.8.1 + + '@turf/distance-weight@7.3.5': + dependencies: + '@turf/centroid': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/distance@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/ellipse@7.3.5': + dependencies: + '@turf/destination': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/transform-rotate': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/envelope@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/bbox-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/explode@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/flatten@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/flip@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/geojson-rbush@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + rbush: 3.0.1 + tslib: 2.8.1 + + '@turf/great-circle@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + arc: 0.2.0 + tslib: 2.8.1 + + '@turf/helpers@7.3.5': + dependencies: + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/hex-grid@7.3.5': + dependencies: + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/intersect': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/interpolate@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/hex-grid': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/point-grid': 7.3.5 + '@turf/square-grid': 7.3.5 + '@turf/triangle-grid': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/intersect@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + polyclip-ts: 0.16.8 + tslib: 2.8.1 + + '@turf/invariant@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/isobands@7.3.5': + dependencies: + '@turf/area': 7.3.5 + '@turf/bbox': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/explode': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/isolines@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/jsts@2.7.2': + dependencies: + jsts: 2.7.1 + + '@turf/kinks@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/length@7.3.5': + dependencies: + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-arc@7.3.5': + dependencies: + '@turf/circle': 7.3.5 + '@turf/destination': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-chunk@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/length': 7.3.5 + '@turf/line-slice-along': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-intersect@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + sweepline-intersections: 1.5.0 + tslib: 2.8.1 + + '@turf/line-offset@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-overlap@7.3.5': + dependencies: + '@turf/boolean-point-on-line': 7.3.5 + '@turf/geojson-rbush': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-segment': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/nearest-point-on-line': 7.3.5 + '@types/geojson': 7946.0.16 + fast-deep-equal: 3.1.3 + tslib: 2.8.1 + + '@turf/line-segment@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-slice-along@7.3.5': + dependencies: + '@turf/bearing': 7.3.5 + '@turf/destination': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-slice@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/nearest-point-on-line': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-split@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/geojson-rbush': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-intersect': 7.3.5 + '@turf/line-segment': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/nearest-point-on-line': 7.3.5 + '@turf/truncate': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/line-to-polygon@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/mask@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + polyclip-ts: 0.16.8 + tslib: 2.8.1 + + '@turf/meta@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/midpoint@7.3.5': + dependencies: + '@turf/bearing': 7.3.5 + '@turf/destination': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/moran-index@7.3.5': + dependencies: + '@turf/distance-weight': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/nearest-neighbor-analysis@7.3.5': + dependencies: + '@turf/area': 7.3.5 + '@turf/bbox': 7.3.5 + '@turf/bbox-polygon': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/nearest-point': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/nearest-point-on-line@7.3.5': + dependencies: + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/nearest-point-to-line@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/point-to-line-distance': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/nearest-point@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/planepoint@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/point-grid@7.3.5': + dependencies: + '@turf/boolean-within': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/point-on-feature@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/center': 7.3.5 + '@turf/explode': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/nearest-point': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/point-to-line-distance@7.3.5': + dependencies: + '@turf/bearing': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/nearest-point-on-line': 7.3.5 + '@turf/projection': 7.3.5 + '@turf/rhumb-bearing': 7.3.5 + '@turf/rhumb-distance': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/point-to-polygon-distance@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/point-to-line-distance': 7.3.5 + '@turf/polygon-to-line': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/points-within-polygon@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/polygon-smooth@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/polygon-tangents@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/boolean-within': 7.3.5 + '@turf/explode': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/nearest-point': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/polygon-to-line@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/polygonize@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/envelope': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/projection@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/quadrat-analysis@7.3.5': + dependencies: + '@turf/area': 7.3.5 + '@turf/bbox': 7.3.5 + '@turf/bbox-polygon': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/point-grid': 7.3.5 + '@turf/random': 7.3.5 + '@turf/square-grid': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/random@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/rectangle-grid@7.3.5': + dependencies: + '@turf/boolean-intersects': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/rewind@7.3.5': + dependencies: + '@turf/boolean-clockwise': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/rhumb-bearing@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/rhumb-destination@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/rhumb-distance@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/sample@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/sector@7.3.5': + dependencies: + '@turf/circle': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/line-arc': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/shortest-path@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/bbox-polygon': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/clean-coords': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/transform-scale': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/simplify@7.3.5': + dependencies: + '@turf/clean-coords': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/square-grid@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/rectangle-grid': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/square@7.3.5': + dependencies: + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/standard-deviational-ellipse@7.3.5': + dependencies: + '@turf/center-mean': 7.3.5 + '@turf/ellipse': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/points-within-polygon': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/tag@7.3.5': + dependencies: + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/tesselate@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + earcut: 2.2.4 + tslib: 2.8.1 + + '@turf/tin@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/transform-rotate@7.3.5': + dependencies: + '@turf/centroid': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/rhumb-bearing': 7.3.5 + '@turf/rhumb-destination': 7.3.5 + '@turf/rhumb-distance': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/transform-scale@7.3.5': + dependencies: + '@turf/bbox': 7.3.5 + '@turf/center': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/rhumb-bearing': 7.3.5 + '@turf/rhumb-destination': 7.3.5 + '@turf/rhumb-distance': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/transform-translate@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/rhumb-destination': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/triangle-grid@7.3.5': + dependencies: + '@turf/distance': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/intersect': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/truncate@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + tslib: 2.8.1 + + '@turf/turf@7.3.5': + dependencies: + '@turf/along': 7.3.5 + '@turf/angle': 7.3.5 + '@turf/area': 7.3.5 + '@turf/bbox': 7.3.5 + '@turf/bbox-clip': 7.3.5 + '@turf/bbox-polygon': 7.3.5 + '@turf/bearing': 7.3.5 + '@turf/bezier-spline': 7.3.5 + '@turf/boolean-clockwise': 7.3.5 + '@turf/boolean-concave': 7.3.5 + '@turf/boolean-contains': 7.3.5 + '@turf/boolean-crosses': 7.3.5 + '@turf/boolean-disjoint': 7.3.5 + '@turf/boolean-equal': 7.3.5 + '@turf/boolean-intersects': 7.3.5 + '@turf/boolean-overlap': 7.3.5 + '@turf/boolean-parallel': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/boolean-point-on-line': 7.3.5 + '@turf/boolean-touches': 7.3.5 + '@turf/boolean-valid': 7.3.5 + '@turf/boolean-within': 7.3.5 + '@turf/buffer': 7.3.5 + '@turf/center': 7.3.5 + '@turf/center-mean': 7.3.5 + '@turf/center-median': 7.3.5 + '@turf/center-of-mass': 7.3.5 + '@turf/centroid': 7.3.5 + '@turf/circle': 7.3.5 + '@turf/clean-coords': 7.3.5 + '@turf/clone': 7.3.5 + '@turf/clusters': 7.3.5 + '@turf/clusters-dbscan': 7.3.5 + '@turf/clusters-kmeans': 7.3.5 + '@turf/collect': 7.3.5 + '@turf/combine': 7.3.5 + '@turf/concave': 7.3.5 + '@turf/convex': 7.3.5 + '@turf/destination': 7.3.5 + '@turf/difference': 7.3.5 + '@turf/directional-mean': 7.3.5 + '@turf/dissolve': 7.3.5 + '@turf/distance': 7.3.5 + '@turf/distance-weight': 7.3.5 + '@turf/ellipse': 7.3.5 + '@turf/envelope': 7.3.5 + '@turf/explode': 7.3.5 + '@turf/flatten': 7.3.5 + '@turf/flip': 7.3.5 + '@turf/geojson-rbush': 7.3.5 + '@turf/great-circle': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/hex-grid': 7.3.5 + '@turf/interpolate': 7.3.5 + '@turf/intersect': 7.3.5 + '@turf/invariant': 7.3.5 + '@turf/isobands': 7.3.5 + '@turf/isolines': 7.3.5 + '@turf/kinks': 7.3.5 + '@turf/length': 7.3.5 + '@turf/line-arc': 7.3.5 + '@turf/line-chunk': 7.3.5 + '@turf/line-intersect': 7.3.5 + '@turf/line-offset': 7.3.5 + '@turf/line-overlap': 7.3.5 + '@turf/line-segment': 7.3.5 + '@turf/line-slice': 7.3.5 + '@turf/line-slice-along': 7.3.5 + '@turf/line-split': 7.3.5 + '@turf/line-to-polygon': 7.3.5 + '@turf/mask': 7.3.5 + '@turf/meta': 7.3.5 + '@turf/midpoint': 7.3.5 + '@turf/moran-index': 7.3.5 + '@turf/nearest-neighbor-analysis': 7.3.5 + '@turf/nearest-point': 7.3.5 + '@turf/nearest-point-on-line': 7.3.5 + '@turf/nearest-point-to-line': 7.3.5 + '@turf/planepoint': 7.3.5 + '@turf/point-grid': 7.3.5 + '@turf/point-on-feature': 7.3.5 + '@turf/point-to-line-distance': 7.3.5 + '@turf/point-to-polygon-distance': 7.3.5 + '@turf/points-within-polygon': 7.3.5 + '@turf/polygon-smooth': 7.3.5 + '@turf/polygon-tangents': 7.3.5 + '@turf/polygon-to-line': 7.3.5 + '@turf/polygonize': 7.3.5 + '@turf/projection': 7.3.5 + '@turf/quadrat-analysis': 7.3.5 + '@turf/random': 7.3.5 + '@turf/rectangle-grid': 7.3.5 + '@turf/rewind': 7.3.5 + '@turf/rhumb-bearing': 7.3.5 + '@turf/rhumb-destination': 7.3.5 + '@turf/rhumb-distance': 7.3.5 + '@turf/sample': 7.3.5 + '@turf/sector': 7.3.5 + '@turf/shortest-path': 7.3.5 + '@turf/simplify': 7.3.5 + '@turf/square': 7.3.5 + '@turf/square-grid': 7.3.5 + '@turf/standard-deviational-ellipse': 7.3.5 + '@turf/tag': 7.3.5 + '@turf/tesselate': 7.3.5 + '@turf/tin': 7.3.5 + '@turf/transform-rotate': 7.3.5 + '@turf/transform-scale': 7.3.5 + '@turf/transform-translate': 7.3.5 + '@turf/triangle-grid': 7.3.5 + '@turf/truncate': 7.3.5 + '@turf/union': 7.3.5 + '@turf/unkink-polygon': 7.3.5 + '@turf/voronoi': 7.3.5 + '@types/geojson': 7946.0.16 + '@types/kdbush': 3.0.5 + tslib: 2.8.1 + + '@turf/union@7.3.5': + dependencies: + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + polyclip-ts: 0.16.8 + tslib: 2.8.1 + + '@turf/unkink-polygon@7.3.5': + dependencies: + '@turf/area': 7.3.5 + '@turf/boolean-point-in-polygon': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/meta': 7.3.5 + '@types/geojson': 7946.0.16 + rbush: 3.0.1 + tslib: 2.8.1 + + '@turf/voronoi@7.3.5': + dependencies: + '@turf/clone': 7.3.5 + '@turf/helpers': 7.3.5 + '@turf/invariant': 7.3.5 + '@types/d3-voronoi': 1.1.12 + '@types/geojson': 7946.0.16 + d3-voronoi: 1.1.2 + tslib: 2.8.1 + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -3803,12 +5378,16 @@ snapshots: '@types/deep-eql': 4.0.2 assertion-error: 2.0.1 + '@types/d3-voronoi@1.1.12': {} + '@types/deep-eql@4.0.2': {} '@types/estree@1.0.8': {} '@types/geojson@7946.0.16': {} + '@types/kdbush@3.0.5': {} + '@types/leaflet@1.9.21': dependencies: '@types/geojson': 7946.0.16 @@ -3911,6 +5490,8 @@ snapshots: ansi-styles@6.2.3: {} + arc@0.2.0: {} + assertion-error@2.0.1: {} balanced-match@4.0.4: {} @@ -3933,6 +5514,8 @@ snapshots: dependencies: require-from-string: 2.0.2 + bignumber.js@9.3.1: {} + body-parser@2.2.2: dependencies: bytes: 3.1.2 @@ -4033,6 +5616,15 @@ snapshots: colorette@2.0.20: {} + commander@2.20.3: {} + + concaveman@1.2.1: + dependencies: + point-in-polygon: 1.1.0 + rbush: 3.0.1 + robust-predicates: 2.0.4 + tinyqueue: 2.0.3 + content-disposition@1.0.1: {} content-type@1.0.5: {} @@ -4078,6 +5670,14 @@ snapshots: css-tree: 3.2.1 lru-cache: 11.3.2 + d3-array@1.2.4: {} + + d3-geo@1.7.1: + dependencies: + d3-array: 1.2.4 + + d3-voronoi@1.1.2: {} + data-urls@7.0.0: dependencies: whatwg-mimetype: 5.0.0 @@ -4120,6 +5720,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + earcut@2.2.4: {} + ee-first@1.1.1: {} electron-to-chromium@1.5.332: {} @@ -4275,6 +5877,14 @@ snapshots: gensync@1.0.0-beta.2: {} + geojson-equality-ts@1.0.2: + dependencies: + '@types/geojson': 7946.0.16 + + geojson-polygon-self-intersections@1.2.2: + dependencies: + rbush: 2.0.2 + get-caller-file@2.0.5: {} get-east-asian-width@1.5.0: {} @@ -4459,6 +6069,8 @@ snapshots: jsonparse@1.3.1: {} + jsts@2.7.1: {} + leaflet-indoor@1.0.3: {} leaflet@1.9.4: {} @@ -4782,6 +6394,17 @@ snapshots: pkce-challenge@5.0.1: {} + point-in-polygon-hao@1.2.4: + dependencies: + robust-predicates: 3.0.3 + + point-in-polygon@1.1.0: {} + + polyclip-ts@0.16.8: + dependencies: + bignumber.js: 9.3.1 + splaytree-ts: 1.0.2 + postcss-media-query-parser@0.2.3: {} postcss-safe-parser@7.0.1(postcss@8.5.8): @@ -4814,6 +6437,10 @@ snapshots: dependencies: side-channel: 1.1.0 + quickselect@1.1.1: {} + + quickselect@2.0.0: {} + range-parser@1.2.1: {} raw-body@3.0.2: @@ -4823,6 +6450,14 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 + rbush@2.0.2: + dependencies: + quickselect: 1.1.1 + + rbush@3.0.1: + dependencies: + quickselect: 2.0.0 + readdirp@4.1.2: {} readdirp@5.0.0: {} @@ -4840,6 +6475,10 @@ snapshots: rfdc@1.4.1: {} + robust-predicates@2.0.4: {} + + robust-predicates@3.0.3: {} + rolldown@1.0.0-rc.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2): dependencies: '@oxc-project/types': 0.113.0 @@ -5001,6 +6640,8 @@ snapshots: transitivePeerDependencies: - supports-color + skmeans@0.9.7: {} + slice-ansi@7.1.2: dependencies: ansi-styles: 6.2.3 @@ -5046,6 +6687,8 @@ snapshots: spdx-license-ids@3.0.23: {} + splaytree-ts@1.0.2: {} + ssri@13.0.1: dependencies: minipass: 7.1.3 @@ -5083,6 +6726,10 @@ snapshots: dependencies: ansi-regex: 6.2.2 + sweepline-intersections@1.5.0: + dependencies: + tinyqueue: 2.0.3 + symbol-tree@3.2.4: {} tar@7.5.13: @@ -5102,6 +6749,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyqueue@2.0.3: {} + tinyrainbow@3.1.0: {} tldts-core@7.0.28: {} @@ -5112,6 +6761,14 @@ snapshots: toidentifier@1.0.1: {} + topojson-client@3.1.0: + dependencies: + commander: 2.20.3 + + topojson-server@3.0.1: + dependencies: + commander: 2.20.3 + tough-cookie@6.0.1: dependencies: tldts: 7.0.28 diff --git a/src/app/map/geojson.ts b/src/app/map/geojson.ts deleted file mode 100644 index 5435e85..0000000 --- a/src/app/map/geojson.ts +++ /dev/null @@ -1,67 +0,0 @@ -import * as G from 'geojson'; - -// Custom GeoJSON style for the building -export const buildingSytle = { - color: '#d62305', // Red border - weight: 2, // Border width - fillColor: '#d4caca', // Red fill - fillOpacity: 1, // Semi-transparent fill -}; - -// Example GeoJSON data -export const examplePolygon: G.Polygon = { - type: 'Polygon', - coordinates: [ - [ - [8.3897067, 49.0149349], // Southwest corner - [8.3904111, 49.0149078], // Southeast corner - [8.3904345, 49.0151542], // Northeast corner - [8.3897302, 49.0151832], // Northwest corner - [8.3897067, 49.0149349], // Closing the polygon by repeating the first point - ], - ], -}; - -export const buildings: G.FeatureCollection = { - type: 'FeatureCollection', - features: [ - { - type: 'Feature', - properties: { - name: 'E', - building: 'university', - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [8.3897067, 49.0149349], // Southwest corner - [8.3904111, 49.0149078], // Southeast corner - [8.3904345, 49.0151542], // Northeast corner - [8.3897302, 49.0151832], // Northwest corner - [8.3897067, 49.0149349], // Closing the polygon by repeating the first point - ], - ], - }, - }, - { - type: 'Feature', - properties: { - name: 'F', - building: 'university', - }, - geometry: { - type: 'Polygon', - coordinates: [ - [ - [8.3897585, 49.015502], // Southwest corner - [8.3904592, 49.0154731], // Southeast corner - [8.3904833, 49.0157255], // Northeast corner - [8.3897827, 49.0157543], // Northwest corner - [8.3897585, 49.015502], // Closing the polygon by repeating the first point - ], - ], - }, - }, - ], -}; diff --git a/src/app/map/map.ts b/src/app/map/map.ts index 2406cc3..0587b11 100644 --- a/src/app/map/map.ts +++ b/src/app/map/map.ts @@ -4,9 +4,9 @@ import { LeafletModule } from '@bluehalo/ngx-leaflet'; import { center } from '@turf/turf'; import { Overpass } from '../overpass'; import * as L from 'leaflet'; +import * as G from 'geojson'; import * as D from './details'; -import * as E from './geojson'; @Component({ selector: 'app-map', @@ -29,7 +29,7 @@ export class OSMMap implements OnInit { constructor( private overpass: Overpass, - private cdr: ChangeDetectorRef + private cdr: ChangeDetectorRef, ) {} ngOnInit() { @@ -45,11 +45,6 @@ export class OSMMap implements OnInit { layers: [this.osm], zoom: 18, // Zoom level center: this.getCenter(), // Center of the map - maxBounds: L.latLngBounds( - L.latLng(49.014442, 8.387954), // Southwest corner - L.latLng(49.017847, 8.395448), // Northeast corner - ), - maxBoundsViscosity: 1.0, // Prevent panning outside bounds }; this.layerControl = L.control.layers({ @@ -60,73 +55,71 @@ export class OSMMap implements OnInit { onMapReady(map: L.Map) { this.map = map; this.layerControl?.addTo(this.map); - this.loadBuildings().addTo(this.map); + this.queryBuildingData().addTo(this.map); console.log('Map is ready'); } - loadBuildings() { - return L.geoJSON(E.buildings, { - style: E.buildingSytle, - onEachFeature: (feature, layer) => { - layer.on({ - click: (e) => { - this.isFullscreen = !this.isFullscreen; - if (!this.isFullscreen) { - this.map?.setView(this.getCenter(feature.geometry), 20); - this.buildingLayer = this.queryBuildings(feature.properties.name); - this.buildingLayer.addTo(this.map!); - this.details = new D.Details(feature.properties.name, feature.properties.building) - } else { - this.map?.setView(this.getCenter(), 18); - if (this.buildingLayer) { - this.map?.removeLayer(this.buildingLayer); + queryBuildingData() { + // Query the Overpass API for building data and add it to the map as a GeoJSON layer. + + const buildingLayer = new L.LayerGroup(); + + this.overpass.fetchBuildingData().subscribe((data) => { + console.log('Received building data:', data); + L.geoJSON(this.createFeatureCollection(data), { + style: { color: '#d62305', weight: 2, fillColor: '#d4caca', fillOpacity: 1 }, + onEachFeature: (feature, layer) => { + layer.on({ + click: (e) => { + this.isFullscreen = !this.isFullscreen; + if (!this.isFullscreen) { + this.map?.setView(this.getCenter(feature.geometry), 20); + this.buildingLayer = this.queryIndoorData(feature.properties.name); + this.buildingLayer.addTo(this.map!); + this.details = new D.Details(feature.properties.name, feature.properties.building); + } else { + this.map?.setView(this.getCenter(), 18); + if (this.buildingLayer) { + this.map?.removeLayer(this.buildingLayer); + } } - } - console.log('Set isFullscreen to:', this.isFullscreen); - console.log('Clicked on feature:', feature.properties?.name); - this.cdr.detectChanges(); - }, - }); - if (feature.properties && feature.properties.name) { - layer.bindTooltip(feature.properties.name, { - permanent: false, - direction: 'top', + console.log('Set isFullscreen to:', this.isFullscreen); + console.log('Clicked on feature:', feature.properties?.name); + this.cdr.detectChanges(); + }, }); - } - }, + if (feature.properties && feature.properties.name) { + layer.bindTooltip(feature.properties.name, { + permanent: false, + direction: 'top', + }); + } + }, + }).addTo(buildingLayer); }); + return buildingLayer; } - queryBuildings(building_name: string) { + queryIndoorData(building_name: string): L.LayerGroup { // Get the building name from the feature properties and query the Overpass API for detailed building data, // including indoor features. // Create a new LayerGroup to hold the building polygons const resultingLayer = new L.LayerGroup(); + this.overpass.fetchIndoorData(building_name).subscribe((data) => { - console.log('Fetched building data from Overpass API:', data); - - // Create a mapping of node IDs to their coordinates - const nodes: Map = new Map(); - data.elements.forEach((element: any) => { - if (element.type === 'node') { - nodes.set(element.id, new L.LatLng(element.lat, element.lon)); - } - }); - - // Process ways and create polygons - // TODO: Change to features, to also add the meta data of the building, e.g. the name of the room - data.elements.forEach((element: any) => { - if (element.type === 'way') { - const coordinates: L.LatLng[] = []; - element.nodes.forEach((nodeId: number) => { - coordinates.push(nodes.get(nodeId)!); - }); - L.polygon(coordinates, { color: '#999999', fillColor: '#e0e0e0', fillOpacity: 1 }).addTo( - resultingLayer, - ); - } - }); + console.log('Received indoor data for building:', building_name, data); + L.geoJSON(this.createFeatureCollection(data), { + style: { color: '#999999', fillColor: '#e0e0e0', fillOpacity: 1 }, + onEachFeature: (feature, layer) => { + if (feature.properties) { + layer.bindTooltip(feature.properties.ref ?? 'Test', { + permanent: false, + direction: 'top', + }); + } + }, + }).addTo(resultingLayer); }); return resultingLayer; } @@ -142,4 +135,46 @@ export class OSMMap implements OnInit { const result = new L.LatLng(centerPoint[0], centerPoint[1]); return result; } + + private createFeatureCollection(data: any): G.FeatureCollection { + const buildingData: G.FeatureCollection = { + type: 'FeatureCollection', + features: [], + }; + + // Create a mapping of node IDs to their coordinates + const nodes: Map = new Map(); + data.elements.forEach((element: any) => { + if (element.type === 'node') { + nodes.set(element.id, new L.LatLng(element.lat, element.lon)); + } + }); + + // Process ways and create polygons + // TODO: Change to features, to also add the meta data of the building, e.g. the name of the room + data.elements.forEach((element: any) => { + if (element.type === 'way') { + const coordinates: L.LatLng[] = []; + element.nodes.forEach((nodeId: number) => { + coordinates.push(nodes.get(nodeId)!); + }); + buildingData.features.push( + this.createFeature(new Map(Object.entries(element.tags || {})), coordinates), + // this.createFeature(new Map(Object.entries({ name: 'Test' })), coordinates), + ); + } + }); + return buildingData; + } + + private createFeature(properties: Map, coordinates: L.LatLng[]): G.Feature { + return { + type: 'Feature', + properties: Object.fromEntries(properties), + geometry: { + type: 'Polygon', + coordinates: [coordinates.map((coord) => [coord.lng, coord.lat])], + }, + }; + } } diff --git a/src/app/overpass.ts b/src/app/overpass.ts index b0d6a24..31b2845 100644 --- a/src/app/overpass.ts +++ b/src/app/overpass.ts @@ -32,7 +32,7 @@ export class Overpass { const header = { 'Content-Type': 'text/plain' }; const query = ` [out:json][timeout:90]; - nwr["building"]["operator"="Hochschule Karlsruhe"]["name"="${building_name}"](49.014442, 8.387954, 49.017847, 8.395448)->.building; + nwr["building"]["operator"="Hochschule Karlsruhe"]["name"="${building_name}"]->.building; ( nwr["indoor"="room"](area.building); ); @@ -48,7 +48,7 @@ export class Overpass { const query = ` [out:json][timeout:90]; ( - nwr["building"="university"]["operator"="Hochschule Karlsruhe"](49.014442, 8.387954, 49.017847, 8.395448); + way["building"="university"]["operator"="Hochschule Karlsruhe"]; ); (._;>;); out body;