0&&(l=(l=l.map((function(n){return n}))).reverse());for(var x=0,p=l.length-1;x0}function J(n,t){void 0===t&&(t={}),t=Object.assign({},{radius:1,height:2,radialSegments:6},t);for(var r=Math.round(Math.max(4,t.radialSegments)),e=t,i=e.radius,a=e.height,o=360/r/360*Math.PI*2,u=r+1,v=new Float32Array(3*u*2),s=n[0],h=n[1],f=0,l=0,x=3*u,p=2*u,c=[],d=[],g=-1;g1&&c.push(0,g-1,g)}v[f-=3]=v[0],v[f+1]=v[1],v[f+2]=v[2];var A=v.length;v[A-3]=v[0],v[A-2]=v[1],v[A-1]=a;for(var Z=c.length,F=0;F0&&et.text())).then((e=>{new Blob([e],{type:"application/json"}).arrayBuffer().then((e=>{t.postResponse(null,e,[e]),t.abort=!0,i(t)}))})).catch((e=>{console.error(e),t.abort=!0,i(t)}))}t.initialize=function(){},t.onmessage=function(t,e){i({url:t.data,postResponse:e,abort:!1})}}))),t.BaseObject=m,t.BaseObjectTask=yt,t.BaseObjectTaskManager=St,t.ExtrudeUtil=K,t.GeoJSONUtil=k,t.GeoUtil=se,t.IdentifyUtil=xe,t.LineMaterial=f,t.LineUtil=st,t.MergeGeometryUtil=It,t.MergedMixin=de,t.ThreeLayer=Ri,t.ThreeRenderer=Zi,t.geometryExtrude=Pi,t.getFetchDataActor=function(){return o.worker||console.error("maptalks.worker is not defined,You can't use"),Bi||(Bi=new o.worker.Actor(Li)),Bi},t.polyextrude=B,Object.defineProperty(t,"__esModule",{value:!0}),"undefined"!=typeof console&&console.log("maptalks.three v0.35.1")}));
diff --git a/js/script.js b/js/script.js
deleted file mode 100644
index 118e183..0000000
--- a/js/script.js
+++ /dev/null
@@ -1,255 +0,0 @@
-// TODO: Remove TailwindCSS
-const modalScreen = document.getElementById("modalScreen");
-const closeModalBtn = document.getElementById("modal-close");
-const inputSearch = document.getElementById("searchInput");
-
-/**
- * Toggle the modal
- */
-const toggleModal = () =>
- modalScreen.style.display === "block"
- ? (modalScreen.style.display = "none")
- : (modalScreen.style.display = "block");
-
-modalScreen.style.display = "none";
-closeModalBtn.addEventListener("click", toggleModal);
-inputSearch.addEventListener("input", (event) => {
- const { value } = event.target;
- const suggestionsContainer = document.getElementById("suggestions");
-
- if (value.length >= 2) {
- // Display suggestions
- suggestionsContainer.style.display = "block";
-
- // Only keep buildings with non undefined name
- let suggestions = buildings.features.filter(
- (feature) => feature.properties.name !== undefined
- );
- suggestions = suggestions.filter((feature) => {
- const { name, short_name } = feature.properties;
- return (
- name.toLowerCase().includes(value.toLowerCase()) ||
- (short_name && short_name.toLowerCase().includes(value.toLowerCase()))
- );
- });
-
- // Inject suggestions into the DOM
- suggestionsContainer.innerHTML = "";
- suggestions.forEach((suggestion) => {
- const suggestionEl = document.createElement("li");
- suggestionEl.innerHTML = suggestion.properties.name;
- suggestionEl.addEventListener("click", () => {
- // Close suggestions
- suggestionsContainer.style.display = "none";
-
- const { name } = suggestion.properties;
- inputSearch.value = name;
- suggestionsContainer.innerHTML = "";
-
- // Center the map to the building
- const building2d = map
- .getLayer("2d-buildings")
- ._geoList.filter((feature) => feature.properties.name === name)[0];
- map.setCenter(building2d.getCenter());
-
- // Focus on the building and flash the building
- const building3D = map
- .getLayer("3d-buildings")
- .getMeshes()
- .filter(
- (mesh) => mesh.options?.polygon?.properties?.name === name
- )[0];
-
- building3D
- .animateShow({
- duration: 1000,
- easing: "out",
- })
- .play();
- building2d.flash(150, 4);
- });
- suggestionsContainer.appendChild(suggestionEl);
- });
- } else {
- suggestionsContainer.style.display = "none";
- suggestionsContainer.innerHTML = "";
- }
-});
-
-/**
- * Change title and description of modal
- * @param {string} title
- * @param {string} content
- */
-const injectModal = (title, content) => {
- document.getElementById("modalTitle").innerText = title;
- document.getElementById("modalContent").innerHTML = content;
-};
-
-// Tile services
-const TILES = {
- f43D: "https://tile.f4map.com/tiles/f4_3d/{z}/{x}/{y}.png",
- osm: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
- cartoDbVoyager:
- "https://cartodb-basemaps-{s}.global.ssl.fastly.net/rastertiles/voyager_labels_under/{z}/{x}/{y}.png",
-};
-
-const CENTER = [1.468, 43.5696];
-const ZOOM = 18;
-const MINZOOM = ZOOM;
-const MAXZOOM = 20;
-const PITCH = 45;
-const BEARING = 0;
-
-// Map
-const map = new maptalks.Map("map", {
- center: CENTER,
- zoom: ZOOM,
- minZoom: MINZOOM,
- maxZoom: MAXZOOM,
- pitch: PITCH,
- bearing: BEARING,
-
- baseLayer: new maptalks.TileLayer("tile", {
- urlTemplate: TILES.f43D,
- subdomains: ["a", "b", "c", "d"],
- }),
- layers: [
- new maptalks.VectorLayer("bounds"),
- new maptalks.VectorLayer("2d-buildings"),
- ],
- attribution: {
- content:
- '© OpenStreetMap contributors, © CARTO',
- },
-});
-
-// Bounds
-const extent = map.getExtent();
-extent.xmin = 1.464;
-extent.xmax = 1.4715;
-extent.ymin = 43.567;
-extent.ymax = 43.574;
-map.setMaxExtent(extent);
-map.getLayer("bounds").addGeometry(
- new maptalks.Polygon(extent.toArray(), {
- symbol: { polygonOpacity: 0, lineWidth: 0 },
- })
-);
-
-// 2D buildings Layer
-buildings.features.forEach((feature) => {
- const building2D = new maptalks.GeoJSON.toGeometry(feature);
- building2D.setSymbol({
- polygonFill: "#f6efe4",
- });
- building2D.addTo(map.getLayer("2d-buildings"));
-});
-
-// 3D Buildings Layer
-const threeLayer = new maptalks.ThreeLayer("3d-buildings", {
- forceRenderOnMoving: true,
- forceRenderOnRotating: true,
- animation: true,
-});
-threeLayer.prepareToDraw = function (gl, scene, camera) {
- const light = new THREE.DirectionalLight(0xf6efe4, 1);
- light.position.set(1, 0, 1);
- scene.add(light);
-
- buildings.features.forEach(function (building) {
- const height = building.properties.height * 2;
-
- const meshBuilding = threeLayer.toExtrudePolygon(
- building,
- {
- height: height,
- bloom: true,
- top: "#f00",
- asynchronous: true,
- },
- new THREE.MeshPhongMaterial({
- color: 0xffffff,
- })
- );
-
- meshBuilding.on("mouseover", (e) => e.target.setHeight(height * 1.25));
- meshBuilding.on("mouseout", (e) => e.target.setHeight(height));
-
- // Extrude the building on 1st spawn
- meshBuilding.animateShow({
- duration: 3000,
- });
-
- // Display a tooltip when hovering the building
- building.properties.name &&
- meshBuilding.setToolTip(building.properties.name, {
- showTimeout: 0,
- eventsPropagation: true,
- dx: 15,
- dy: 15,
- });
-
- // Display a message box when clicking the building
- building.properties.name &&
- meshBuilding.setInfoWindow({
- title: building.properties.name,
- content: building.properties.description || "Pas de description",
- });
-
- threeLayer.addMesh(meshBuilding);
- });
-};
-map.addLayer(threeLayer);
-
-// Controls
-const up = () => map.panBy([0, 200]);
-const down = () => map.panBy([0, -200]);
-const left = () => map.panBy([200, 0]);
-const right = () => map.panBy([-200, 0]);
-const zoomIn = () => map.setZoom(map.getZoom() + 0.5);
-const zoomOut = () => map.setZoom(map.getZoom() - 0.5);
-const reset = () => {
- map.setCenter(CENTER);
- map.setZoom(ZOOM);
- map.setPitch(PITCH);
- map.setBearing(BEARING);
-};
-
-/**
- * Change the base layer
- * @param {string} tileService
- */
-const changeTileService = (tileService) => {
- const baseLayer = map.getBaseLayer();
- baseLayer.options.urlTemplate = tileService;
- map.setBaseLayer(baseLayer);
-};
-
-// Show or Hide 3D layer based on pitch value
-map.on("pitch", ({ from, to }) => {
- const planeLayer = map.getLayer("2d-buildings");
-
- // Convert to degrees
- to = (to * 180) / Math.PI;
- if (to <= 2) {
- threeLayer.hide();
- planeLayer.show();
- changeTileService(TILES.cartoDbVoyager);
- } else if (from <= 2) {
- threeLayer.show();
- planeLayer.hide();
- changeTileService(TILES.f43D);
- }
-});
-
-/**
- * Toggle the about modal
- */
-const showInfoModal = () => {
- toggleModal();
- injectModal(
- "A Propos",
- "Ce projet a été réalisé par des membres du Club Info de l'INSA Toulouse. Il a pour but de vous permettre de découvrir le campus de l'INSA Toulouse en 2D et 3D.
Pour plus d'informations, n'hésitez pas à contacter le Club Info.
Toute contribution est la bienvenue, vous pouvez retrouver le code source du site sur notre GitHub.
"
- );
-};
diff --git a/json/map.geojson b/json/map.geojson
index 1bdaefa..0e32701 100644
--- a/json/map.geojson
+++ b/json/map.geojson
@@ -1,6 +1,130 @@
{
"type": "FeatureCollection",
"features": [
+ {
+ "type": "Feature",
+ "properties": {
+ "name": "Métro Faculté de Pharmacie",
+ "short_name": "Fac de Pharma",
+ "description": "La station de métro pour toutes tes sorties chez Tonton",
+ "height": 6
+ },
+ "geometry": {
+ "coordinates": [
+ [
+ [
+ 1.464452343556701,
+ 43.56777715718127
+ ],
+ [
+ 1.4644553345412987,
+ 43.56777483785251
+ ],
+ [
+ 1.464506728324153,
+ 43.56777887487121
+ ],
+ [
+ 1.4645110943103248,
+ 43.567782091379
+ ],
+ [
+ 1.4645032146472374,
+ 43.567849479885695
+ ],
+ [
+ 1.4645072028919515,
+ 43.56785522098647
+ ],
+ [
+ 1.4646270237557815,
+ 43.56786431370577
+ ],
+ [
+ 1.4646279208922692,
+ 43.567858317788136
+ ],
+ [
+ 1.464637597218939,
+ 43.56785843930203
+ ],
+ [
+ 1.4646425403996943,
+ 43.56786074329409
+ ],
+ [
+ 1.4646364550079056,
+ 43.567916139888524
+ ],
+ [
+ 1.4646588092282968,
+ 43.567916937974644
+ ],
+ [
+ 1.464670002210113,
+ 43.56792164858874
+ ],
+ [
+ 1.4646839712513042,
+ 43.56793136651234
+ ],
+ [
+ 1.4646918533066469,
+ 43.56794347984726
+ ],
+ [
+ 1.464692178938094,
+ 43.56795308392006
+ ],
+ [
+ 1.4646376972343091,
+ 43.56804331209088
+ ],
+ [
+ 1.4646211939119382,
+ 43.5680416964656
+ ],
+ [
+ 1.4645969769299256,
+ 43.56821827295448
+ ],
+ [
+ 1.4645840051497316,
+ 43.56821661545561
+ ],
+ [
+ 1.464584529436081,
+ 43.56820133111387
+ ],
+ [
+ 1.4645394220914056,
+ 43.56819651079664
+ ],
+ [
+ 1.4645365100687684,
+ 43.5682071376381
+ ],
+ [
+ 1.464463528130068,
+ 43.568200127767454
+ ],
+ [
+ 1.4644654274187587,
+ 43.56819037921994
+ ],
+ [
+ 1.4643950693041177,
+ 43.56818644898584
+ ],
+ [
+ 1.464452343556701,
+ 43.56777715718127
+ ]
+ ]
+ ],
+ "type": "Polygon"
+ }
+ },
{
"type": "Feature",
"properties": {
@@ -12,11 +136,26 @@
"geometry": {
"coordinates": [
[
- [1.4676592625429805, 43.57073829651577],
- [1.4674780647123669, 43.57064287792443],
- [1.4676815658123985, 43.5704355855697],
- [1.467864406018066, 43.570532208093965],
- [1.4676592625429805, 43.57073829651577]
+ [
+ 1.4676592625429805,
+ 43.57073829651577
+ ],
+ [
+ 1.4674780647123669,
+ 43.57064287792443
+ ],
+ [
+ 1.4676815658123985,
+ 43.5704355855697
+ ],
+ [
+ 1.467864406018066,
+ 43.570532208093965
+ ],
+ [
+ 1.4676592625429805,
+ 43.57073829651577
+ ]
]
],
"type": "Polygon"
@@ -33,11 +172,26 @@
"geometry": {
"coordinates": [
[
- [1.467379912968994, 43.571017227831135],
- [1.4671990115851088, 43.57092275499767],
- [1.4674778779674114, 43.57064295549509],
- [1.4676592020865087, 43.570738262285715],
- [1.467379912968994, 43.571017227831135]
+ [
+ 1.467379912968994,
+ 43.571017227831135
+ ],
+ [
+ 1.4671990115851088,
+ 43.57092275499767
+ ],
+ [
+ 1.4674778779674114,
+ 43.57064295549509
+ ],
+ [
+ 1.4676592020865087,
+ 43.570738262285715
+ ],
+ [
+ 1.467379912968994,
+ 43.571017227831135
+ ]
]
],
"type": "Polygon"
@@ -46,32 +200,86 @@
{
"type": "Feature",
"properties": {
- "name": "Amphithéâtre Joseph Fourrier",
- "short_name": "Amphi Fourrier",
- "description": "l'Amphi Fourier, c'est pour les réceptions, les pièces du CATIN, les concerts des Enfoiros et les spectacles de danse de tes camarades au second semestre !",
+ "name": "Amphi Sophie Germain",
+ "short_name": "Sophie Germain",
+ "description": "L'Amphi Sophie Germain accueille des cours magistraux, conférences et événements de la vie du campus.",
"height": 6
},
"geometry": {
"coordinates": [
[
- [1.4678468524896857, 43.57052283609585],
- [1.4677011833898632, 43.57044592702479],
- [1.4678775851044463, 43.57026765950977],
- [1.4678875803107019, 43.57023839648619],
- [1.4679075974240448, 43.57024333367687],
- [1.4679314476015577, 43.57019735607216],
- [1.4679552977790138, 43.570204144713955],
- [1.4679787220596268, 43.57021155050424],
- [1.467998313277235, 43.5702201905917],
- [1.4680242929347003, 43.57023315072047],
- [1.4680532538635873, 43.57025012231347],
- [1.4680690120170539, 43.57025999669284],
- [1.4680847701693835, 43.57027264823856],
- [1.4681021292676633, 43.57028632321234],
- [1.468047134277981, 43.57031598209579],
- [1.468058897525765, 43.57032941636152],
- [1.4680234084054007, 43.570344728531325],
- [1.4678468524896857, 43.57052283609585]
+ [
+ 1.4678468524896857,
+ 43.57052283609585
+ ],
+ [
+ 1.4677011833898632,
+ 43.57044592702479
+ ],
+ [
+ 1.4678775851044463,
+ 43.57026765950977
+ ],
+ [
+ 1.4678875803107019,
+ 43.57023839648619
+ ],
+ [
+ 1.4679075974240448,
+ 43.57024333367687
+ ],
+ [
+ 1.4679314476015577,
+ 43.57019735607216
+ ],
+ [
+ 1.4679552977790138,
+ 43.570204144713955
+ ],
+ [
+ 1.4679787220596268,
+ 43.57021155050424
+ ],
+ [
+ 1.467998313277235,
+ 43.5702201905917
+ ],
+ [
+ 1.4680242929347003,
+ 43.57023315072047
+ ],
+ [
+ 1.4680532538635873,
+ 43.57025012231347
+ ],
+ [
+ 1.4680690120170539,
+ 43.57025999669284
+ ],
+ [
+ 1.4680847701693835,
+ 43.57027264823856
+ ],
+ [
+ 1.4681021292676633,
+ 43.57028632321234
+ ],
+ [
+ 1.468047134277981,
+ 43.57031598209579
+ ],
+ [
+ 1.468058897525765,
+ 43.57032941636152
+ ],
+ [
+ 1.4680234084054007,
+ 43.570344728531325
+ ],
+ [
+ 1.4678468524896857,
+ 43.57052283609585
+ ]
]
],
"type": "Polygon"
@@ -88,33 +296,114 @@
"geometry": {
"coordinates": [
[
- [1.467653281743594, 43.57004069740114],
- [1.4670415028592458, 43.57066217499488],
- [1.4669756698693561, 43.57062517717097],
- [1.466940107915434, 43.57065984597108],
- [1.46622735694703, 43.57028887205203],
- [1.4663392246969522, 43.57017602030086],
- [1.466443936876317, 43.57023162326513],
- [1.4664886186203034, 43.57018590527602],
- [1.466596059455071, 43.57024299097634],
- [1.4665533877516452, 43.570288099375176],
- [1.466587271484741, 43.570305216636456],
- [1.4666304810160113, 43.5702608468828],
- [1.466738510988364, 43.57031738057947],
- [1.466695129128226, 43.570361897162],
- [1.4667271535057864, 43.57037889439357],
- [1.466772024870977, 43.57033356843158],
- [1.4668810721508123, 43.57039103544315],
- [1.4668373647627675, 43.57043600963493],
- [1.4668706102760325, 43.57045319077784],
- [1.4669154800950537, 43.57040855348447],
- [1.4670229562389636, 43.57046463347157],
- [1.4669782893058425, 43.570509831589334],
- [1.4670107058136637, 43.57052799275681],
- [1.4671878945951278, 43.57034674297887],
- [1.4667019645927724, 43.570094028827185],
- [1.4670581233196174, 43.569730852590936],
- [1.467653281743594, 43.57004069740114]
+ [
+ 1.467653281743594,
+ 43.57004069740114
+ ],
+ [
+ 1.4670415028592458,
+ 43.57066217499488
+ ],
+ [
+ 1.4669756698693561,
+ 43.57062517717097
+ ],
+ [
+ 1.466940107915434,
+ 43.57065984597108
+ ],
+ [
+ 1.46622735694703,
+ 43.57028887205203
+ ],
+ [
+ 1.4663392246969522,
+ 43.57017602030086
+ ],
+ [
+ 1.466443936876317,
+ 43.57023162326513
+ ],
+ [
+ 1.4664886186203034,
+ 43.57018590527602
+ ],
+ [
+ 1.466596059455071,
+ 43.57024299097634
+ ],
+ [
+ 1.4665533877516452,
+ 43.570288099375176
+ ],
+ [
+ 1.466587271484741,
+ 43.570305216636456
+ ],
+ [
+ 1.4666304810160113,
+ 43.5702608468828
+ ],
+ [
+ 1.466738510988364,
+ 43.57031738057947
+ ],
+ [
+ 1.466695129128226,
+ 43.570361897162
+ ],
+ [
+ 1.4667271535057864,
+ 43.57037889439357
+ ],
+ [
+ 1.466772024870977,
+ 43.57033356843158
+ ],
+ [
+ 1.4668810721508123,
+ 43.57039103544315
+ ],
+ [
+ 1.4668373647627675,
+ 43.57043600963493
+ ],
+ [
+ 1.4668706102760325,
+ 43.57045319077784
+ ],
+ [
+ 1.4669154800950537,
+ 43.57040855348447
+ ],
+ [
+ 1.4670229562389636,
+ 43.57046463347157
+ ],
+ [
+ 1.4669782893058425,
+ 43.570509831589334
+ ],
+ [
+ 1.4670107058136637,
+ 43.57052799275681
+ ],
+ [
+ 1.4671878945951278,
+ 43.57034674297887
+ ],
+ [
+ 1.4667019645927724,
+ 43.570094028827185
+ ],
+ [
+ 1.4670581233196174,
+ 43.569730852590936
+ ],
+ [
+ 1.467653281743594,
+ 43.57004069740114
+ ]
]
],
"type": "Polygon"
@@ -131,19 +420,58 @@
"geometry": {
"coordinates": [
[
- [1.4666302397496338, 43.57108342638125],
- [1.4658420665138863, 43.57067556736092],
- [1.4658876311189317, 43.57062916843108],
- [1.4658657429858977, 43.57061771530854],
- [1.4658975234260936, 43.570586842843454],
- [1.4659170807853457, 43.57059762202914],
- [1.4659601813029326, 43.57055083907224],
- [1.4667501574340918, 43.570960274736194],
- [1.4667040446162503, 43.57100720445905],
- [1.466724486801354, 43.57101782101293],
- [1.46669225594502, 43.57104930321475],
- [1.4666724958267139, 43.57103899311315],
- [1.4666302397496338, 43.57108342638125]
+ [
+ 1.4666302397496338,
+ 43.57108342638125
+ ],
+ [
+ 1.4658420665138863,
+ 43.57067556736092
+ ],
+ [
+ 1.4658876311189317,
+ 43.57062916843108
+ ],
+ [
+ 1.4658657429858977,
+ 43.57061771530854
+ ],
+ [
+ 1.4658975234260936,
+ 43.570586842843454
+ ],
+ [
+ 1.4659170807853457,
+ 43.57059762202914
+ ],
+ [
+ 1.4659601813029326,
+ 43.57055083907224
+ ],
+ [
+ 1.4667501574340918,
+ 43.570960274736194
+ ],
+ [
+ 1.4667040446162503,
+ 43.57100720445905
+ ],
+ [
+ 1.466724486801354,
+ 43.57101782101293
+ ],
+ [
+ 1.46669225594502,
+ 43.57104930321475
+ ],
+ [
+ 1.4666724958267139,
+ 43.57103899311315
+ ],
+ [
+ 1.4666302397496338,
+ 43.57108342638125
+ ]
]
],
"type": "Polygon"
@@ -160,19 +488,58 @@
"geometry": {
"coordinates": [
[
- [1.465539299222371, 43.570729520064106],
- [1.465276543492223, 43.570593038739105],
- [1.4653746419407128, 43.570495711774726],
- [1.4655083556894226, 43.5705654605907],
- [1.4655526502953649, 43.57052164345919],
- [1.4652333074255353, 43.57035584060921],
- [1.4653562909927018, 43.57023097388904],
- [1.4657675226886795, 43.570446394635695],
- [1.4656447542397188, 43.57057048507784],
- [1.4655927148519936, 43.570543305689625],
- [1.465548742062822, 43.57058638844336],
- [1.4656351304645057, 43.5706315184529],
- [1.465539299222371, 43.570729520064106]
+ [
+ 1.465539299222371,
+ 43.570729520064106
+ ],
+ [
+ 1.465276543492223,
+ 43.570593038739105
+ ],
+ [
+ 1.4653746419407128,
+ 43.570495711774726
+ ],
+ [
+ 1.4655083556894226,
+ 43.5705654605907
+ ],
+ [
+ 1.4655526502953649,
+ 43.57052164345919
+ ],
+ [
+ 1.4652333074255353,
+ 43.57035584060921
+ ],
+ [
+ 1.4653562909927018,
+ 43.57023097388904
+ ],
+ [
+ 1.4657675226886795,
+ 43.570446394635695
+ ],
+ [
+ 1.4656447542397188,
+ 43.57057048507784
+ ],
+ [
+ 1.4655927148519936,
+ 43.570543305689625
+ ],
+ [
+ 1.465548742062822,
+ 43.57058638844336
+ ],
+ [
+ 1.4656351304645057,
+ 43.5706315184529
+ ],
+ [
+ 1.465539299222371,
+ 43.570729520064106
+ ]
]
],
"type": "Polygon"
@@ -189,21 +556,66 @@
"geometry": {
"coordinates": [
[
- [1.4677219252347982, 43.56976678188457],
- [1.4677036309291793, 43.5696946142009],
- [1.4676557587653747, 43.569698491038054],
- [1.4676411723362435, 43.56964534737793],
- [1.4676722660397843, 43.56964216600315],
- [1.4676459387607679, 43.569543246669696],
- [1.467797171815448, 43.56952368816877],
- [1.46781801897302, 43.56960172227781],
- [1.4677821860465485, 43.56960589917088],
- [1.4677926425310375, 43.569652316776114],
- [1.4678366695354441, 43.569646790884576],
- [1.4678438742565731, 43.56969098807818],
- [1.4677752729568283, 43.56969698582975],
- [1.4677879657414223, 43.56975849306352],
- [1.4677219252347982, 43.56976678188457]
+ [
+ 1.4677219252347982,
+ 43.56976678188457
+ ],
+ [
+ 1.4677036309291793,
+ 43.5696946142009
+ ],
+ [
+ 1.4676557587653747,
+ 43.569698491038054
+ ],
+ [
+ 1.4676411723362435,
+ 43.56964534737793
+ ],
+ [
+ 1.4676722660397843,
+ 43.56964216600315
+ ],
+ [
+ 1.4676459387607679,
+ 43.569543246669696
+ ],
+ [
+ 1.467797171815448,
+ 43.56952368816877
+ ],
+ [
+ 1.46781801897302,
+ 43.56960172227781
+ ],
+ [
+ 1.4677821860465485,
+ 43.56960589917088
+ ],
+ [
+ 1.4677926425310375,
+ 43.569652316776114
+ ],
+ [
+ 1.4678366695354441,
+ 43.569646790884576
+ ],
+ [
+ 1.4678438742565731,
+ 43.56969098807818
+ ],
+ [
+ 1.4677752729568283,
+ 43.56969698582975
+ ],
+ [
+ 1.4677879657414223,
+ 43.56975849306352
+ ],
+ [
+ 1.4677219252347982,
+ 43.56976678188457
+ ]
]
],
"type": "Polygon"
@@ -220,11 +632,26 @@
"geometry": {
"coordinates": [
[
- [1.4681078444042441, 43.56949712041214],
- [1.4679762621142913, 43.56942690555255],
- [1.4682276756475972, 43.56917280241282],
- [1.4683615298010295, 43.5692423979591],
- [1.4681078444042441, 43.56949712041214]
+ [
+ 1.4681078444042441,
+ 43.56949712041214
+ ],
+ [
+ 1.4679762621142913,
+ 43.56942690555255
+ ],
+ [
+ 1.4682276756475972,
+ 43.56917280241282
+ ],
+ [
+ 1.4683615298010295,
+ 43.5692423979591
+ ],
+ [
+ 1.4681078444042441,
+ 43.56949712041214
+ ]
]
],
"type": "Polygon"
@@ -241,12 +668,30 @@
"geometry": {
"coordinates": [
[
- [1.4697614649906825, 43.569916576788245],
- [1.4690183998410475, 43.56952762638883],
- [1.469907014415952, 43.568630088660655],
- [1.4706247404661497, 43.569005230990626],
- [1.4698230988696537, 43.569821749019894],
- [1.4697614649906825, 43.569916576788245]
+ [
+ 1.4697614649906825,
+ 43.569916576788245
+ ],
+ [
+ 1.4690183998410475,
+ 43.56952762638883
+ ],
+ [
+ 1.469907014415952,
+ 43.568630088660655
+ ],
+ [
+ 1.4706247404661497,
+ 43.569005230990626
+ ],
+ [
+ 1.4698230988696537,
+ 43.569821749019894
+ ],
+ [
+ 1.4697614649906825,
+ 43.569916576788245
+ ]
]
],
"type": "Polygon"
@@ -263,13 +708,34 @@
"geometry": {
"coordinates": [
[
- [1.470556803334489, 43.56894944082751],
- [1.4702622470308029, 43.56879639254865],
- [1.470292094840545, 43.56876639938457],
- [1.4699890122965371, 43.568607757592815],
- [1.4701988500968355, 43.568391445003016],
- [1.4707975492769094, 43.56870220288644],
- [1.470556803334489, 43.56894944082751]
+ [
+ 1.470556803334489,
+ 43.56894944082751
+ ],
+ [
+ 1.4702622470308029,
+ 43.56879639254865
+ ],
+ [
+ 1.470292094840545,
+ 43.56876639938457
+ ],
+ [
+ 1.4699890122965371,
+ 43.568607757592815
+ ],
+ [
+ 1.4701988500968355,
+ 43.568391445003016
+ ],
+ [
+ 1.4707975492769094,
+ 43.56870220288644
+ ],
+ [
+ 1.470556803334489,
+ 43.56894944082751
+ ]
]
],
"type": "Polygon"
@@ -286,15 +752,42 @@
"geometry": {
"coordinates": [
[
- [1.4700863706350447, 43.56811032992499],
- [1.469938736003968, 43.56803629755606],
- [1.4702461799896298, 43.567720133227084],
- [1.4699983670576842, 43.56759451133419],
- [1.4700750115827077, 43.56751744629773],
- [1.4703186051377486, 43.567647805551616],
- [1.4703993614309923, 43.56756522558362],
- [1.4705432554910374, 43.567643018671475],
- [1.4700863706350447, 43.56811032992499]
+ [
+ 1.4700863706350447,
+ 43.56811032992499
+ ],
+ [
+ 1.469938736003968,
+ 43.56803629755606
+ ],
+ [
+ 1.4702461799896298,
+ 43.567720133227084
+ ],
+ [
+ 1.4699983670576842,
+ 43.56759451133419
+ ],
+ [
+ 1.4700750115827077,
+ 43.56751744629773
+ ],
+ [
+ 1.4703186051377486,
+ 43.567647805551616
+ ],
+ [
+ 1.4703993614309923,
+ 43.56756522558362
+ ],
+ [
+ 1.4705432554910374,
+ 43.567643018671475
+ ],
+ [
+ 1.4700863706350447,
+ 43.56811032992499
+ ]
]
],
"type": "Polygon"
@@ -310,25 +803,82 @@
"geometry": {
"coordinates": [
[
- [1.4692172469972604, 43.56844023133817],
- [1.4690302477964963, 43.568343321608324],
- [1.4691585244984822, 43.568213675413745],
- [1.4691538069450587, 43.56819776314714],
- [1.4687662114447164, 43.5679946106105],
- [1.4687419705240359, 43.567997690869504],
- [1.4686134366209274, 43.5681284349875],
- [1.468508716125143, 43.568073172546946],
- [1.4684794321244965, 43.56810498156062],
- [1.468395058864445, 43.568061308319955],
- [1.4686427171261016, 43.5678115071091],
- [1.4686713528855364, 43.56782580766637],
- [1.468752451183235, 43.567817509782856],
- [1.4687726292060006, 43.56779371972871],
- [1.4694117091423777, 43.568127910768226],
- [1.4693899130114971, 43.568148896988106],
- [1.4694062572902737, 43.56820860815358],
- [1.4694357235645725, 43.568220939079765],
- [1.4692172469972604, 43.56844023133817]
+ [
+ 1.4692172469972604,
+ 43.56844023133817
+ ],
+ [
+ 1.4690302477964963,
+ 43.568343321608324
+ ],
+ [
+ 1.4691585244984822,
+ 43.568213675413745
+ ],
+ [
+ 1.4691538069450587,
+ 43.56819776314714
+ ],
+ [
+ 1.4687662114447164,
+ 43.5679946106105
+ ],
+ [
+ 1.4687419705240359,
+ 43.567997690869504
+ ],
+ [
+ 1.4686134366209274,
+ 43.5681284349875
+ ],
+ [
+ 1.468508716125143,
+ 43.568073172546946
+ ],
+ [
+ 1.4684794321244965,
+ 43.56810498156062
+ ],
+ [
+ 1.468395058864445,
+ 43.568061308319955
+ ],
+ [
+ 1.4686427171261016,
+ 43.5678115071091
+ ],
+ [
+ 1.4686713528855364,
+ 43.56782580766637
+ ],
+ [
+ 1.468752451183235,
+ 43.567817509782856
+ ],
+ [
+ 1.4687726292060006,
+ 43.56779371972871
+ ],
+ [
+ 1.4694117091423777,
+ 43.568127910768226
+ ],
+ [
+ 1.4693899130114971,
+ 43.568148896988106
+ ],
+ [
+ 1.4694062572902737,
+ 43.56820860815358
+ ],
+ [
+ 1.4694357235645725,
+ 43.568220939079765
+ ],
+ [
+ 1.4692172469972604,
+ 43.56844023133817
+ ]
]
],
"type": "Polygon"
@@ -345,30 +895,102 @@
"geometry": {
"coordinates": [
[
- [1.469490912075429, 43.57022628346135],
- [1.4695650174136858, 43.57026435684202],
- [1.4695487877031894, 43.57028153135954],
- [1.4695818213533016, 43.57029721156181],
- [1.4695568346110974, 43.57032281739805],
- [1.4695679564698025, 43.57032965808091],
- [1.4696563915750858, 43.57031883685494],
- [1.4696672199398222, 43.57038067130878],
- [1.4696450333524922, 43.57037983852794],
- [1.4696398671326847, 43.57042491012902],
- [1.4696181711544511, 43.57048390416426],
- [1.4696053033635792, 43.570479306744204],
- [1.4695804750512877, 43.570519847456495],
- [1.4695553157966685, 43.57054788273601],
- [1.4695367791341312, 43.57053777619785],
- [1.469477067419831, 43.57058171350067],
- [1.4694556526648626, 43.570569719056806],
- [1.4694185817452308, 43.570485125437955],
- [1.469392406896361, 43.57048707603846],
- [1.469324699411544, 43.5705543827423],
- [1.4692952759448872, 43.57053993412438],
- [1.4692806203900375, 43.570554891618485],
- [1.4692046407515704, 43.570514976235074],
- [1.469490912075429, 43.57022628346135]
+ [
+ 1.469490912075429,
+ 43.57022628346135
+ ],
+ [
+ 1.4695650174136858,
+ 43.57026435684202
+ ],
+ [
+ 1.4695487877031894,
+ 43.57028153135954
+ ],
+ [
+ 1.4695818213533016,
+ 43.57029721156181
+ ],
+ [
+ 1.4695568346110974,
+ 43.57032281739805
+ ],
+ [
+ 1.4695679564698025,
+ 43.57032965808091
+ ],
+ [
+ 1.4696563915750858,
+ 43.57031883685494
+ ],
+ [
+ 1.4696672199398222,
+ 43.57038067130878
+ ],
+ [
+ 1.4696450333524922,
+ 43.57037983852794
+ ],
+ [
+ 1.4696398671326847,
+ 43.57042491012902
+ ],
+ [
+ 1.4696181711544511,
+ 43.57048390416426
+ ],
+ [
+ 1.4696053033635792,
+ 43.570479306744204
+ ],
+ [
+ 1.4695804750512877,
+ 43.570519847456495
+ ],
+ [
+ 1.4695553157966685,
+ 43.57054788273601
+ ],
+ [
+ 1.4695367791341312,
+ 43.57053777619785
+ ],
+ [
+ 1.469477067419831,
+ 43.57058171350067
+ ],
+ [
+ 1.4694556526648626,
+ 43.570569719056806
+ ],
+ [
+ 1.4694185817452308,
+ 43.570485125437955
+ ],
+ [
+ 1.469392406896361,
+ 43.57048707603846
+ ],
+ [
+ 1.469324699411544,
+ 43.5705543827423
+ ],
+ [
+ 1.4692952759448872,
+ 43.57053993412438
+ ],
+ [
+ 1.4692806203900375,
+ 43.570554891618485
+ ],
+ [
+ 1.4692046407515704,
+ 43.570514976235074
+ ],
+ [
+ 1.469490912075429,
+ 43.57022628346135
+ ]
]
],
"type": "Polygon"
@@ -376,23 +998,66 @@
},
{
"type": "Feature",
- "properties": { "name": "Résidence 4", "short_name": "R4", "height": 12 },
+ "properties": {
+ "name": "Résidence 4",
+ "short_name": "R4",
+ "height": 12
+ },
"geometry": {
"coordinates": [
[
- [1.4683613151439943, 43.57340993918521],
- [1.468361577883087, 43.57327318969695],
- [1.4682799241763007, 43.57327704724409],
- [1.4682772647076945, 43.57283265588603],
- [1.4683436029655184, 43.572832900845384],
- [1.468343727633453, 43.57280281485572],
- [1.4684094584671072, 43.5728031219607],
- [1.4684098384879292, 43.572827321212316],
- [1.468413266698036, 43.57284273924046],
- [1.4684012842327547, 43.57286751247139],
- [1.4684830504942568, 43.572867266700456],
- [1.4684936149294856, 43.57341020714395],
- [1.4683613151439943, 43.57340993918521]
+ [
+ 1.4683613151439943,
+ 43.57340993918521
+ ],
+ [
+ 1.468361577883087,
+ 43.57327318969695
+ ],
+ [
+ 1.4682799241763007,
+ 43.57327704724409
+ ],
+ [
+ 1.4682772647076945,
+ 43.57283265588603
+ ],
+ [
+ 1.4683436029655184,
+ 43.572832900845384
+ ],
+ [
+ 1.468343727633453,
+ 43.57280281485572
+ ],
+ [
+ 1.4684094584671072,
+ 43.5728031219607
+ ],
+ [
+ 1.4684098384879292,
+ 43.572827321212316
+ ],
+ [
+ 1.468413266698036,
+ 43.57284273924046
+ ],
+ [
+ 1.4684012842327547,
+ 43.57286751247139
+ ],
+ [
+ 1.4684830504942568,
+ 43.572867266700456
+ ],
+ [
+ 1.4684936149294856,
+ 43.57341020714395
+ ],
+ [
+ 1.4683613151439943,
+ 43.57340993918521
+ ]
]
],
"type": "Polygon"
@@ -400,30 +1065,94 @@
},
{
"type": "Feature",
- "properties": { "name": "Résidence 7", "short_name": "R7", "height": 18 },
+ "properties": {
+ "name": "Résidence 7",
+ "short_name": "R7",
+ "height": 18
+ },
"geometry": {
"coordinates": [
[
- [1.4689928543222948, 43.57312947604245],
- [1.4688448359259212, 43.57305569239307],
- [1.468868620684873, 43.57303183375538],
- [1.468840143600886, 43.57301703023137],
- [1.4691218335423741, 43.572733347642526],
- [1.4691031575494549, 43.5727249687811],
- [1.4691242892160687, 43.572702227561535],
- [1.4691555797349167, 43.572717033037605],
- [1.4691625500768168, 43.57271271853318],
- [1.4691623865501242, 43.572562506710284],
- [1.4692920511163265, 43.572562942898855],
- [1.4692938095093666, 43.572541623852516],
- [1.4693370323238923, 43.57254217539153],
- [1.4693370825661702, 43.57258976968353],
- [1.4693714812144947, 43.57258942054119],
- [1.4693752639166462, 43.572913281078684],
- [1.4693011432382832, 43.57291147534528],
- [1.4692893921677808, 43.57292278886598],
- [1.4692292983016557, 43.57289065870734],
- [1.4689928543222948, 43.57312947604245]
+ [
+ 1.4689928543222948,
+ 43.57312947604245
+ ],
+ [
+ 1.4688448359259212,
+ 43.57305569239307
+ ],
+ [
+ 1.468868620684873,
+ 43.57303183375538
+ ],
+ [
+ 1.468840143600886,
+ 43.57301703023137
+ ],
+ [
+ 1.4691218335423741,
+ 43.572733347642526
+ ],
+ [
+ 1.4691031575494549,
+ 43.5727249687811
+ ],
+ [
+ 1.4691242892160687,
+ 43.572702227561535
+ ],
+ [
+ 1.4691555797349167,
+ 43.572717033037605
+ ],
+ [
+ 1.4691625500768168,
+ 43.57271271853318
+ ],
+ [
+ 1.4691623865501242,
+ 43.572562506710284
+ ],
+ [
+ 1.4692920511163265,
+ 43.572562942898855
+ ],
+ [
+ 1.4692938095093666,
+ 43.572541623852516
+ ],
+ [
+ 1.4693370323238923,
+ 43.57254217539153
+ ],
+ [
+ 1.4693370825661702,
+ 43.57258976968353
+ ],
+ [
+ 1.4693714812144947,
+ 43.57258942054119
+ ],
+ [
+ 1.4693752639166462,
+ 43.572913281078684
+ ],
+ [
+ 1.4693011432382832,
+ 43.57291147534528
+ ],
+ [
+ 1.4692893921677808,
+ 43.57292278886598
+ ],
+ [
+ 1.4692292983016557,
+ 43.57289065870734
+ ],
+ [
+ 1.4689928543222948,
+ 43.57312947604245
+ ]
]
],
"type": "Polygon"
@@ -431,29 +1160,90 @@
},
{
"type": "Feature",
- "properties": { "name": "Résidence 3", "short_name": "R3", "height": 21 },
+ "properties": {
+ "name": "Résidence 3",
+ "short_name": "R3",
+ "height": 21
+ },
"geometry": {
"coordinates": [
[
- [1.4691608915918835, 43.57229708999341],
- [1.4691561548851269, 43.57200207774966],
- [1.4690799025374872, 43.57200270800911],
- [1.4690792749863988, 43.57198887640706],
- [1.4690228635158746, 43.571958001165314],
- [1.4692803101921186, 43.57169873091266],
- [1.4693532985284605, 43.57173659114494],
- [1.4693793719041253, 43.57173460091266],
- [1.4693887522399223, 43.57172178385321],
- [1.4694202088702468, 43.57173826393415],
- [1.4694473608000749, 43.57171290915204],
- [1.469496042815166, 43.57174048459365],
- [1.4693534170344265, 43.57188161476901],
- [1.469353363987949, 43.57191865816034],
- [1.4693672640823365, 43.57192441548116],
- [1.4693690158851211, 43.572270027035955],
- [1.4693347473600227, 43.5722697466131],
- [1.4693339861251502, 43.572297227737494],
- [1.4691608915918835, 43.57229708999341]
+ [
+ 1.4691608915918835,
+ 43.57229708999341
+ ],
+ [
+ 1.4691561548851269,
+ 43.57200207774966
+ ],
+ [
+ 1.4690799025374872,
+ 43.57200270800911
+ ],
+ [
+ 1.4690792749863988,
+ 43.57198887640706
+ ],
+ [
+ 1.4690228635158746,
+ 43.571958001165314
+ ],
+ [
+ 1.4692803101921186,
+ 43.57169873091266
+ ],
+ [
+ 1.4693532985284605,
+ 43.57173659114494
+ ],
+ [
+ 1.4693793719041253,
+ 43.57173460091266
+ ],
+ [
+ 1.4693887522399223,
+ 43.57172178385321
+ ],
+ [
+ 1.4694202088702468,
+ 43.57173826393415
+ ],
+ [
+ 1.4694473608000749,
+ 43.57171290915204
+ ],
+ [
+ 1.469496042815166,
+ 43.57174048459365
+ ],
+ [
+ 1.4693534170344265,
+ 43.57188161476901
+ ],
+ [
+ 1.469353363987949,
+ 43.57191865816034
+ ],
+ [
+ 1.4693672640823365,
+ 43.57192441548116
+ ],
+ [
+ 1.4693690158851211,
+ 43.572270027035955
+ ],
+ [
+ 1.4693347473600227,
+ 43.5722697466131
+ ],
+ [
+ 1.4693339861251502,
+ 43.572297227737494
+ ],
+ [
+ 1.4691608915918835,
+ 43.57229708999341
+ ]
]
],
"type": "Polygon"
@@ -470,11 +1260,26 @@
"geometry": {
"coordinates": [
[
- [1.469002517501707, 43.57136506361658],
- [1.469001840671467, 43.57130848753036],
- [1.4690207905523494, 43.57130841035115],
- [1.4690204800837137, 43.57136495580852],
- [1.469002517501707, 43.57136506361658]
+ [
+ 1.469002517501707,
+ 43.57136506361658
+ ],
+ [
+ 1.469001840671467,
+ 43.57130848753036
+ ],
+ [
+ 1.4690207905523494,
+ 43.57130841035115
+ ],
+ [
+ 1.4690204800837137,
+ 43.57136495580852
+ ],
+ [
+ 1.469002517501707,
+ 43.57136506361658
+ ]
]
],
"type": "Polygon"
@@ -490,11 +1295,26 @@
"geometry": {
"coordinates": [
[
- [1.4689172550997682, 43.57139676716605],
- [1.4689159169172683, 43.57130242920917],
- [1.4690014553219157, 43.571302594997576],
- [1.4690024538884359, 43.57139718699233],
- [1.4689172550997682, 43.57139676716605]
+ [
+ 1.4689172550997682,
+ 43.57139676716605
+ ],
+ [
+ 1.4689159169172683,
+ 43.57130242920917
+ ],
+ [
+ 1.4690014553219157,
+ 43.571302594997576
+ ],
+ [
+ 1.4690024538884359,
+ 43.57139718699233
+ ],
+ [
+ 1.4689172550997682,
+ 43.57139676716605
+ ]
]
],
"type": "Polygon"
@@ -502,17 +1322,42 @@
},
{
"type": "Feature",
- "properties": { "name": "IDK", "short_name": "IDK", "height": 3 },
+ "properties": {
+ "name": "IDK",
+ "short_name": "IDK",
+ "height": 3
+ },
"geometry": {
"coordinates": [
[
- [1.4687776865714, 43.571397140347244],
- [1.4687775107247774, 43.57136586343131],
- [1.4687586449291814, 43.57136572585071],
- [1.468757879695005, 43.571302603553164],
- [1.4689159626066726, 43.57130239448804],
- [1.4689174250125063, 43.571397284204465],
- [1.4687776865714, 43.571397140347244]
+ [
+ 1.4687776865714,
+ 43.571397140347244
+ ],
+ [
+ 1.4687775107247774,
+ 43.57136586343131
+ ],
+ [
+ 1.4687586449291814,
+ 43.57136572585071
+ ],
+ [
+ 1.468757879695005,
+ 43.571302603553164
+ ],
+ [
+ 1.4689159626066726,
+ 43.57130239448804
+ ],
+ [
+ 1.4689174250125063,
+ 43.571397284204465
+ ],
+ [
+ 1.4687776865714,
+ 43.571397140347244
+ ]
]
],
"type": "Polygon"
@@ -520,15 +1365,34 @@
},
{
"type": "Feature",
- "properties": { "name": "Résidence 1", "short_name": "R1", "height": 18 },
+ "properties": {
+ "name": "Résidence 1",
+ "short_name": "R1",
+ "height": 18
+ },
"geometry": {
"coordinates": [
[
- [1.4681837881526008, 43.57135899232321],
- [1.4680571728146674, 43.57129275812292],
- [1.468509584538765, 43.57083607988034],
- [1.4686369517816331, 43.570902808338616],
- [1.4681837881526008, 43.57135899232321]
+ [
+ 1.4681837881526008,
+ 43.57135899232321
+ ],
+ [
+ 1.4680571728146674,
+ 43.57129275812292
+ ],
+ [
+ 1.468509584538765,
+ 43.57083607988034
+ ],
+ [
+ 1.4686369517816331,
+ 43.570902808338616
+ ],
+ [
+ 1.4681837881526008,
+ 43.57135899232321
+ ]
]
],
"type": "Polygon"
@@ -545,13 +1409,34 @@
"geometry": {
"coordinates": [
[
- [1.4670511894526044, 43.572302073098655],
- [1.4673566333027566, 43.57246484486697],
- [1.4672776630942508, 43.57254280752565],
- [1.467009402297009, 43.572399653256326],
- [1.4670743956718013, 43.57233660342919],
- [1.4670371510122493, 43.57231571030621],
- [1.4670511894526044, 43.572302073098655]
+ [
+ 1.4670511894526044,
+ 43.572302073098655
+ ],
+ [
+ 1.4673566333027566,
+ 43.57246484486697
+ ],
+ [
+ 1.4672776630942508,
+ 43.57254280752565
+ ],
+ [
+ 1.467009402297009,
+ 43.572399653256326
+ ],
+ [
+ 1.4670743956718013,
+ 43.57233660342919
+ ],
+ [
+ 1.4670371510122493,
+ 43.57231571030621
+ ],
+ [
+ 1.4670511894526044,
+ 43.572302073098655
+ ]
]
],
"type": "Polygon"
@@ -568,21 +1453,66 @@
"geometry": {
"coordinates": [
[
- [1.4673566282526735, 43.57246544274071],
- [1.4670514684245006, 43.57230207560866],
- [1.4671294141083706, 43.5722244751538],
- [1.4671744516259366, 43.57224767993307],
- [1.4671871334761022, 43.572233719556834],
- [1.4672610385704274, 43.572271886700776],
- [1.4673180405510209, 43.572213158161304],
- [1.4672557494732246, 43.57218092297802],
- [1.4675598355503894, 43.57186857826093],
- [1.4677104486631265, 43.571944368709495],
- [1.4674069056088967, 43.572255316794894],
- [1.4675847978380148, 43.57234679360289],
- [1.46744703472649, 43.57248521913513],
- [1.4673738172621142, 43.57244698048967],
- [1.4673566282526735, 43.57246544274071]
+ [
+ 1.4673566282526735,
+ 43.57246544274071
+ ],
+ [
+ 1.4670514684245006,
+ 43.57230207560866
+ ],
+ [
+ 1.4671294141083706,
+ 43.5722244751538
+ ],
+ [
+ 1.4671744516259366,
+ 43.57224767993307
+ ],
+ [
+ 1.4671871334761022,
+ 43.572233719556834
+ ],
+ [
+ 1.4672610385704274,
+ 43.572271886700776
+ ],
+ [
+ 1.4673180405510209,
+ 43.572213158161304
+ ],
+ [
+ 1.4672557494732246,
+ 43.57218092297802
+ ],
+ [
+ 1.4675598355503894,
+ 43.57186857826093
+ ],
+ [
+ 1.4677104486631265,
+ 43.571944368709495
+ ],
+ [
+ 1.4674069056088967,
+ 43.572255316794894
+ ],
+ [
+ 1.4675847978380148,
+ 43.57234679360289
+ ],
+ [
+ 1.46744703472649,
+ 43.57248521913513
+ ],
+ [
+ 1.4673738172621142,
+ 43.57244698048967
+ ],
+ [
+ 1.4673566282526735,
+ 43.57246544274071
+ ]
]
],
"type": "Polygon"
@@ -599,27 +1529,90 @@
"geometry": {
"coordinates": [
[
- [1.465072797400751, 43.57145419260243],
- [1.4652324177260994, 43.57153776555447],
- [1.4653259375905918, 43.57144467594168],
- [1.4651669865018846, 43.571360693600866],
- [1.465254641349162, 43.571270806140944],
- [1.4655260137253379, 43.57140963465892],
- [1.4654372707269658, 43.57150121938216],
- [1.4653638104554148, 43.57146363099028],
- [1.4652693746901946, 43.57155643239324],
- [1.465859911506442, 43.57186453276],
- [1.4658058550215571, 43.57191799393411],
- [1.4658280188068034, 43.57192889033519],
- [1.465792669965964, 43.571961255379165],
- [1.4657724113977224, 43.57195171752136],
- [1.4657357140789031, 43.571990303726494],
- [1.4649501962577176, 43.57158052845023],
- [1.4649831460449434, 43.57154451675254],
- [1.4649635856216037, 43.57153471415518],
- [1.4649962671863932, 43.571500385239915],
- [1.4650178243069547, 43.57150998355607],
- [1.465072797400751, 43.57145419260243]
+ [
+ 1.465072797400751,
+ 43.57145419260243
+ ],
+ [
+ 1.4652324177260994,
+ 43.57153776555447
+ ],
+ [
+ 1.4653259375905918,
+ 43.57144467594168
+ ],
+ [
+ 1.4651669865018846,
+ 43.571360693600866
+ ],
+ [
+ 1.465254641349162,
+ 43.571270806140944
+ ],
+ [
+ 1.4655260137253379,
+ 43.57140963465892
+ ],
+ [
+ 1.4654372707269658,
+ 43.57150121938216
+ ],
+ [
+ 1.4653638104554148,
+ 43.57146363099028
+ ],
+ [
+ 1.4652693746901946,
+ 43.57155643239324
+ ],
+ [
+ 1.465859911506442,
+ 43.57186453276
+ ],
+ [
+ 1.4658058550215571,
+ 43.57191799393411
+ ],
+ [
+ 1.4658280188068034,
+ 43.57192889033519
+ ],
+ [
+ 1.465792669965964,
+ 43.571961255379165
+ ],
+ [
+ 1.4657724113977224,
+ 43.57195171752136
+ ],
+ [
+ 1.4657357140789031,
+ 43.571990303726494
+ ],
+ [
+ 1.4649501962577176,
+ 43.57158052845023
+ ],
+ [
+ 1.4649831460449434,
+ 43.57154451675254
+ ],
+ [
+ 1.4649635856216037,
+ 43.57153471415518
+ ],
+ [
+ 1.4649962671863932,
+ 43.571500385239915
+ ],
+ [
+ 1.4650178243069547,
+ 43.57150998355607
+ ],
+ [
+ 1.465072797400751,
+ 43.57145419260243
+ ]
]
],
"type": "Polygon"
@@ -636,19 +1629,58 @@
"geometry": {
"coordinates": [
[
- [1.4661786623695434, 43.57154106530305],
- [1.465393820853052, 43.571129259111586],
- [1.4654297881850766, 43.57109307719986],
- [1.4654095461499708, 43.57108234419434],
- [1.4654427220348794, 43.571051611505794],
- [1.4654598897787139, 43.57106127483709],
- [1.4655145234096096, 43.571005853122216],
- [1.4663002551394868, 43.57141784305563],
- [1.4662467834557162, 43.57147128496052],
- [1.4662668776566363, 43.57148101143275],
- [1.4662348350665297, 43.571511186853314],
- [1.4662170909517727, 43.57150178560221],
- [1.4661786623695434, 43.57154106530305]
+ [
+ 1.4661786623695434,
+ 43.57154106530305
+ ],
+ [
+ 1.465393820853052,
+ 43.571129259111586
+ ],
+ [
+ 1.4654297881850766,
+ 43.57109307719986
+ ],
+ [
+ 1.4654095461499708,
+ 43.57108234419434
+ ],
+ [
+ 1.4654427220348794,
+ 43.571051611505794
+ ],
+ [
+ 1.4654598897787139,
+ 43.57106127483709
+ ],
+ [
+ 1.4655145234096096,
+ 43.571005853122216
+ ],
+ [
+ 1.4663002551394868,
+ 43.57141784305563
+ ],
+ [
+ 1.4662467834557162,
+ 43.57147128496052
+ ],
+ [
+ 1.4662668776566363,
+ 43.57148101143275
+ ],
+ [
+ 1.4662348350665297,
+ 43.571511186853314
+ ],
+ [
+ 1.4662170909517727,
+ 43.57150178560221
+ ],
+ [
+ 1.4661786623695434,
+ 43.57154106530305
+ ]
]
],
"type": "Polygon"
@@ -665,13 +1697,34 @@
"geometry": {
"coordinates": [
[
- [1.465960900800411, 43.571066457818375],
- [1.465687580105822, 43.57092479973218],
- [1.4657902901498119, 43.570818363307524],
- [1.466016688981199, 43.570933918036246],
- [1.4660358273823135, 43.57091639770229],
- [1.4660841229466257, 43.57094102461963],
- [1.465960900800411, 43.571066457818375]
+ [
+ 1.465960900800411,
+ 43.571066457818375
+ ],
+ [
+ 1.465687580105822,
+ 43.57092479973218
+ ],
+ [
+ 1.4657902901498119,
+ 43.570818363307524
+ ],
+ [
+ 1.466016688981199,
+ 43.570933918036246
+ ],
+ [
+ 1.4660358273823135,
+ 43.57091639770229
+ ],
+ [
+ 1.4660841229466257,
+ 43.57094102461963
+ ],
+ [
+ 1.465960900800411,
+ 43.571066457818375
+ ]
]
],
"type": "Polygon"
@@ -687,11 +1740,26 @@
"geometry": {
"coordinates": [
[
- [1.464991010881704, 43.57230903860378],
- [1.4644883816052072, 43.57204853489469],
- [1.4647051389781325, 43.57182657393898],
- [1.4652084456861871, 43.572088684922875],
- [1.464991010881704, 43.57230903860378]
+ [
+ 1.464991010881704,
+ 43.57230903860378
+ ],
+ [
+ 1.4644883816052072,
+ 43.57204853489469
+ ],
+ [
+ 1.4647051389781325,
+ 43.57182657393898
+ ],
+ [
+ 1.4652084456861871,
+ 43.572088684922875
+ ],
+ [
+ 1.464991010881704,
+ 43.57230903860378
+ ]
]
],
"type": "Polygon"
@@ -699,35 +1767,114 @@
},
{
"type": "Feature",
- "properties": { "name": "Hall bio5", "short_name": "", "height": 13.7 },
+ "properties": {
+ "name": "Hall bio5",
+ "short_name": "",
+ "height": 13.7
+ },
"geometry": {
"coordinates": [
[
- [1.4649492956472159, 43.57243707743643],
- [1.4648619019474154, 43.572389103116166],
- [1.464887727070618, 43.57236341360826],
- [1.4648756800157514, 43.57235684552532],
- [1.4648815900826833, 43.57234950395073],
- [1.4648420900841472, 43.572330143341986],
- [1.4648296545994128, 43.572344180303304],
- [1.4648504009018666, 43.572352694950695],
- [1.4648011955259221, 43.57241410646904],
- [1.4646856769663543, 43.57237132091237],
- [1.4647316700565511, 43.5723059831104],
- [1.464769465028695, 43.57232161785248],
- [1.4647866421180424, 43.57230177714899],
- [1.4647476952296472, 43.57228023248834],
- [1.4647427448297492, 43.572287475886725],
- [1.464727547735862, 43.572279811781556],
- [1.4647031565985742, 43.57230783663374],
- [1.4646134868048364, 43.57225956978334],
- [1.464704769398054, 43.57216796914045],
- [1.4650428363723051, 43.57234701890346],
- [1.4650102203072777, 43.57237553065062],
- [1.4650185019674495, 43.57238035652921],
- [1.4650071616689786, 43.572394990577465],
- [1.4649941439191423, 43.57239348584616],
- [1.4649492956472159, 43.57243707743643]
+ [
+ 1.4649492956472159,
+ 43.57243707743643
+ ],
+ [
+ 1.4648619019474154,
+ 43.572389103116166
+ ],
+ [
+ 1.464887727070618,
+ 43.57236341360826
+ ],
+ [
+ 1.4648756800157514,
+ 43.57235684552532
+ ],
+ [
+ 1.4648815900826833,
+ 43.57234950395073
+ ],
+ [
+ 1.4648420900841472,
+ 43.572330143341986
+ ],
+ [
+ 1.4648296545994128,
+ 43.572344180303304
+ ],
+ [
+ 1.4648504009018666,
+ 43.572352694950695
+ ],
+ [
+ 1.4648011955259221,
+ 43.57241410646904
+ ],
+ [
+ 1.4646856769663543,
+ 43.57237132091237
+ ],
+ [
+ 1.4647316700565511,
+ 43.5723059831104
+ ],
+ [
+ 1.464769465028695,
+ 43.57232161785248
+ ],
+ [
+ 1.4647866421180424,
+ 43.57230177714899
+ ],
+ [
+ 1.4647476952296472,
+ 43.57228023248834
+ ],
+ [
+ 1.4647427448297492,
+ 43.572287475886725
+ ],
+ [
+ 1.464727547735862,
+ 43.572279811781556
+ ],
+ [
+ 1.4647031565985742,
+ 43.57230783663374
+ ],
+ [
+ 1.4646134868048364,
+ 43.57225956978334
+ ],
+ [
+ 1.464704769398054,
+ 43.57216796914045
+ ],
+ [
+ 1.4650428363723051,
+ 43.57234701890346
+ ],
+ [
+ 1.4650102203072777,
+ 43.57237553065062
+ ],
+ [
+ 1.4650185019674495,
+ 43.57238035652921
+ ],
+ [
+ 1.4650071616689786,
+ 43.572394990577465
+ ],
+ [
+ 1.4649941439191423,
+ 43.57239348584616
+ ],
+ [
+ 1.4649492956472159,
+ 43.57243707743643
+ ]
]
],
"type": "Polygon"
@@ -744,11 +1891,26 @@
"geometry": {
"coordinates": [
[
- [1.465173231997511, 43.572405532318356],
- [1.465390038759523, 43.57218393801651],
- [1.4657930570455164, 43.57239471603663],
- [1.4655750456870464, 43.57261469186835],
- [1.465173231997511, 43.572405532318356]
+ [
+ 1.465173231997511,
+ 43.572405532318356
+ ],
+ [
+ 1.465390038759523,
+ 43.57218393801651
+ ],
+ [
+ 1.4657930570455164,
+ 43.57239471603663
+ ],
+ [
+ 1.4655750456870464,
+ 43.57261469186835
+ ],
+ [
+ 1.465173231997511,
+ 43.572405532318356
+ ]
]
],
"type": "Polygon"
@@ -763,15 +1925,42 @@
"geometry": {
"coordinates": [
[
- [1.4660808755718904, 43.57289392700244],
- [1.4660156694627915, 43.57286059317238],
- [1.4660299212444556, 43.57284758019259],
- [1.4657762063565656, 43.57271691446138],
- [1.4659903828032839, 43.57249638110545],
- [1.4662918272833565, 43.57265210051375],
- [1.4661155344265069, 43.572832453009624],
- [1.4661337904874472, 43.5728416597087],
- [1.4660808755718904, 43.57289392700244]
+ [
+ 1.4660808755718904,
+ 43.57289392700244
+ ],
+ [
+ 1.4660156694627915,
+ 43.57286059317238
+ ],
+ [
+ 1.4660299212444556,
+ 43.57284758019259
+ ],
+ [
+ 1.4657762063565656,
+ 43.57271691446138
+ ],
+ [
+ 1.4659903828032839,
+ 43.57249638110545
+ ],
+ [
+ 1.4662918272833565,
+ 43.57265210051375
+ ],
+ [
+ 1.4661155344265069,
+ 43.572832453009624
+ ],
+ [
+ 1.4661337904874472,
+ 43.5728416597087
+ ],
+ [
+ 1.4660808755718904,
+ 43.57289392700244
+ ]
]
],
"type": "Polygon"
@@ -779,19 +1968,49 @@
},
{
"type": "Feature",
- "properties": { "name": "TWB", "height": 9.3 },
+ "properties": {
+ "name": "TWB",
+ "height": 9.3
+ },
"geometry": {
"coordinates": [
[
- [1.4667790220126165, 43.573381554488236],
- [1.4662402448018668, 43.57310027157504],
- [1.4665555394401508, 43.57278650216381],
- [1.466754680305968, 43.57289307062024],
- [1.4667840988431067, 43.572861373355835],
- [1.4668504791314092, 43.57289525663802],
- [1.4668187976302818, 43.57292913990116],
- [1.467089381210343, 43.57306820313613],
- [1.4667790220126165, 43.573381554488236]
+ [
+ 1.4667790220126165,
+ 43.573381554488236
+ ],
+ [
+ 1.4662402448018668,
+ 43.57310027157504
+ ],
+ [
+ 1.4665555394401508,
+ 43.57278650216381
+ ],
+ [
+ 1.466754680305968,
+ 43.57289307062024
+ ],
+ [
+ 1.4667840988431067,
+ 43.572861373355835
+ ],
+ [
+ 1.4668504791314092,
+ 43.57289525663802
+ ],
+ [
+ 1.4668187976302818,
+ 43.57292913990116
+ ],
+ [
+ 1.467089381210343,
+ 43.57306820313613
+ ],
+ [
+ 1.4667790220126165,
+ 43.573381554488236
+ ]
]
],
"type": "Polygon"
@@ -808,11 +2027,26 @@
"geometry": {
"coordinates": [
[
- [1.4660763534338344, 43.57210546251159],
- [1.4662304004947657, 43.572182764900674],
- [1.466074694559353, 43.572341349594296],
- [1.4659222410874975, 43.572261324181],
- [1.4660763534338344, 43.57210546251159]
+ [
+ 1.4660763534338344,
+ 43.57210546251159
+ ],
+ [
+ 1.4662304004947657,
+ 43.572182764900674
+ ],
+ [
+ 1.466074694559353,
+ 43.572341349594296
+ ],
+ [
+ 1.4659222410874975,
+ 43.572261324181
+ ],
+ [
+ 1.4660763534338344,
+ 43.57210546251159
+ ]
]
],
"type": "Polygon"
@@ -828,13 +2062,34 @@
"geometry": {
"coordinates": [
[
- [1.4672750420205887, 43.57112508248565],
- [1.4667116697185634, 43.57169718309038],
- [1.4666678097752026, 43.57167255585233],
- [1.4661885269652828, 43.5721623419351],
- [1.466048479126556, 43.57208994194724],
- [1.4670888906692028, 43.57102942553689],
- [1.4672750420205887, 43.57112508248565]
+ [
+ 1.4672750420205887,
+ 43.57112508248565
+ ],
+ [
+ 1.4667116697185634,
+ 43.57169718309038
+ ],
+ [
+ 1.4666678097752026,
+ 43.57167255585233
+ ],
+ [
+ 1.4661885269652828,
+ 43.5721623419351
+ ],
+ [
+ 1.466048479126556,
+ 43.57208994194724
+ ],
+ [
+ 1.4670888906692028,
+ 43.57102942553689
+ ],
+ [
+ 1.4672750420205887,
+ 43.57112508248565
+ ]
]
],
"type": "Polygon"
@@ -842,33 +2097,106 @@
},
{
"type": "Feature",
- "properties": { "name": "Résidence 2", "short_name": "R2", "height": 21 },
+ "properties": {
+ "name": "Résidence 2",
+ "short_name": "R2",
+ "height": 21
+ },
"geometry": {
"coordinates": [
[
- [1.4691548261369292, 43.57151204154812],
- [1.469151020125281, 43.571215127557906],
- [1.4690738125439395, 43.571215384155465],
- [1.4690734583809615, 43.571202297671505],
- [1.4690139589609714, 43.571170222942584],
- [1.469273257353251, 43.57090994629286],
- [1.4693519017169194, 43.57094893229717],
- [1.469371414980003, 43.570948075462155],
- [1.4693850151326728, 43.57093479451825],
- [1.4694193111712934, 43.570952359637204],
- [1.4694417809891434, 43.57092922508923],
- [1.4694890858697818, 43.57095450172437],
- [1.4693474251876637, 43.57109719104517],
- [1.469348500686607, 43.571134074141355],
- [1.4693617651821285, 43.571140567642146],
- [1.4693639576852604, 43.57149868257383],
- [1.4693940415750149, 43.571497627918035],
- [1.4693916154538442, 43.57156618051741],
- [1.469246952206987, 43.57157010053592],
- [1.469246048251165, 43.57152645517428],
- [1.4692994228922203, 43.571526806726354],
- [1.4692994228922203, 43.571512393099795],
- [1.4691548261369292, 43.57151204154812]
+ [
+ 1.4691548261369292,
+ 43.57151204154812
+ ],
+ [
+ 1.469151020125281,
+ 43.571215127557906
+ ],
+ [
+ 1.4690738125439395,
+ 43.571215384155465
+ ],
+ [
+ 1.4690734583809615,
+ 43.571202297671505
+ ],
+ [
+ 1.4690139589609714,
+ 43.571170222942584
+ ],
+ [
+ 1.469273257353251,
+ 43.57090994629286
+ ],
+ [
+ 1.4693519017169194,
+ 43.57094893229717
+ ],
+ [
+ 1.469371414980003,
+ 43.570948075462155
+ ],
+ [
+ 1.4693850151326728,
+ 43.57093479451825
+ ],
+ [
+ 1.4694193111712934,
+ 43.570952359637204
+ ],
+ [
+ 1.4694417809891434,
+ 43.57092922508923
+ ],
+ [
+ 1.4694890858697818,
+ 43.57095450172437
+ ],
+ [
+ 1.4693474251876637,
+ 43.57109719104517
+ ],
+ [
+ 1.469348500686607,
+ 43.571134074141355
+ ],
+ [
+ 1.4693617651821285,
+ 43.571140567642146
+ ],
+ [
+ 1.4693639576852604,
+ 43.57149868257383
+ ],
+ [
+ 1.4693940415750149,
+ 43.571497627918035
+ ],
+ [
+ 1.4693916154538442,
+ 43.57156618051741
+ ],
+ [
+ 1.469246952206987,
+ 43.57157010053592
+ ],
+ [
+ 1.469246048251165,
+ 43.57152645517428
+ ],
+ [
+ 1.4692994228922203,
+ 43.571526806726354
+ ],
+ [
+ 1.4692994228922203,
+ 43.571512393099795
+ ],
+ [
+ 1.4691548261369292,
+ 43.57151204154812
+ ]
]
],
"type": "Polygon"
@@ -885,17 +2213,50 @@
"geometry": {
"coordinates": [
[
- [1.4688460220451702, 43.5703509645102],
- [1.468819917214546, 43.570336501092754],
- [1.468794580172613, 43.57036209021345],
- [1.4686074233084696, 43.5702657197472],
- [1.468631964221231, 43.570239674890985],
- [1.4685763151086348, 43.57020987355162],
- [1.4687688200070852, 43.57001522213778],
- [1.4685045108459178, 43.569877426330976],
- [1.4686761655047462, 43.56970147122678],
- [1.469211611000759, 43.569981303199114],
- [1.4688460220451702, 43.5703509645102]
+ [
+ 1.4688460220451702,
+ 43.5703509645102
+ ],
+ [
+ 1.468819917214546,
+ 43.570336501092754
+ ],
+ [
+ 1.468794580172613,
+ 43.57036209021345
+ ],
+ [
+ 1.4686074233084696,
+ 43.5702657197472
+ ],
+ [
+ 1.468631964221231,
+ 43.570239674890985
+ ],
+ [
+ 1.4685763151086348,
+ 43.57020987355162
+ ],
+ [
+ 1.4687688200070852,
+ 43.57001522213778
+ ],
+ [
+ 1.4685045108459178,
+ 43.569877426330976
+ ],
+ [
+ 1.4686761655047462,
+ 43.56970147122678
+ ],
+ [
+ 1.469211611000759,
+ 43.569981303199114
+ ],
+ [
+ 1.4688460220451702,
+ 43.5703509645102
+ ]
]
],
"type": "Polygon"
@@ -911,11 +2272,26 @@
"geometry": {
"coordinates": [
[
- [1.468658722773597, 43.57218777216994],
- [1.4686611289760663, 43.572041334011914],
- [1.4689763414799017, 43.57204656395203],
- [1.4689727321769226, 43.57219125878862],
- [1.468658722773597, 43.57218777216994]
+ [
+ 1.468658722773597,
+ 43.57218777216994
+ ],
+ [
+ 1.4686611289760663,
+ 43.572041334011914
+ ],
+ [
+ 1.4689763414799017,
+ 43.57204656395203
+ ],
+ [
+ 1.4689727321769226,
+ 43.57219125878862
+ ],
+ [
+ 1.468658722773597,
+ 43.57218777216994
+ ]
]
],
"type": "Polygon"
@@ -931,15 +2307,42 @@
"geometry": {
"coordinates": [
[
- [1.4686543650473425, 43.57232454804637],
- [1.4686552539396587, 43.57229943179183],
- [1.4686356983220037, 43.57230007579855],
- [1.4686365872131546, 43.572229879032705],
- [1.4689548104477694, 43.57223116704753],
- [1.4689530326642455, 43.57229621175833],
- [1.468935254830086, 43.57229621175833],
- [1.468935254830086, 43.57232519205277],
- [1.4686543650473425, 43.57232454804637]
+ [
+ 1.4686543650473425,
+ 43.57232454804637
+ ],
+ [
+ 1.4686552539396587,
+ 43.57229943179183
+ ],
+ [
+ 1.4686356983220037,
+ 43.57230007579855
+ ],
+ [
+ 1.4686365872131546,
+ 43.572229879032705
+ ],
+ [
+ 1.4689548104477694,
+ 43.57223116704753
+ ],
+ [
+ 1.4689530326642455,
+ 43.57229621175833
+ ],
+ [
+ 1.468935254830086,
+ 43.57229621175833
+ ],
+ [
+ 1.468935254830086,
+ 43.57232519205277
+ ],
+ [
+ 1.4686543650473425,
+ 43.57232454804637
+ ]
]
],
"type": "Polygon"
@@ -955,15 +2358,42 @@
"geometry": {
"coordinates": [
[
- [1.4687611325545618, 43.57254032042974],
- [1.4687601453008483, 43.572513855542326],
- [1.4687404002407334, 43.572514570809744],
- [1.4687413874931963, 43.57244733563914],
- [1.469059282965219, 43.572444474566254],
- [1.469058295711477, 43.572513855542326],
- [1.46904052515751, 43.57251242500749],
- [1.46904052515751, 43.57254032042974],
- [1.4687611325545618, 43.57254032042974]
+ [
+ 1.4687611325545618,
+ 43.57254032042974
+ ],
+ [
+ 1.4687601453008483,
+ 43.572513855542326
+ ],
+ [
+ 1.4687404002407334,
+ 43.572514570809744
+ ],
+ [
+ 1.4687413874931963,
+ 43.57244733563914
+ ],
+ [
+ 1.469059282965219,
+ 43.572444474566254
+ ],
+ [
+ 1.469058295711477,
+ 43.572513855542326
+ ],
+ [
+ 1.46904052515751,
+ 43.57251242500749
+ ],
+ [
+ 1.46904052515751,
+ 43.57254032042974
+ ],
+ [
+ 1.4687611325545618,
+ 43.57254032042974
+ ]
]
],
"type": "Polygon"
@@ -980,11 +2410,26 @@
"geometry": {
"coordinates": [
[
- [1.470777021160444, 43.568315847164854],
- [1.4704135681352284, 43.56812823860483],
- [1.4706756783485844, 43.56786640931284],
- [1.4710373868683178, 43.568056596472786],
- [1.470777021160444, 43.568315847164854]
+ [
+ 1.470777021160444,
+ 43.568315847164854
+ ],
+ [
+ 1.4704135681352284,
+ 43.56812823860483
+ ],
+ [
+ 1.4706756783485844,
+ 43.56786640931284
+ ],
+ [
+ 1.4710373868683178,
+ 43.568056596472786
+ ],
+ [
+ 1.470777021160444,
+ 43.568315847164854
+ ]
]
],
"type": "Polygon"
@@ -1000,21 +2445,66 @@
"geometry": {
"coordinates": [
[
- [1.4659815568585657, 43.57015445162551],
- [1.4653614974729123, 43.56983170088213],
- [1.4654827629952933, 43.569708893674544],
- [1.4655928712043078, 43.56976650661821],
- [1.4657090064875717, 43.56964793008876],
- [1.4655630587222959, 43.569572089387464],
- [1.4658916187624413, 43.56923880029953],
- [1.465990987165128, 43.569290174569886],
- [1.465964316873908, 43.569317500240174],
- [1.4664466341962736, 43.56956829820601],
- [1.4664708824838897, 43.569542005137265],
- [1.4666176133629847, 43.56961781170179],
- [1.4664726690363636, 43.569764820977696],
- [1.4664009642860947, 43.569727926506545],
- [1.4659815568585657, 43.57015445162551]
+ [
+ 1.4659815568585657,
+ 43.57015445162551
+ ],
+ [
+ 1.4653614974729123,
+ 43.56983170088213
+ ],
+ [
+ 1.4654827629952933,
+ 43.569708893674544
+ ],
+ [
+ 1.4655928712043078,
+ 43.56976650661821
+ ],
+ [
+ 1.4657090064875717,
+ 43.56964793008876
+ ],
+ [
+ 1.4655630587222959,
+ 43.569572089387464
+ ],
+ [
+ 1.4658916187624413,
+ 43.56923880029953
+ ],
+ [
+ 1.465990987165128,
+ 43.569290174569886
+ ],
+ [
+ 1.465964316873908,
+ 43.569317500240174
+ ],
+ [
+ 1.4664466341962736,
+ 43.56956829820601
+ ],
+ [
+ 1.4664708824838897,
+ 43.569542005137265
+ ],
+ [
+ 1.4666176133629847,
+ 43.56961781170179
+ ],
+ [
+ 1.4664726690363636,
+ 43.569764820977696
+ ],
+ [
+ 1.4664009642860947,
+ 43.569727926506545
+ ],
+ [
+ 1.4659815568585657,
+ 43.57015445162551
+ ]
]
],
"type": "Polygon"
@@ -1031,25 +2521,82 @@
"geometry": {
"coordinates": [
[
- [1.4652059312881534, 43.56927817758316],
- [1.4652771673482192, 43.568758514443786],
- [1.4652755558664978, 43.56872840618527],
- [1.4652544334708466, 43.56870350650166],
- [1.465223420429254, 43.56867909265526],
- [1.4646255192470505, 43.56839084533405],
- [1.464712314320849, 43.56829975883787],
- [1.4653006789741596, 43.56860675768283],
- [1.465345160733733, 43.56862148311032],
- [1.4653789055171274, 43.56862148311032],
- [1.4654214699606314, 43.56861453715484],
- [1.46607538873522, 43.56839810804419],
- [1.466127932900008, 43.56848780947897],
- [1.4654728965006427, 43.56870471964285],
- [1.4654398971509863, 43.568723550434584],
- [1.4654222191203132, 43.568746804851486],
- [1.465410664955641, 43.568773267547044],
- [1.4653414365754713, 43.569288422369],
- [1.4652059312881534, 43.56927817758316]
+ [
+ 1.4652059312881534,
+ 43.56927817758316
+ ],
+ [
+ 1.4652771673482192,
+ 43.568758514443786
+ ],
+ [
+ 1.4652755558664978,
+ 43.56872840618527
+ ],
+ [
+ 1.4652544334708466,
+ 43.56870350650166
+ ],
+ [
+ 1.465223420429254,
+ 43.56867909265526
+ ],
+ [
+ 1.4646255192470505,
+ 43.56839084533405
+ ],
+ [
+ 1.464712314320849,
+ 43.56829975883787
+ ],
+ [
+ 1.4653006789741596,
+ 43.56860675768283
+ ],
+ [
+ 1.465345160733733,
+ 43.56862148311032
+ ],
+ [
+ 1.4653789055171274,
+ 43.56862148311032
+ ],
+ [
+ 1.4654214699606314,
+ 43.56861453715484
+ ],
+ [
+ 1.46607538873522,
+ 43.56839810804419
+ ],
+ [
+ 1.466127932900008,
+ 43.56848780947897
+ ],
+ [
+ 1.4654728965006427,
+ 43.56870471964285
+ ],
+ [
+ 1.4654398971509863,
+ 43.568723550434584
+ ],
+ [
+ 1.4654222191203132,
+ 43.568746804851486
+ ],
+ [
+ 1.465410664955641,
+ 43.568773267547044
+ ],
+ [
+ 1.4653414365754713,
+ 43.569288422369
+ ],
+ [
+ 1.4652059312881534,
+ 43.56927817758316
+ ]
]
],
"type": "Polygon"
@@ -1066,48 +2613,174 @@
"geometry": {
"coordinates": [
[
- [1.4660884641955931, 43.56818945308683],
- [1.466104826801086, 43.568061086312355],
- [1.4662136127645624, 43.56806870683005],
- [1.4662085438606312, 43.56811158752487],
- [1.4662950720631898, 43.56811711608097],
- [1.4663518059319074, 43.567656057446555],
- [1.4663389515439178, 43.56763399603204],
- [1.4663103818369336, 43.567609291603134],
- [1.4657264140986683, 43.567307131467174],
- [1.4658083877701813, 43.567225436994505],
- [1.4658738492346686, 43.56726049947389],
- [1.4659239711075998, 43.56721086960954],
- [1.465856324727639, 43.56717703405087],
- [1.465923595978694, 43.56711073511656],
- [1.4660674528012407, 43.56718260848436],
- [1.466000185333968, 43.5672504945866],
- [1.4659509497322176, 43.567224337511504],
- [1.4658997105244964, 43.567272987631725],
- [1.466391051942992, 43.567529341536044],
- [1.466421349302749, 43.56754073057445],
- [1.4664574964445762, 43.56754790037698],
- [1.466491712936886, 43.56754242881479],
- [1.4670391792810733, 43.56735551119297],
- [1.4670046821341884, 43.56730053080719],
- [1.466953646072085, 43.5673171448928],
- [1.4669052024668758, 43.56724309292099],
- [1.4670690050857047, 43.56718633987646],
- [1.4671164215722001, 43.5672634019449],
- [1.467037479687491, 43.56728988157391],
- [1.467070578416724, 43.56734506929624],
- [1.4671494059136592, 43.56731835274954],
- [1.4672068818071864, 43.56741201543883],
- [1.4665552336251721, 43.567628078660476],
- [1.4665177353948593, 43.567652692913924],
- [1.4664994087501668, 43.56767440518411],
- [1.4664885026903107, 43.567705321286894],
- [1.4664202579607206, 43.56821112285948],
- [1.4662840888136373, 43.56820222809634],
- [1.4662913051841429, 43.56814203989572],
- [1.4662053724041755, 43.568136075368585],
- [1.4661975243632241, 43.56819663093211],
- [1.4660884641955931, 43.56818945308683]
+ [
+ 1.4660884641955931,
+ 43.56818945308683
+ ],
+ [
+ 1.466104826801086,
+ 43.568061086312355
+ ],
+ [
+ 1.4662136127645624,
+ 43.56806870683005
+ ],
+ [
+ 1.4662085438606312,
+ 43.56811158752487
+ ],
+ [
+ 1.4662950720631898,
+ 43.56811711608097
+ ],
+ [
+ 1.4663518059319074,
+ 43.567656057446555
+ ],
+ [
+ 1.4663389515439178,
+ 43.56763399603204
+ ],
+ [
+ 1.4663103818369336,
+ 43.567609291603134
+ ],
+ [
+ 1.4657264140986683,
+ 43.567307131467174
+ ],
+ [
+ 1.4658083877701813,
+ 43.567225436994505
+ ],
+ [
+ 1.4658738492346686,
+ 43.56726049947389
+ ],
+ [
+ 1.4659239711075998,
+ 43.56721086960954
+ ],
+ [
+ 1.465856324727639,
+ 43.56717703405087
+ ],
+ [
+ 1.465923595978694,
+ 43.56711073511656
+ ],
+ [
+ 1.4660674528012407,
+ 43.56718260848436
+ ],
+ [
+ 1.466000185333968,
+ 43.5672504945866
+ ],
+ [
+ 1.4659509497322176,
+ 43.567224337511504
+ ],
+ [
+ 1.4658997105244964,
+ 43.567272987631725
+ ],
+ [
+ 1.466391051942992,
+ 43.567529341536044
+ ],
+ [
+ 1.466421349302749,
+ 43.56754073057445
+ ],
+ [
+ 1.4664574964445762,
+ 43.56754790037698
+ ],
+ [
+ 1.466491712936886,
+ 43.56754242881479
+ ],
+ [
+ 1.4670391792810733,
+ 43.56735551119297
+ ],
+ [
+ 1.4670046821341884,
+ 43.56730053080719
+ ],
+ [
+ 1.466953646072085,
+ 43.5673171448928
+ ],
+ [
+ 1.4669052024668758,
+ 43.56724309292099
+ ],
+ [
+ 1.4670690050857047,
+ 43.56718633987646
+ ],
+ [
+ 1.4671164215722001,
+ 43.5672634019449
+ ],
+ [
+ 1.467037479687491,
+ 43.56728988157391
+ ],
+ [
+ 1.467070578416724,
+ 43.56734506929624
+ ],
+ [
+ 1.4671494059136592,
+ 43.56731835274954
+ ],
+ [
+ 1.4672068818071864,
+ 43.56741201543883
+ ],
+ [
+ 1.4665552336251721,
+ 43.567628078660476
+ ],
+ [
+ 1.4665177353948593,
+ 43.567652692913924
+ ],
+ [
+ 1.4664994087501668,
+ 43.56767440518411
+ ],
+ [
+ 1.4664885026903107,
+ 43.567705321286894
+ ],
+ [
+ 1.4664202579607206,
+ 43.56821112285948
+ ],
+ [
+ 1.4662840888136373,
+ 43.56820222809634
+ ],
+ [
+ 1.4662913051841429,
+ 43.56814203989572
+ ],
+ [
+ 1.4662053724041755,
+ 43.568136075368585
+ ],
+ [
+ 1.4661975243632241,
+ 43.56819663093211
+ ],
+ [
+ 1.4660884641955931,
+ 43.56818945308683
+ ]
]
],
"type": "Polygon"
@@ -1123,30 +2796,102 @@
"geometry": {
"coordinates": [
[
- [1.464329854169904, 43.571950139444],
- [1.4640449063722087, 43.571801420025395],
- [1.46397134881812, 43.571876327236964],
- [1.4638249399895642, 43.57179942737292],
- [1.463898645992856, 43.57172486372917],
- [1.4638502579955173, 43.57169902119804],
- [1.4642098225365316, 43.571335377347964],
- [1.4644283262586555, 43.57144993399976],
- [1.4645197190804424, 43.571358043022485],
- [1.464139107766755, 43.57115980320398],
- [1.4640928396617028, 43.57120668556615],
- [1.4638877957212628, 43.5710998492529],
- [1.4640599679144373, 43.5709254151011],
- [1.464110061065071, 43.570952915896584],
- [1.4641451779136787, 43.570955722099825],
- [1.464176938004158, 43.5709654502686],
- [1.4641983696093064, 43.570983409961485],
- [1.4642099891544262, 43.571003427529774],
- [1.4647907343973259, 43.57130767498563],
- [1.4646671934806363, 43.5714330625207],
- [1.464640539028693, 43.57141945940299],
- [1.4645497318657874, 43.571512679100124],
- [1.4646902903338912, 43.57158643434937],
- [1.464329854169904, 43.571950139444]
+ [
+ 1.464329854169904,
+ 43.571950139444
+ ],
+ [
+ 1.4640449063722087,
+ 43.571801420025395
+ ],
+ [
+ 1.46397134881812,
+ 43.571876327236964
+ ],
+ [
+ 1.4638249399895642,
+ 43.57179942737292
+ ],
+ [
+ 1.463898645992856,
+ 43.57172486372917
+ ],
+ [
+ 1.4638502579955173,
+ 43.57169902119804
+ ],
+ [
+ 1.4642098225365316,
+ 43.571335377347964
+ ],
+ [
+ 1.4644283262586555,
+ 43.57144993399976
+ ],
+ [
+ 1.4645197190804424,
+ 43.571358043022485
+ ],
+ [
+ 1.464139107766755,
+ 43.57115980320398
+ ],
+ [
+ 1.4640928396617028,
+ 43.57120668556615
+ ],
+ [
+ 1.4638877957212628,
+ 43.5710998492529
+ ],
+ [
+ 1.4640599679144373,
+ 43.5709254151011
+ ],
+ [
+ 1.464110061065071,
+ 43.570952915896584
+ ],
+ [
+ 1.4641451779136787,
+ 43.570955722099825
+ ],
+ [
+ 1.464176938004158,
+ 43.5709654502686
+ ],
+ [
+ 1.4641983696093064,
+ 43.570983409961485
+ ],
+ [
+ 1.4642099891544262,
+ 43.571003427529774
+ ],
+ [
+ 1.4647907343973259,
+ 43.57130767498563
+ ],
+ [
+ 1.4646671934806363,
+ 43.5714330625207
+ ],
+ [
+ 1.464640539028693,
+ 43.57141945940299
+ ],
+ [
+ 1.4645497318657874,
+ 43.571512679100124
+ ],
+ [
+ 1.4646902903338912,
+ 43.57158643434937
+ ],
+ [
+ 1.464329854169904,
+ 43.571950139444
+ ]
]
],
"type": "Polygon"
@@ -1154,21 +2899,56 @@
},
{
"type": "Feature",
- "properties": { "height": 4.4 },
+ "properties": {
+ "height": 4.4
+ },
"geometry": {
"coordinates": [
[
- [1.4685297264329904, 43.568859980621994],
- [1.468407708647021, 43.56879754124512],
- [1.4685133113986524, 43.56868798409482],
- [1.4684678814834342, 43.568664541938006],
- [1.4685119228338692, 43.56861871343267],
- [1.4686209763518434, 43.56867408236974],
- [1.4686528275841226, 43.568641044708414],
- [1.4687001272454552, 43.56866551690638],
- [1.468582063040202, 43.56878789381349],
- [1.4685941329814511, 43.568793845437455],
- [1.4685297264329904, 43.568859980621994]
+ [
+ 1.4685297264329904,
+ 43.568859980621994
+ ],
+ [
+ 1.468407708647021,
+ 43.56879754124512
+ ],
+ [
+ 1.4685133113986524,
+ 43.56868798409482
+ ],
+ [
+ 1.4684678814834342,
+ 43.568664541938006
+ ],
+ [
+ 1.4685119228338692,
+ 43.56861871343267
+ ],
+ [
+ 1.4686209763518434,
+ 43.56867408236974
+ ],
+ [
+ 1.4686528275841226,
+ 43.568641044708414
+ ],
+ [
+ 1.4687001272454552,
+ 43.56866551690638
+ ],
+ [
+ 1.468582063040202,
+ 43.56878789381349
+ ],
+ [
+ 1.4685941329814511,
+ 43.568793845437455
+ ],
+ [
+ 1.4685297264329904,
+ 43.568859980621994
+ ]
]
],
"type": "Polygon"
@@ -1176,18 +2956,44 @@
},
{
"type": "Feature",
- "properties": { "height": 4.7 },
+ "properties": {
+ "height": 4.7
+ },
"geometry": {
"coordinates": [
[
- [1.4680022742402628, 43.56907660293419],
- [1.4679957660217724, 43.56903165404211],
- [1.4682370711949773, 43.56901733435373],
- [1.468232712605328, 43.568979438426936],
- [1.4683740314924876, 43.56898211057671],
- [1.4683703161872188, 43.569064153302946],
- [1.4682955496109287, 43.5690573514766],
- [1.4680022742402628, 43.56907660293419]
+ [
+ 1.4680022742402628,
+ 43.56907660293419
+ ],
+ [
+ 1.4679957660217724,
+ 43.56903165404211
+ ],
+ [
+ 1.4682370711949773,
+ 43.56901733435373
+ ],
+ [
+ 1.468232712605328,
+ 43.568979438426936
+ ],
+ [
+ 1.4683740314924876,
+ 43.56898211057671
+ ],
+ [
+ 1.4683703161872188,
+ 43.569064153302946
+ ],
+ [
+ 1.4682955496109287,
+ 43.5690573514766
+ ],
+ [
+ 1.4680022742402628,
+ 43.56907660293419
+ ]
]
],
"type": "Polygon"
@@ -1195,16 +3001,36 @@
},
{
"type": "Feature",
- "properties": { "height": 4.1 },
+ "properties": {
+ "height": 4.1
+ },
"geometry": {
"coordinates": [
[
- [1.4679232079615474, 43.56908754093999],
- [1.4677339028045822, 43.56910888923693],
- [1.4677045661434533, 43.56903747007894],
- [1.4677689391599245, 43.56905994040113],
- [1.4679141161652751, 43.569041610489336],
- [1.4679232079615474, 43.56908754093999]
+ [
+ 1.4679232079615474,
+ 43.56908754093999
+ ],
+ [
+ 1.4677339028045822,
+ 43.56910888923693
+ ],
+ [
+ 1.4677045661434533,
+ 43.56903747007894
+ ],
+ [
+ 1.4677689391599245,
+ 43.56905994040113
+ ],
+ [
+ 1.4679141161652751,
+ 43.569041610489336
+ ],
+ [
+ 1.4679232079615474,
+ 43.56908754093999
+ ]
]
],
"type": "Polygon"
@@ -1212,25 +3038,72 @@
},
{
"type": "Feature",
- "properties": { "height": 5.3 },
+ "properties": {
+ "height": 5.3
+ },
"geometry": {
"coordinates": [
[
- [1.4675318979190592, 43.568724093009536],
- [1.46748876607964, 43.568656761828265],
- [1.4675063680763003, 43.5686511745765],
- [1.467498321449682, 43.56863817814093],
- [1.4675328964582093, 43.5686266645032],
- [1.4675166355661418, 43.56860042869397],
- [1.4676458845129332, 43.568556702320194],
- [1.4676740625050684, 43.56860054780867],
- [1.467658304526907, 43.56860637798914],
- [1.4676968507753827, 43.568665518433875],
- [1.4676589645729337, 43.56867839340171],
- [1.4676482357371015, 43.56866284627009],
- [1.467590906517188, 43.56868218865483],
- [1.4676028088195494, 43.56870065086676],
- [1.4675318979190592, 43.568724093009536]
+ [
+ 1.4675318979190592,
+ 43.568724093009536
+ ],
+ [
+ 1.46748876607964,
+ 43.568656761828265
+ ],
+ [
+ 1.4675063680763003,
+ 43.5686511745765
+ ],
+ [
+ 1.467498321449682,
+ 43.56863817814093
+ ],
+ [
+ 1.4675328964582093,
+ 43.5686266645032
+ ],
+ [
+ 1.4675166355661418,
+ 43.56860042869397
+ ],
+ [
+ 1.4676458845129332,
+ 43.568556702320194
+ ],
+ [
+ 1.4676740625050684,
+ 43.56860054780867
+ ],
+ [
+ 1.467658304526907,
+ 43.56860637798914
+ ],
+ [
+ 1.4676968507753827,
+ 43.568665518433875
+ ],
+ [
+ 1.4676589645729337,
+ 43.56867839340171
+ ],
+ [
+ 1.4676482357371015,
+ 43.56866284627009
+ ],
+ [
+ 1.467590906517188,
+ 43.56868218865483
+ ],
+ [
+ 1.4676028088195494,
+ 43.56870065086676
+ ],
+ [
+ 1.4675318979190592,
+ 43.568724093009536
+ ]
]
],
"type": "Polygon"
@@ -1238,15 +3111,32 @@
},
{
"type": "Feature",
- "properties": { "height": 6 },
+ "properties": {
+ "height": 6
+ },
"geometry": {
"coordinates": [
[
- [1.4663325230153816, 43.571268895183806],
- [1.4660092832303633, 43.57109860984849],
- [1.4661271742887436, 43.570986630418645],
- [1.4664508007951724, 43.57115204837379],
- [1.4663325230153816, 43.571268895183806]
+ [
+ 1.4663325230153816,
+ 43.571268895183806
+ ],
+ [
+ 1.4660092832303633,
+ 43.57109860984849
+ ],
+ [
+ 1.4661271742887436,
+ 43.570986630418645
+ ],
+ [
+ 1.4664508007951724,
+ 43.57115204837379
+ ],
+ [
+ 1.4663325230153816,
+ 43.571268895183806
+ ]
]
],
"type": "Polygon"
@@ -1254,19 +3144,48 @@
},
{
"type": "Feature",
- "properties": { "height": 5.2 },
+ "properties": {
+ "height": 5.2
+ },
"geometry": {
"coordinates": [
[
- [1.4675987812041171, 43.57276806327212],
- [1.4675059990602222, 43.572720328369684],
- [1.4677417617085098, 43.57247603458134],
- [1.4678361923023715, 43.57252399287108],
- [1.4677399030951221, 43.572624379867165],
- [1.4677717543265487, 43.572640654699484],
- [1.4677279198514839, 43.57268650285485],
- [1.4676952304293707, 43.57267010658046],
- [1.4675987812041171, 43.57276806327212]
+ [
+ 1.4675987812041171,
+ 43.57276806327212
+ ],
+ [
+ 1.4675059990602222,
+ 43.572720328369684
+ ],
+ [
+ 1.4677417617085098,
+ 43.57247603458134
+ ],
+ [
+ 1.4678361923023715,
+ 43.57252399287108
+ ],
+ [
+ 1.4677399030951221,
+ 43.572624379867165
+ ],
+ [
+ 1.4677717543265487,
+ 43.572640654699484
+ ],
+ [
+ 1.4677279198514839,
+ 43.57268650285485
+ ],
+ [
+ 1.4676952304293707,
+ 43.57267010658046
+ ],
+ [
+ 1.4675987812041171,
+ 43.57276806327212
+ ]
]
],
"type": "Polygon"
@@ -1274,15 +3193,32 @@
},
{
"type": "Feature",
- "properties": { "height": 3 },
+ "properties": {
+ "height": 3
+ },
"geometry": {
"coordinates": [
[
- [1.4679769806022023, 43.57276038349872],
- [1.4679190305363647, 43.57273101455678],
- [1.4679619458803757, 43.572686926819756],
- [1.468018890118401, 43.5727173888674],
- [1.4679769806022023, 43.57276038349872]
+ [
+ 1.4679769806022023,
+ 43.57276038349872
+ ],
+ [
+ 1.4679190305363647,
+ 43.57273101455678
+ ],
+ [
+ 1.4679619458803757,
+ 43.572686926819756
+ ],
+ [
+ 1.468018890118401,
+ 43.5727173888674
+ ],
+ [
+ 1.4679769806022023,
+ 43.57276038349872
+ ]
]
],
"type": "Polygon"
@@ -1290,15 +3226,32 @@
},
{
"type": "Feature",
- "properties": { "height": 3 },
+ "properties": {
+ "height": 3
+ },
"geometry": {
"coordinates": [
[
- [1.4679072142182008, 43.57283009875559],
- [1.4678503925950395, 43.572801071634444],
- [1.4678923299995006, 43.57275696207341],
- [1.467950464838168, 43.57278722562762],
- [1.4679072142182008, 43.57283009875559]
+ [
+ 1.4679072142182008,
+ 43.57283009875559
+ ],
+ [
+ 1.4678503925950395,
+ 43.572801071634444
+ ],
+ [
+ 1.4678923299995006,
+ 43.57275696207341
+ ],
+ [
+ 1.467950464838168,
+ 43.57278722562762
+ ],
+ [
+ 1.4679072142182008,
+ 43.57283009875559
+ ]
]
],
"type": "Polygon"
@@ -1315,19 +3268,58 @@
"geometry": {
"coordinates": [
[
- [1.465104347028955, 43.57064183282944],
- [1.4646308509144603, 43.570400991657465],
- [1.4646509674823278, 43.57038070808889],
- [1.4646107343465644, 43.57035920992794],
- [1.4651053877867923, 43.5698546242825],
- [1.4652814505043352, 43.56994714703927],
- [1.4648133986282517, 43.57042040381751],
- [1.4648926315285848, 43.57046107665741],
- [1.4649027270359625, 43.57045010494983],
- [1.464943374739363, 43.570472625821225],
- [1.4649957119767407, 43.57043836329561],
- [1.465199752982926, 43.57054703612661],
- [1.465104347028955, 43.57064183282944]
+ [
+ 1.465104347028955,
+ 43.57064183282944
+ ],
+ [
+ 1.4646308509144603,
+ 43.570400991657465
+ ],
+ [
+ 1.4646509674823278,
+ 43.57038070808889
+ ],
+ [
+ 1.4646107343465644,
+ 43.57035920992794
+ ],
+ [
+ 1.4651053877867923,
+ 43.5698546242825
+ ],
+ [
+ 1.4652814505043352,
+ 43.56994714703927
+ ],
+ [
+ 1.4648133986282517,
+ 43.57042040381751
+ ],
+ [
+ 1.4648926315285848,
+ 43.57046107665741
+ ],
+ [
+ 1.4649027270359625,
+ 43.57045010494983
+ ],
+ [
+ 1.464943374739363,
+ 43.570472625821225
+ ],
+ [
+ 1.4649957119767407,
+ 43.57043836329561
+ ],
+ [
+ 1.465199752982926,
+ 43.57054703612661
+ ],
+ [
+ 1.465104347028955,
+ 43.57064183282944
+ ]
]
],
"type": "Polygon"
@@ -1343,23 +3335,74 @@
"geometry": {
"coordinates": [
[
- [1.4645941262868405, 43.57091036281443],
- [1.4642428059379426, 43.57072739589549],
- [1.4644944971766165, 43.57047423440625],
- [1.464535655140594, 43.570497137439276],
- [1.4645585743076595, 43.57047455789461],
- [1.4645327580464027, 43.57046107601869],
- [1.464574599613968, 43.5704193369759],
- [1.464600080599297, 43.57043294031885],
- [1.4646307929768057, 43.570401185149024],
- [1.4651046854580727, 43.57064214136577],
- [1.4650174434226244, 43.570731421298575],
- [1.4648104739361543, 43.57062564752317],
- [1.4648319021075622, 43.570577490207484],
- [1.4647983744956434, 43.57056048606847],
- [1.4647276677315801, 43.57063318244428],
- [1.4648189699796035, 43.57068167012869],
- [1.4645941262868405, 43.57091036281443]
+ [
+ 1.4645941262868405,
+ 43.57091036281443
+ ],
+ [
+ 1.4642428059379426,
+ 43.57072739589549
+ ],
+ [
+ 1.4644944971766165,
+ 43.57047423440625
+ ],
+ [
+ 1.464535655140594,
+ 43.570497137439276
+ ],
+ [
+ 1.4645585743076595,
+ 43.57047455789461
+ ],
+ [
+ 1.4645327580464027,
+ 43.57046107601869
+ ],
+ [
+ 1.464574599613968,
+ 43.5704193369759
+ ],
+ [
+ 1.464600080599297,
+ 43.57043294031885
+ ],
+ [
+ 1.4646307929768057,
+ 43.570401185149024
+ ],
+ [
+ 1.4651046854580727,
+ 43.57064214136577
+ ],
+ [
+ 1.4650174434226244,
+ 43.570731421298575
+ ],
+ [
+ 1.4648104739361543,
+ 43.57062564752317
+ ],
+ [
+ 1.4648319021075622,
+ 43.570577490207484
+ ],
+ [
+ 1.4647983744956434,
+ 43.57056048606847
+ ],
+ [
+ 1.4647276677315801,
+ 43.57063318244428
+ ],
+ [
+ 1.4648189699796035,
+ 43.57068167012869
+ ],
+ [
+ 1.4645941262868405,
+ 43.57091036281443
+ ]
]
],
"type": "Polygon"
@@ -1367,15 +3410,32 @@
},
{
"type": "Feature",
- "properties": { "height": 10.4 },
+ "properties": {
+ "height": 10.4
+ },
"geometry": {
"coordinates": [
[
- [1.4646001572163527, 43.57043296507533],
- [1.4645746918624525, 43.57041914970716],
- [1.4646271625765337, 43.570367772765536],
- [1.4646509515490322, 43.57038073793643],
- [1.4646001572163527, 43.57043296507533]
+ [
+ 1.4646001572163527,
+ 43.57043296507533
+ ],
+ [
+ 1.4645746918624525,
+ 43.57041914970716
+ ],
+ [
+ 1.4646271625765337,
+ 43.570367772765536
+ ],
+ [
+ 1.4646509515490322,
+ 43.57038073793643
+ ],
+ [
+ 1.4646001572163527,
+ 43.57043296507533
+ ]
]
],
"type": "Polygon"
@@ -1391,53 +3451,182 @@
"geometry": {
"coordinates": [
[
- [1.4670812267973474, 43.568834057309914],
- [1.4668420260681216, 43.568709255639845],
- [1.4668570628054454, 43.568694808349534],
- [1.4668200147928019, 43.56867525297764],
- [1.4668104594236127, 43.5686852128575],
- [1.466783235252592, 43.568670625243726],
- [1.466792416319663, 43.5686617138972],
- [1.4667555188230779, 43.568642385056734],
- [1.466724164613538, 43.56867351201791],
- [1.466599183137447, 43.56860853909828],
- [1.4667754482590283, 43.56843039597965],
- [1.466793050255717, 43.56843926273814],
- [1.466863777383395, 43.56836739906316],
- [1.46684516955807, 43.56835671035563],
- [1.4669227282407178, 43.56827844641953],
- [1.4669416713419139, 43.568288527827036],
- [1.4670258711840916, 43.56820096736422],
- [1.4670086044633592, 43.56819234349703],
- [1.4670849961336785, 43.568113327946406],
- [1.467103939234903, 43.568123166455536],
- [1.4671879434825428, 43.56803870235777],
- [1.4671698385720333, 43.56802825651826],
- [1.4672474405099933, 43.56794933448171],
- [1.4672770315489458, 43.56796376293167],
- [1.4674511740026048, 43.567786900063],
- [1.4679049736688228, 43.56802329760109],
- [1.4677409536147934, 43.5681886094487],
- [1.4676792146088644, 43.56815556835687],
- [1.4676094224368512, 43.568226603798564],
- [1.4673143278903638, 43.56807323223049],
- [1.466968687621005, 43.56842487650562],
- [1.4668949742725488, 43.56838603631019],
- [1.4668267668076282, 43.56845574775858],
- [1.466900900516947, 43.568493653590565],
- [1.4668414609245986, 43.56855394738048],
- [1.4669426813666462, 43.568606169489215],
- [1.466964401782576, 43.56858477629564],
- [1.4671123289102184, 43.56866256377626],
- [1.4670936806951715, 43.568682465911905],
- [1.467274613795496, 43.5687761976738],
- [1.4671993608742184, 43.56885350264096],
- [1.4671081317373762, 43.56880573847684],
- [1.4670812267973474, 43.568834057309914]
+ [
+ 1.4670812267973474,
+ 43.568834057309914
+ ],
+ [
+ 1.4668420260681216,
+ 43.568709255639845
+ ],
+ [
+ 1.4668570628054454,
+ 43.568694808349534
+ ],
+ [
+ 1.4668200147928019,
+ 43.56867525297764
+ ],
+ [
+ 1.4668104594236127,
+ 43.5686852128575
+ ],
+ [
+ 1.466783235252592,
+ 43.568670625243726
+ ],
+ [
+ 1.466792416319663,
+ 43.5686617138972
+ ],
+ [
+ 1.4667555188230779,
+ 43.568642385056734
+ ],
+ [
+ 1.466724164613538,
+ 43.56867351201791
+ ],
+ [
+ 1.466599183137447,
+ 43.56860853909828
+ ],
+ [
+ 1.4667754482590283,
+ 43.56843039597965
+ ],
+ [
+ 1.466793050255717,
+ 43.56843926273814
+ ],
+ [
+ 1.466863777383395,
+ 43.56836739906316
+ ],
+ [
+ 1.46684516955807,
+ 43.56835671035563
+ ],
+ [
+ 1.4669227282407178,
+ 43.56827844641953
+ ],
+ [
+ 1.4669416713419139,
+ 43.568288527827036
+ ],
+ [
+ 1.4670258711840916,
+ 43.56820096736422
+ ],
+ [
+ 1.4670086044633592,
+ 43.56819234349703
+ ],
+ [
+ 1.4670849961336785,
+ 43.568113327946406
+ ],
+ [
+ 1.467103939234903,
+ 43.568123166455536
+ ],
+ [
+ 1.4671879434825428,
+ 43.56803870235777
+ ],
+ [
+ 1.4671698385720333,
+ 43.56802825651826
+ ],
+ [
+ 1.4672474405099933,
+ 43.56794933448171
+ ],
+ [
+ 1.4672770315489458,
+ 43.56796376293167
+ ],
+ [
+ 1.4674511740026048,
+ 43.567786900063
+ ],
+ [
+ 1.4679049736688228,
+ 43.56802329760109
+ ],
+ [
+ 1.4677409536147934,
+ 43.5681886094487
+ ],
+ [
+ 1.4676792146088644,
+ 43.56815556835687
+ ],
+ [
+ 1.4676094224368512,
+ 43.568226603798564
+ ],
+ [
+ 1.4673143278903638,
+ 43.56807323223049
+ ],
+ [
+ 1.466968687621005,
+ 43.56842487650562
+ ],
+ [
+ 1.4668949742725488,
+ 43.56838603631019
+ ],
+ [
+ 1.4668267668076282,
+ 43.56845574775858
+ ],
+ [
+ 1.466900900516947,
+ 43.568493653590565
+ ],
+ [
+ 1.4668414609245986,
+ 43.56855394738048
+ ],
+ [
+ 1.4669426813666462,
+ 43.568606169489215
+ ],
+ [
+ 1.466964401782576,
+ 43.56858477629564
+ ],
+ [
+ 1.4671123289102184,
+ 43.56866256377626
+ ],
+ [
+ 1.4670936806951715,
+ 43.568682465911905
+ ],
+ [
+ 1.467274613795496,
+ 43.5687761976738
+ ],
+ [
+ 1.4671993608742184,
+ 43.56885350264096
+ ],
+ [
+ 1.4671081317373762,
+ 43.56880573847684
+ ],
+ [
+ 1.4670812267973474,
+ 43.568834057309914
+ ]
]
],
"type": "Polygon"
}
}
]
-}
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..3108a3d
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1091 @@
+{
+ "name": "map-insa",
+ "version": "2.0.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "map-insa",
+ "version": "2.0.0",
+ "dependencies": {
+ "maptalks": "^1.12.1",
+ "maptalks.three": "^0.42.0",
+ "three": "^0.183.2"
+ },
+ "devDependencies": {
+ "@types/geojson": "^7946.0.16",
+ "@types/three": "^0.183.1",
+ "typescript": "^6.0.2",
+ "vite": "^8.0.3"
+ }
+ },
+ "node_modules/@dimforge/rapier3d-compat": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@dimforge/rapier3d-compat/-/rapier3d-compat-0.12.0.tgz",
+ "integrity": "sha512-uekIGetywIgopfD97oDL5PfeezkFpNhwlzlaEYNOA0N6ghdsOvh/HYjSMek5Q2O1PYvRSDFcqFVJl4r4ZBwOow==",
+ "dev": true,
+ "license": "Apache-2.0"
+ },
+ "node_modules/@emnapi/wasi-threads": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz",
+ "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@maptalks/feature-filter": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@maptalks/feature-filter/-/feature-filter-1.3.0.tgz",
+ "integrity": "sha512-O6GcFzPuCbz6bO4TNBnmP8VunS0GexTzZ4m36A4HbYQICY1cplpFgntX2fyB/TY3cZrFRGoeMePBeMZFMOOhcQ=="
+ },
+ "node_modules/@maptalks/function-type": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@maptalks/function-type/-/function-type-1.4.1.tgz",
+ "integrity": "sha512-Z78FdI8mZ4vdcBqxlMDV6HP6WE/njZ9PhlM5JwbURxW1DnQK7R1GP+fubkGJPP6hVSv0Y52/dK8cZE/HuXVZ3A==",
+ "dependencies": {
+ "colorin": "^0.5.0"
+ }
+ },
+ "node_modules/@maptalks/function-type/node_modules/colorin": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/colorin/-/colorin-0.5.0.tgz",
+ "integrity": "sha512-gN6fIMCehYUonAhbmm5+ZHeFunG75u77hI2tRlVndNthO6v0wZMV2G2FwYSi8Ws4b4lpFJK1ql2a/MlW9z/Vhg==",
+ "license": "MIT"
+ },
+ "node_modules/@napi-rs/wasm-runtime": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz",
+ "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@tybys/wasm-util": "^0.10.1"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/Brooooooklyn"
+ },
+ "peerDependencies": {
+ "@emnapi/core": "^1.7.1",
+ "@emnapi/runtime": "^1.7.1"
+ }
+ },
+ "node_modules/@oxc-project/types": {
+ "version": "0.122.0",
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz",
+ "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/Boshen"
+ }
+ },
+ "node_modules/@rolldown/binding-android-arm64": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz",
+ "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-arm64": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz",
+ "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-darwin-x64": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz",
+ "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-freebsd-x64": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz",
+ "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz",
+ "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz",
+ "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz",
+ "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz",
+ "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz",
+ "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz",
+ "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-linux-x64-musl": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz",
+ "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-openharmony-arm64": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz",
+ "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-wasm32-wasi": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz",
+ "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==",
+ "cpu": [
+ "wasm32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "@napi-rs/wasm-runtime": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz",
+ "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz",
+ "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ }
+ },
+ "node_modules/@rolldown/pluginutils": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz",
+ "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.60.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz",
+ "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.60.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz",
+ "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==",
+ "cpu": [
+ "x64"
+ ],
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@tweenjs/tween.js": {
+ "version": "23.1.3",
+ "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-23.1.3.tgz",
+ "integrity": "sha512-vJmvvwFxYuGnF2axRtPYocag6Clbb5YS7kLL+SO/TeVFzHqDIWrNKYtcsPMibjDx9O+bu+psAy9NKfWklassUA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@tybys/wasm-util": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@types/geojson": {
+ "version": "7946.0.16",
+ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
+ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/stats.js": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz",
+ "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/three": {
+ "version": "0.183.1",
+ "resolved": "https://registry.npmjs.org/@types/three/-/three-0.183.1.tgz",
+ "integrity": "sha512-f2Pu5Hrepfgavttdye3PsH5RWyY/AvdZQwIVhrc4uNtvF7nOWJacQKcoVJn0S4f0yYbmAE6AR+ve7xDcuYtMGw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@dimforge/rapier3d-compat": "~0.12.0",
+ "@tweenjs/tween.js": "~23.1.3",
+ "@types/stats.js": "*",
+ "@types/webxr": ">=0.5.17",
+ "@webgpu/types": "*",
+ "fflate": "~0.8.2",
+ "meshoptimizer": "~1.0.1"
+ }
+ },
+ "node_modules/@types/webxr": {
+ "version": "0.5.24",
+ "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.24.tgz",
+ "integrity": "sha512-h8fgEd/DpoS9CBrjEQXR+dIDraopAEfu4wYVNY2tEPwk60stPWhvZMf4Foo5FakuQ7HFZoa8WceaWFervK2Ovg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@webgpu/types": {
+ "version": "0.1.69",
+ "resolved": "https://registry.npmjs.org/@webgpu/types/-/types-0.1.69.tgz",
+ "integrity": "sha512-RPmm6kgRbI8e98zSD3RVACvnuktIja5+yLgDAkTmxLr90BEwdTXRQWNLF3ETTTyH/8mKhznZuN5AveXYFEsMGQ==",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/colorin": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/colorin/-/colorin-0.6.0.tgz",
+ "integrity": "sha512-huI54MwKNMP6eypurqzxGf7rvTA3pNWdXZopQbN7v3TDxXYWyyGQ3CtQndNZ2Z0Gy6HDWqA7sRYxbjRDO2FZMA==",
+ "license": "MIT"
+ },
+ "node_modules/detect-libc": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/deyihu-geometry-extrude": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/deyihu-geometry-extrude/-/deyihu-geometry-extrude-0.1.10.tgz",
+ "integrity": "sha512-qvX/TbA7aELZOwYOlhp2+gJILRGiUPGyErJDgTV8sooyocKERSxYWJxvwCT5bySnrVoJAd9Juh6jF8MvXzVbxA==",
+ "license": "MIT",
+ "dependencies": {
+ "earcut": "^2.1.3"
+ }
+ },
+ "node_modules/earcut": {
+ "version": "2.2.4",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz",
+ "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==",
+ "license": "ISC"
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fflate": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
+ "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/frustum-intersects": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/frustum-intersects/-/frustum-intersects-0.1.0.tgz",
+ "integrity": "sha512-W0S6dmX5LJLtamimyuKhvbkpDTm5eVfMgk4X9yXNyWQ1zZ/cMm0PZoeX9Pm0tL302l+erQVrdfRGhV3ILfeTeQ==",
+ "license": "MIT"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/lightningcss": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "detect-libc": "^2.0.3"
+ },
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ },
+ "optionalDependencies": {
+ "lightningcss-android-arm64": "1.32.0",
+ "lightningcss-darwin-arm64": "1.32.0",
+ "lightningcss-darwin-x64": "1.32.0",
+ "lightningcss-freebsd-x64": "1.32.0",
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
+ "lightningcss-linux-arm64-gnu": "1.32.0",
+ "lightningcss-linux-arm64-musl": "1.32.0",
+ "lightningcss-linux-x64-gnu": "1.32.0",
+ "lightningcss-linux-x64-musl": "1.32.0",
+ "lightningcss-win32-arm64-msvc": "1.32.0",
+ "lightningcss-win32-x64-msvc": "1.32.0"
+ }
+ },
+ "node_modules/lightningcss-android-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-arm64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-darwin-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-freebsd-x64": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-arm64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-gnu": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-linux-x64-musl": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-arm64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lightningcss-win32-x64-msvc": {
+ "version": "1.32.0",
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MPL-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 12.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/parcel"
+ }
+ },
+ "node_modules/lineclip": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/lineclip/-/lineclip-1.1.5.tgz",
+ "integrity": "sha512-KlA/wRSjpKl7tS9iRUdlG72oQ7qZ1IlVbVgHwoO10TBR/4gQ86uhKow6nlzMAJJhjCWKto8OeoAzzIzKSmN25A==",
+ "license": "ISC"
+ },
+ "node_modules/maptalks": {
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/maptalks/-/maptalks-1.12.1.tgz",
+ "integrity": "sha512-Vvr6Ikp3GRtPToUhPD0FzyA+tLLp8dsakJdNvp6N6ScPnQw9gfS+bpZP7Apc0kEjGBK55mHzJmuyNaQxYuhLlw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@maptalks/feature-filter": "^1.3.0",
+ "@maptalks/function-type": "^1.4.1",
+ "colorin": "^0.6.0",
+ "frustum-intersects": "^0.1.0",
+ "lineclip": "^1.1.5",
+ "rbush": "^2.0.2",
+ "simplify-js": "^1.2.1"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-darwin-x64": "^4.13.0",
+ "@rollup/rollup-linux-x64-gnu": "^4.13.0"
+ }
+ },
+ "node_modules/maptalks.three": {
+ "version": "0.42.0",
+ "resolved": "https://registry.npmjs.org/maptalks.three/-/maptalks.three-0.42.0.tgz",
+ "integrity": "sha512-Ru5/X/oRMvlLRQ7GB0HW2xeDOy2k5ZgLisrQF2/UhAqlKJBJZ/vKQXo2qAER8kQTtmwBB+S54N/y7b0waSAICQ==",
+ "license": "MIT",
+ "dependencies": {
+ "deyihu-geometry-extrude": "0.1.10",
+ "poly-extrude": "^0.16.0"
+ }
+ },
+ "node_modules/meshoptimizer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-1.0.1.tgz",
+ "integrity": "sha512-Vix+QlA1YYT3FwmBBZ+49cE5y/b+pRrcXKqGpS5ouh33d3lSp2PoTpCw19E0cKDFWalembrHnIaZetf27a+W2g==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
+ "dev": true,
+ "license": "MIT",
+ "peer": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/poly-extrude": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/poly-extrude/-/poly-extrude-0.16.0.tgz",
+ "integrity": "sha512-zZVn8mbCkYS9chcvZI82tbdj4Xsth0tvYiOOqtdAjCgzgD8DkEnY3qCbdUUdSKGCqF86VlfMy+Gd7WDF4HGnjQ==",
+ "license": "ISC",
+ "dependencies": {
+ "earcut": "^3.0.1"
+ }
+ },
+ "node_modules/poly-extrude/node_modules/earcut": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.2.tgz",
+ "integrity": "sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==",
+ "license": "ISC"
+ },
+ "node_modules/postcss": {
+ "version": "8.5.8",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
+ "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/quickselect": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz",
+ "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==",
+ "license": "ISC"
+ },
+ "node_modules/rbush": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz",
+ "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==",
+ "license": "MIT",
+ "dependencies": {
+ "quickselect": "^1.0.1"
+ }
+ },
+ "node_modules/rolldown": {
+ "version": "1.0.0-rc.12",
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz",
+ "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@oxc-project/types": "=0.122.0",
+ "@rolldown/pluginutils": "1.0.0-rc.12"
+ },
+ "bin": {
+ "rolldown": "bin/cli.mjs"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "optionalDependencies": {
+ "@rolldown/binding-android-arm64": "1.0.0-rc.12",
+ "@rolldown/binding-darwin-arm64": "1.0.0-rc.12",
+ "@rolldown/binding-darwin-x64": "1.0.0-rc.12",
+ "@rolldown/binding-freebsd-x64": "1.0.0-rc.12",
+ "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12",
+ "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12",
+ "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12",
+ "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12",
+ "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12",
+ "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12",
+ "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12",
+ "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12",
+ "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12",
+ "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12",
+ "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12"
+ }
+ },
+ "node_modules/simplify-js": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/simplify-js/-/simplify-js-1.2.4.tgz",
+ "integrity": "sha512-vITfSlwt7h/oyrU42R83mtzFpwYk3+mkH9bOHqq/Qw6n8rtR7aE3NZQ5fbcyCUVVmuMJR6ynsAhOfK2qoah8Jg==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/three": {
+ "version": "0.183.2",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.183.2.tgz",
+ "integrity": "sha512-di3BsL2FEQ1PA7Hcvn4fyJOlxRRgFYBpMTcyOgkwJIaDOdJMebEFPA+t98EvjuljDx4hNulAGwF6KIjtwI5jgQ==",
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD",
+ "optional": true
+ },
+ "node_modules/typescript": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz",
+ "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/vite": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz",
+ "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "lightningcss": "^1.32.0",
+ "picomatch": "^4.0.4",
+ "postcss": "^8.5.8",
+ "rolldown": "1.0.0-rc.12",
+ "tinyglobby": "^0.2.15"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^20.19.0 || >=22.12.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^20.19.0 || >=22.12.0",
+ "@vitejs/devtools": "^0.1.0",
+ "esbuild": "^0.27.0",
+ "jiti": ">=1.21.0",
+ "less": "^4.0.0",
+ "sass": "^1.70.0",
+ "sass-embedded": "^1.70.0",
+ "stylus": ">=0.54.8",
+ "sugarss": "^5.0.0",
+ "terser": "^5.16.0",
+ "tsx": "^4.8.1",
+ "yaml": "^2.4.2"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "@vitejs/devtools": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "jiti": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "sass-embedded": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ },
+ "tsx": {
+ "optional": true
+ },
+ "yaml": {
+ "optional": true
+ }
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..c501118
--- /dev/null
+++ b/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "map-insa",
+ "version": "2.0.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "tsc --noEmit && vite build",
+ "preview": "vite preview",
+ "typecheck": "tsc --noEmit",
+ "start": "npx serve ./dist"
+ },
+ "dependencies": {
+ "maptalks": "^1.12.1",
+ "maptalks.three": "^0.42.0",
+ "three": "^0.183.2"
+ },
+ "devDependencies": {
+ "@types/geojson": "^7946.0.16",
+ "@types/three": "^0.183.1",
+ "typescript": "^6.0.2",
+ "vite": "^8.0.3"
+ }
+}
diff --git a/src/config.ts b/src/config.ts
new file mode 100644
index 0000000..7dd8358
--- /dev/null
+++ b/src/config.ts
@@ -0,0 +1,26 @@
+export const MAP_CONFIG = {
+ center: [1.468, 43.5696] as [number, number],
+ zoom: 18,
+ minZoom: 18,
+ maxZoom: 20,
+ pitch: 45,
+ bearing: 0,
+};
+
+export const CAMPUS_EXTENT = {
+ xmin: 1.464,
+ xmax: 1.4715,
+ ymin: 43.567,
+ ymax: 43.574,
+};
+
+export const TILE_SERVICE = {
+ urlTemplate: "https://tile.f4map.com/tiles/f4_3d/{z}/{x}/{y}.png",
+ subdomains: ["a", "b", "c", "d"],
+};
+
+export const ABOUT_MODAL = {
+ title: "A Propos",
+ content:
+ "Ce projet a été réalisé par des membres du Club Info de l'INSA Toulouse. Il a pour but de vous permettre de découvrir le campus de l'INSA Toulouse en 3D.
Pour plus d'informations, n'hésitez pas à contacter le Club Info.
Toute contribution est la bienvenue, vous pouvez retrouver le code source du site sur notre GitHub.
",
+};
diff --git a/src/data.ts b/src/data.ts
new file mode 100644
index 0000000..0ae3e3f
--- /dev/null
+++ b/src/data.ts
@@ -0,0 +1,11 @@
+import type { BuildingFeature, BuildingsGeoJson } from "./types";
+
+export async function getBuildings(): Promise {
+ const response = await fetch(`${import.meta.env.BASE_URL}map.geojson`);
+ if (!response.ok) {
+ throw new Error("Unable to load map.geojson");
+ }
+
+ const payload = (await response.json()) as BuildingsGeoJson;
+ return payload.features;
+}
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000..adcfbd5
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,40 @@
+import "maptalks/dist/maptalks.css";
+
+import "./styles/main.css";
+
+import { ABOUT_MODAL } from "./config";
+import { getBuildings } from "./data";
+import { createBuildingsLayer } from "./map/buildings3d";
+import { createCampusMap } from "./map/createMap";
+import { setupControls } from "./ui/controls";
+import { createModalController } from "./ui/modal";
+import { setupSearch } from "./ui/search";
+import { getElementById } from "./utils/dom";
+
+async function bootstrap(): Promise {
+ const buildings = await getBuildings();
+ const map = createCampusMap("map");
+ const buildingsLayer = createBuildingsLayer(map, buildings);
+
+ const modal = createModalController();
+
+ setupControls({
+ map,
+ onAboutClick: () => {
+ modal.open(ABOUT_MODAL.title, ABOUT_MODAL.content);
+ },
+ });
+
+ setupSearch({
+ input: getElementById("searchInput"),
+ suggestions: getElementById("suggestions"),
+ searchableBuildings: buildingsLayer.searchableBuildings,
+ onSelect: (buildingName) => {
+ buildingsLayer.focusBuilding(buildingName);
+ },
+ });
+}
+
+bootstrap().catch((error) => {
+ console.error(error);
+});
diff --git a/src/map/buildings3d.ts b/src/map/buildings3d.ts
new file mode 100644
index 0000000..238a6bb
--- /dev/null
+++ b/src/map/buildings3d.ts
@@ -0,0 +1,210 @@
+import * as maptalks from "maptalks";
+import { BaseObject, ThreeLayer } from "maptalks.three";
+import * as THREE from "three";
+
+import type { BuildingFeature } from "../types";
+
+type GeoCoordinate = [number, number];
+
+export interface SearchableBuilding {
+ name: string;
+ shortName?: string;
+}
+
+export interface BuildingsLayerController {
+ searchableBuildings: SearchableBuilding[];
+ focusBuilding: (name: string) => boolean;
+}
+
+interface BuildingEntry {
+ mesh: BaseObject;
+ height: number;
+}
+
+export function createBuildingsLayer(
+ map: maptalks.Map,
+ buildings: BuildingFeature[],
+): BuildingsLayerController {
+ const searchableBuildings: SearchableBuilding[] = [];
+ const centersByName = new Map();
+ const entriesByName = new Map();
+ let openedInfoWindow: BaseObject | null = null;
+
+ const showInfoWindow = (mesh: BaseObject, center: GeoCoordinate) => {
+ if (openedInfoWindow && openedInfoWindow !== mesh) {
+ openedInfoWindow.closeInfoWindow();
+ }
+
+ const infoWindow = mesh.getInfoWindow();
+ if (!infoWindow) {
+ return;
+ }
+
+ infoWindow.show(new maptalks.Coordinate(center[0], center[1]));
+ openedInfoWindow = mesh;
+ };
+
+ const closeInfoWindow = () => {
+ if (!openedInfoWindow) {
+ return;
+ }
+ openedInfoWindow.closeInfoWindow();
+ openedInfoWindow = null;
+ };
+
+ const animateSelection = (mesh: BaseObject, height: number) => {
+ mesh.animateShow({ duration: 800 }, () => undefined);
+ mesh.setHeight(height * 1.2);
+ window.setTimeout(() => {
+ mesh.setHeight(height);
+ }, 250);
+ };
+
+ const animateMapTo = (center: GeoCoordinate) => {
+ map.animateTo(
+ { center: new maptalks.Coordinate(center[0], center[1]) },
+ { duration: 500 },
+ );
+ };
+
+ for (const feature of buildings) {
+ const name = feature.properties?.name?.trim();
+ if (!name) {
+ continue;
+ }
+
+ centersByName.set(name, getFeatureCenter(feature));
+ searchableBuildings.push({
+ name,
+ shortName: feature.properties?.short_name,
+ });
+ }
+
+ const threeLayer = new ThreeLayer("3d-buildings", {
+ forceRenderOnMoving: true,
+ forceRenderOnRotating: true,
+ });
+
+ threeLayer.prepareToDraw = (_gl, scene) => {
+ const light = new THREE.DirectionalLight(0xf6efe4, 1);
+ light.position.set(1, 0, 1);
+ scene.add(light);
+
+ const material = new THREE.MeshPhongMaterial({ color: 0xffffff });
+
+ for (const building of buildings) {
+ const height = getExtrusionHeight(building);
+ const center = getFeatureCenter(building);
+ const name = building.properties?.name?.trim();
+ const mesh = threeLayer.toExtrudePolygon(
+ building as unknown as maptalks.Polygon,
+ {
+ height,
+ bloom: true,
+ },
+ material,
+ );
+
+ mesh.on("mouseover", (event: { target: BaseObject }) =>
+ event.target.setHeight(height * 1.25),
+ );
+ mesh.on("mouseout", (event: { target: BaseObject }) =>
+ event.target.setHeight(height),
+ );
+ mesh.on("click", () => {
+ animateMapTo(center);
+ animateSelection(mesh, height);
+ if (name) {
+ showInfoWindow(mesh, center);
+ } else {
+ closeInfoWindow();
+ }
+ });
+
+ if (name) {
+ mesh.setToolTip(name, {
+ showTimeout: 0,
+ eventsPropagation: true,
+ dx: 15,
+ dy: 15,
+ });
+ mesh.setInfoWindow({
+ title: name,
+ content: building.properties?.description || "Pas de description",
+ });
+
+ entriesByName.set(name, { mesh, height });
+ }
+
+ threeLayer.addMesh(mesh);
+ }
+
+ return [];
+ };
+
+ map.addLayer(threeLayer as unknown as maptalks.Layer);
+ threeLayer.redraw();
+
+ return {
+ searchableBuildings,
+ focusBuilding: (name) => {
+ const center = centersByName.get(name);
+ if (!center) {
+ return false;
+ }
+
+ animateMapTo(center);
+
+ const entry = entriesByName.get(name);
+ if (!entry) {
+ return true;
+ }
+
+ animateSelection(entry.mesh, entry.height);
+ showInfoWindow(entry.mesh, center);
+
+ return true;
+ },
+ };
+}
+
+function getExtrusionHeight(building: BuildingFeature): number {
+ const height = Number(building.properties?.height ?? 0);
+ if (!Number.isFinite(height) || height < 0) {
+ return 0;
+ }
+ return height * 2;
+}
+
+function getFeatureCenter(building: BuildingFeature): GeoCoordinate {
+ let minLng = Number.POSITIVE_INFINITY;
+ let minLat = Number.POSITIVE_INFINITY;
+ let maxLng = Number.NEGATIVE_INFINITY;
+ let maxLat = Number.NEGATIVE_INFINITY;
+
+ const geometry = building.geometry;
+
+ if (geometry.type === "Polygon") {
+ for (const ring of geometry.coordinates) {
+ for (const [lng, lat] of ring) {
+ minLng = Math.min(minLng, lng);
+ minLat = Math.min(minLat, lat);
+ maxLng = Math.max(maxLng, lng);
+ maxLat = Math.max(maxLat, lat);
+ }
+ }
+ } else {
+ for (const polygon of geometry.coordinates) {
+ for (const ring of polygon) {
+ for (const [lng, lat] of ring) {
+ minLng = Math.min(minLng, lng);
+ minLat = Math.min(minLat, lat);
+ maxLng = Math.max(maxLng, lng);
+ maxLat = Math.max(maxLat, lat);
+ }
+ }
+ }
+ }
+
+ return [(minLng + maxLng) / 2, (minLat + maxLat) / 2];
+}
diff --git a/src/map/createMap.ts b/src/map/createMap.ts
new file mode 100644
index 0000000..35923f1
--- /dev/null
+++ b/src/map/createMap.ts
@@ -0,0 +1,31 @@
+import * as maptalks from "maptalks";
+
+import { CAMPUS_EXTENT, MAP_CONFIG, TILE_SERVICE } from "../config";
+
+export function createCampusMap(containerId: string): maptalks.Map {
+ const map = new maptalks.Map(containerId, {
+ center: MAP_CONFIG.center,
+ zoom: MAP_CONFIG.zoom,
+ minZoom: MAP_CONFIG.minZoom,
+ maxZoom: MAP_CONFIG.maxZoom,
+ pitch: MAP_CONFIG.pitch,
+ bearing: MAP_CONFIG.bearing,
+ baseLayer: new maptalks.TileLayer("tile", {
+ urlTemplate: TILE_SERVICE.urlTemplate,
+ subdomains: TILE_SERVICE.subdomains,
+ }),
+ attribution: {
+ content:
+ '© OpenStreetMap contributors, © CARTO',
+ },
+ });
+
+ const extent = map.getExtent();
+ extent.xmin = CAMPUS_EXTENT.xmin;
+ extent.xmax = CAMPUS_EXTENT.xmax;
+ extent.ymin = CAMPUS_EXTENT.ymin;
+ extent.ymax = CAMPUS_EXTENT.ymax;
+ map.setMaxExtent(extent);
+
+ return map;
+}
diff --git a/css/styles.css b/src/styles/main.css
similarity index 90%
rename from css/styles.css
rename to src/styles/main.css
index fd3d4ff..e33aa0b 100644
--- a/css/styles.css
+++ b/src/styles/main.css
@@ -1,19 +1,14 @@
* {
+ box-sizing: border-box;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
}
html,
body {
- margin: 0px;
+ margin: 0;
height: 100%;
}
-.heading {
- background-color: #34495e;
- color: #fff;
- padding: 8px 8px;
- font: 24px sans-serif;
-}
#map {
width: 100%;
@@ -113,7 +108,7 @@ body {
}
.control:hover {
- background-color: rgb(229 231 235) !important;
+ background-color: rgb(229 231 235);
}
.control > svg {
@@ -131,10 +126,6 @@ body {
flex-direction: column;
}
-#zoomControls > button:hover {
- background-color: white;
-}
-
#zoomControls > button:first-child {
border-radius: 6px 6px 0 0;
}
@@ -152,7 +143,7 @@ body {
#modalOverlay {
position: fixed;
inset: 0;
- background-color: rgba(107, 114, 128, 0.75);
+ background-color: rgb(107 114 128 / 0.75);
}
#modalContainer {
@@ -170,7 +161,7 @@ body {
@media (min-width: 640px) {
#modalContainer {
align-items: center;
- padding: 0px;
+ padding: 0;
}
}
@@ -191,13 +182,13 @@ body {
#modalBody {
background-color: white;
- padding: 20px 16px 0px 16px;
+ padding: 20px 16px 0;
text-align: center;
}
@media (min-width: 640px) {
#modalBody {
- padding: 24px 24px 0px 24px;
+ padding: 24px 24px 0;
text-align: left;
}
}
diff --git a/src/types.ts b/src/types.ts
new file mode 100644
index 0000000..f603dd8
--- /dev/null
+++ b/src/types.ts
@@ -0,0 +1,22 @@
+import type {
+ Feature,
+ FeatureCollection,
+ MultiPolygon,
+ Polygon,
+} from "geojson";
+
+export interface BuildingProperties {
+ name?: string;
+ short_name?: string;
+ description?: string;
+ height: number;
+}
+
+export type BuildingGeometry = Polygon | MultiPolygon;
+
+export type BuildingFeature = Feature;
+
+export type BuildingsGeoJson = FeatureCollection<
+ BuildingGeometry,
+ BuildingProperties
+>;
diff --git a/src/ui/controls.ts b/src/ui/controls.ts
new file mode 100644
index 0000000..469e724
--- /dev/null
+++ b/src/ui/controls.ts
@@ -0,0 +1,37 @@
+import * as maptalks from "maptalks";
+
+import { MAP_CONFIG } from "../config";
+import { getElementById } from "../utils/dom";
+
+interface ControlsOptions {
+ map: maptalks.Map;
+ onAboutClick: () => void;
+}
+
+export function setupControls(options: ControlsOptions): void {
+ const { map, onAboutClick } = options;
+
+ const resetButton = getElementById("resetControl");
+ const zoomInButton = getElementById("zoomInControl");
+ const zoomOutButton = getElementById("zoomOutControl");
+ const aboutButton = getElementById("aboutControl");
+
+ resetButton.addEventListener("click", () => {
+ map.setCenter(
+ new maptalks.Coordinate(MAP_CONFIG.center[0], MAP_CONFIG.center[1]),
+ );
+ map.setZoom(MAP_CONFIG.zoom);
+ map.setPitch(MAP_CONFIG.pitch);
+ map.setBearing(MAP_CONFIG.bearing);
+ });
+
+ zoomInButton.addEventListener("click", () => {
+ map.setZoom(map.getZoom() + 0.5);
+ });
+
+ zoomOutButton.addEventListener("click", () => {
+ map.setZoom(map.getZoom() - 0.5);
+ });
+
+ aboutButton.addEventListener("click", onAboutClick);
+}
diff --git a/src/ui/modal.ts b/src/ui/modal.ts
new file mode 100644
index 0000000..e5bd6b3
--- /dev/null
+++ b/src/ui/modal.ts
@@ -0,0 +1,29 @@
+import { getElementById } from "../utils/dom";
+
+export interface ModalController {
+ open: (title: string, content: string) => void;
+ close: () => void;
+}
+
+export function createModalController(): ModalController {
+ const modalScreen = getElementById("modalScreen");
+ const overlay = getElementById("modalOverlay");
+ const closeButton = getElementById("modal-close");
+ const titleElement = getElementById("modalTitle");
+ const contentElement = getElementById("modalContent");
+
+ const close = () => {
+ modalScreen.style.display = "none";
+ };
+
+ const open = (title: string, content: string) => {
+ titleElement.innerText = title;
+ contentElement.innerHTML = content;
+ modalScreen.style.display = "block";
+ };
+
+ closeButton.addEventListener("click", close);
+ overlay.addEventListener("click", close);
+
+ return { open, close };
+}
diff --git a/src/ui/search.ts b/src/ui/search.ts
new file mode 100644
index 0000000..578e594
--- /dev/null
+++ b/src/ui/search.ts
@@ -0,0 +1,84 @@
+import type { SearchableBuilding } from "../map/buildings3d";
+
+interface SearchOptions {
+ input: HTMLInputElement;
+ suggestions: HTMLUListElement;
+ searchableBuildings: SearchableBuilding[];
+ onSelect: (buildingName: string) => void;
+}
+
+export function setupSearch(options: SearchOptions): void {
+ const { input, suggestions, searchableBuildings, onSelect } = options;
+ let currentMatches: SearchableBuilding[] = [];
+
+ const hideSuggestions = () => {
+ currentMatches = [];
+ suggestions.style.display = "none";
+ suggestions.innerHTML = "";
+ };
+
+ const renderSuggestions = (matches: SearchableBuilding[]) => {
+ currentMatches = matches;
+ suggestions.innerHTML = "";
+
+ if (matches.length === 0) {
+ suggestions.style.display = "none";
+ return;
+ }
+
+ for (const match of matches) {
+ const item = document.createElement("li");
+ item.textContent = match.name;
+
+ item.addEventListener("click", () => {
+ input.value = match.name;
+ hideSuggestions();
+ onSelect(match.name);
+ });
+
+ suggestions.appendChild(item);
+ }
+
+ suggestions.style.display = "block";
+ };
+
+ input.addEventListener("input", (event) => {
+ const query = ((event.target as HTMLInputElement).value || "").trim();
+
+ if (query.length < 2) {
+ hideSuggestions();
+ return;
+ }
+
+ const normalizedQuery = query.toLowerCase();
+ const matches = searchableBuildings.filter((building) => {
+ const inName = building.name.toLowerCase().includes(normalizedQuery);
+ const inShortName = (building.shortName || "")
+ .toLowerCase()
+ .includes(normalizedQuery);
+ return inName || inShortName;
+ });
+
+ renderSuggestions(matches);
+ });
+
+ input.addEventListener("keydown", (event) => {
+ if (event.key !== "Enter") {
+ return;
+ }
+
+ if (currentMatches.length === 0) {
+ return;
+ }
+
+ event.preventDefault();
+ const selected = currentMatches[0];
+ input.value = selected.name;
+ hideSuggestions();
+ onSelect(selected.name);
+ });
+
+ input.addEventListener("blur", () => {
+ window.setTimeout(hideSuggestions, 100);
+ });
+}
diff --git a/src/utils/dom.ts b/src/utils/dom.ts
new file mode 100644
index 0000000..76f487f
--- /dev/null
+++ b/src/utils/dom.ts
@@ -0,0 +1,7 @@
+export function getElementById(id: string): T {
+ const element = document.getElementById(id);
+ if (!element) {
+ throw new Error(`Element with id '${id}' is missing.`);
+ }
+ return element as T;
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000..1759d70
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "compilerOptions": {
+ "target": "ES2022",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
+ "types": ["vite/client"],
+ "strict": true,
+ "noEmit": true,
+ "isolatedModules": true,
+ "resolveJsonModule": true,
+ "allowSyntheticDefaultImports": true,
+ "skipLibCheck": true,
+ "useDefineForClassFields": true
+ },
+ "include": ["src", "vite.config.ts"]
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000..f7b9682
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,6 @@
+import { defineConfig } from "vite";
+
+export default defineConfig({
+ base: "./",
+ publicDir: "json",
+});