diff --git a/package-lock.json b/package-lock.json index 1c6cabe..6bb8971 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,6 @@ "js-cookie": "^3.0.5", "leaflet": "^1.9.4", "leaflet-heatmap": "^1.0.0", - "leaflet-timedimension": "^1.1.1", "leaflet-velocity": "^2.1.4", "leaflet.heat": "^0.2.0" }, @@ -1103,11 +1102,6 @@ "@types/estree": "^1.0.6" } }, - "node_modules/iso8601-js-period": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/iso8601-js-period/-/iso8601-js-period-0.2.1.tgz", - "integrity": "sha512-iDyz2TQFBd5WhCZjruOwHj01JkQGu7YbVLCVdpA7lCGEcBzE3ffCPAhLh/M8TAp//kCixPpYN4XU54WHCxvD2Q==" - }, "node_modules/js-cookie": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", @@ -1139,15 +1133,6 @@ "leaflet": "*" } }, - "node_modules/leaflet-timedimension": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/leaflet-timedimension/-/leaflet-timedimension-1.1.1.tgz", - "integrity": "sha512-ejXldN94veRsWka1vpC+4rbH+2+3d3ztn2xYx4jcXtjYDrKC/sNnoqCmyH2UEYIy51PI2851aI2k8uGdOEbhlw==", - "dependencies": { - "iso8601-js-period": "^0.2.1", - "leaflet": "~0.7.4 || ~1" - } - }, "node_modules/leaflet-velocity": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/leaflet-velocity/-/leaflet-velocity-2.1.4.tgz", diff --git a/package.json b/package.json index 9bae6d0..cb7085e 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "js-cookie": "^3.0.5", "leaflet": "^1.9.4", "leaflet-heatmap": "^1.0.0", - "leaflet-timedimension": "^1.1.1", "leaflet-velocity": "^2.1.4", "leaflet.heat": "^0.2.0" } diff --git a/src/lib/components/WindVisualisation.svelte b/src/lib/components/WindVisualisation.svelte index 4950b6a..3cd67bb 100644 --- a/src/lib/components/WindVisualisation.svelte +++ b/src/lib/components/WindVisualisation.svelte @@ -5,13 +5,10 @@ import 'leaflet-velocity/dist/leaflet-velocity.css'; import 'leaflet-velocity/dist/leaflet-velocity'; import 'leaflet.heat'; - import 'leaflet-timedimension'; export let map; // принимаем карту из родительского компонента export let windData; - let timeDimension; - let timeDimensionControl; let velocityLayer; let heatLayer; let legend; @@ -21,22 +18,6 @@ let showVectors = true; let layerControl; - // Преобразование testVelo.json в формат timeData - const prepareTimeData = (windData) => { - if (!windData || windData.length < 2) return {}; - - // Используем дату из header или текущую дату, если не указана - const refTime = windData[0]?.header?.refTime || new Date().toISOString(); - - return { - [refTime]: { - u: windData[0].data, // U-компонента (первый объект в массиве) - v: windData[1].data // V-компонента (второй объект) - } - }; - }; - - // Функция для нормализации данных тепловой карты const prepareHeatData = (windData) => { if (!windData || windData.length < 2) { @@ -74,9 +55,9 @@ // Вычисляем координаты для текущей точки const y = Math.floor(i / nx); const x = i % nx; - let lat = la1 - y * dy; - let lng = lo1 + x * dx; - if (lng >= 180) lng -= 360; + const lat = la1 - y * dy; + const lng = lo1 + x * dx; + heatData.push([lat, lng, speed]); maxSpeed = Math.max(maxSpeed, speed); } @@ -101,9 +82,9 @@ try { return L.heatLayer(data, { - radius: 8, // Увеличьте радиус для глобальной карты - blur: 20, - // maxZoom: 10, + radius: 20, // Увеличьте радиус для глобальной карты + blur: 15, + maxZoom: 10, minOpacity: 0.7, gradient: { 0.1: 'blue', @@ -208,50 +189,7 @@ }; onMount(() => { - if (!map) return; - - // 1. Настройка TimeDimension (добавьте эти строки в начале) - // L.TimeDimension.Util.setProxy('https://your-proxy.com/?url='); // Для загрузки больших данных - L.TimeDimension.Util.setCacheLimit(10); // Лимит кэшированных кадров - - // 1. Подготовка данных - const timeData = prepareTimeData(windData); - const firstTime = Object.keys(timeData)[0]; - - // Инициализация TimeDimension - timeDimension = new L.TimeDimension({ - period: "PT1H", // Интервал 1 час - timeInterval: '${firstTime}/${firstTime}', - }); - - // Добавляем контролы времени - timeDimensionControl = new L.Control.TimeDimension({ - timeDimension, - position: 'bottomleft', - // autoPlay: true, - playerOptions: { - // transitionTime: 1000, - loop: false, - minBufferReady: -1 - } - }); - map.addControl(timeDimensionControl); - - // 4. Создание слоев - const velocityLayer = L.timeDimension.layer.windVelocity({ - displayValues: true, - data: timeData, - displayOptions: { - velocityType: 'Wind Speed', - position: 'bottomleft' - } - }).addTo(map); - - // 5. Тепловая карта (адаптируйте под ваш формат) - const heatLayer = L.timeDimension.layer.heat({ - radius: 15, - data: prepareTimeHeatData(timeData) - }).addTo(map); + updateLayers(); }); onDestroy(() => { diff --git a/src/routes/TimeLine.svelte b/src/routes/TimeLine.svelte index e69de29..94dddeb 100644 --- a/src/routes/TimeLine.svelte +++ b/src/routes/TimeLine.svelte @@ -0,0 +1,215 @@ + + + +