feat: client work
This commit is contained in:
parent
dd2f25a5e8
commit
e090501624
12 changed files with 75 additions and 24 deletions
|
@ -22,12 +22,14 @@
|
|||
"eslint-config-prettier": "^10.0.1",
|
||||
"eslint-plugin-svelte": "^3.0.0",
|
||||
"globals": "^16.0.0",
|
||||
"mode-watcher": "^1.0.7",
|
||||
"paneforge": "^1.0.0-next.5",
|
||||
"prettier": "^3.4.2",
|
||||
"prettier-plugin-svelte": "^3.3.3",
|
||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||
"svelte": "^5.0.0",
|
||||
"svelte-check": "^4.0.0",
|
||||
"svelte-sonner": "^1.0.1",
|
||||
"tailwind-merge": "^3.3.0",
|
||||
"tailwind-variants": "^1.0.0",
|
||||
"tailwindcss": "^4.1.6",
|
||||
|
@ -840,6 +842,8 @@
|
|||
|
||||
"mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="],
|
||||
|
||||
"mode-watcher": ["mode-watcher@1.0.7", "", { "dependencies": { "runed": "^0.25.0", "svelte-toolbelt": "^0.7.1" }, "peerDependencies": { "svelte": "^5.27.0" } }, "sha512-ZGA7ZGdOvBJeTQkzdBOnXSgTkO6U6iIFWJoyGCTt6oHNg9XP9NBvS26De+V4W2aqI+B0yYXUskFG2VnEo3zyMQ=="],
|
||||
|
||||
"mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="],
|
||||
|
||||
"mrmime": ["mrmime@2.0.1", "", {}, "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ=="],
|
||||
|
@ -1004,6 +1008,8 @@
|
|||
|
||||
"svelte-eslint-parser": ["svelte-eslint-parser@1.1.3", "", { "dependencies": { "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.0.0", "espree": "^10.0.0", "postcss": "^8.4.49", "postcss-scss": "^4.0.9", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0" }, "optionalPeers": ["svelte"] }, "sha512-DUc/z/vk+AFVoxGv54+BOBFqUrmUgNg2gSO2YqrE3OL6ro19/0azPmQj/4wN3s9RxuF5l7G0162q/Ddk4LJhZA=="],
|
||||
|
||||
"svelte-sonner": ["svelte-sonner@1.0.1", "", { "dependencies": { "runed": "^0.26.0" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-vz0eqcs9GNnJ2CTtTno7v/jSA0P3r+X+3y/hrJg+FPpB2rZCFywIKNKD3wiRI8449i3LXVcgQ+q5R5ocOd6ydA=="],
|
||||
|
||||
"svelte-toolbelt": ["svelte-toolbelt@0.7.1", "", { "dependencies": { "clsx": "^2.1.1", "runed": "^0.23.2", "style-to-object": "^1.0.8" }, "peerDependencies": { "svelte": "^5.0.0" } }, "sha512-HcBOcR17Vx9bjaOceUvxkY3nGmbBmCBBbuWLLEWO6jtmWH8f/QoWmbyUfQZrpDINH39en1b8mptfPQT9VKQ1xQ=="],
|
||||
|
||||
"sweepline-intersections": ["sweepline-intersections@1.5.0", "", { "dependencies": { "tinyqueue": "^2.0.0" } }, "sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ=="],
|
||||
|
@ -1120,8 +1126,12 @@
|
|||
|
||||
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
|
||||
|
||||
"mode-watcher/runed": ["runed@0.25.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-7+ma4AG9FT2sWQEA0Egf6mb7PBT2vHyuHail1ie8ropfSjvZGtEAx8YTmUjv/APCsdRRxEVvArNjALk9zFSOrg=="],
|
||||
|
||||
"rbush/quickselect": ["quickselect@2.0.0", "", {}, "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="],
|
||||
|
||||
"svelte-sonner/runed": ["runed@0.26.0", "", { "dependencies": { "esm-env": "^1.0.0" }, "peerDependencies": { "svelte": "^5.7.0" } }, "sha512-qWFv0cvLVRd8pdl/AslqzvtQyEn5KaIugEernwg9G98uJVSZcs/ygvPBvF80LA46V8pwRvSKnaVLDI3+i2wubw=="],
|
||||
|
||||
"sweepline-intersections/tinyqueue": ["tinyqueue@2.0.3", "", {}, "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA=="],
|
||||
|
||||
"tailwind-variants/tailwind-merge": ["tailwind-merge@3.0.2", "", {}, "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw=="],
|
||||
|
|
|
@ -26,12 +26,14 @@
|
|||
"eslint-config-prettier": "^10.0.1",
|
||||
"eslint-plugin-svelte": "^3.0.0",
|
||||
"globals": "^16.0.0",
|
||||
"mode-watcher": "^1.0.7",
|
||||
"paneforge": "^1.0.0-next.5",
|
||||
"prettier": "^3.4.2",
|
||||
"prettier-plugin-svelte": "^3.3.3",
|
||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||
"svelte": "^5.0.0",
|
||||
"svelte-check": "^4.0.0",
|
||||
"svelte-sonner": "^1.0.1",
|
||||
"tailwind-merge": "^3.3.0",
|
||||
"tailwind-variants": "^1.0.0",
|
||||
"tailwindcss": "^4.1.6",
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
import { onMount } from 'svelte';
|
||||
import type { LayerList } from './layerList';
|
||||
import type { StationStatus } from './stationData';
|
||||
import {toast} from "svelte-sonner";
|
||||
|
||||
interface Props {
|
||||
categories: LayerList;
|
||||
|
@ -39,6 +40,10 @@
|
|||
load_image('radar-rect-green');
|
||||
load_image('radar-rect-red');
|
||||
});
|
||||
map.on('error', (e) => {
|
||||
console.error(e);
|
||||
toast.error('Data loading failed!');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
|
|
@ -73,8 +73,7 @@
|
|||
type: 'raster',
|
||||
tiles: [
|
||||
data.tileUrl.replace('{site}', selectedSite)
|
||||
],
|
||||
'tileSize': 512
|
||||
]
|
||||
});
|
||||
}
|
||||
if (map.getLayer("data")) {
|
||||
|
@ -114,6 +113,25 @@
|
|||
map.removeLayer(`select-${currentlySelectingFor}`);
|
||||
}
|
||||
}
|
||||
if (map.getLayer("data")) {
|
||||
map.removeLayer('data');
|
||||
}
|
||||
if (layer.type === 'raster') {
|
||||
if (!map.getSource(layer.id)) {
|
||||
map.addSource(layer.id, {
|
||||
type: 'raster',
|
||||
tiles: [
|
||||
layer.tileUrl
|
||||
]
|
||||
});
|
||||
}
|
||||
map.addLayer({
|
||||
id: 'data',
|
||||
type: 'raster',
|
||||
source: `${layer.id}`
|
||||
});
|
||||
}
|
||||
|
||||
}}
|
||||
>
|
||||
{layer.layer}
|
||||
|
@ -177,7 +195,6 @@
|
|||
tiles: [
|
||||
idToTileUrlCache[selectedPrimaryLayer].replace('{site}', selectedSite)
|
||||
],
|
||||
'tileSize': 512
|
||||
});
|
||||
}
|
||||
if (map.getLayer("data")) {
|
||||
|
|
1
client/src/lib/components/ui/sonner/index.ts
Normal file
1
client/src/lib/components/ui/sonner/index.ts
Normal file
|
@ -0,0 +1 @@
|
|||
export { default as Toaster } from "./sonner.svelte";
|
20
client/src/lib/components/ui/sonner/sonner.svelte
Normal file
20
client/src/lib/components/ui/sonner/sonner.svelte
Normal file
|
@ -0,0 +1,20 @@
|
|||
<script lang="ts">
|
||||
import { Toaster as Sonner, type ToasterProps as SonnerProps } from "svelte-sonner";
|
||||
import { mode } from "mode-watcher";
|
||||
|
||||
let { ...restProps }: SonnerProps = $props();
|
||||
</script>
|
||||
|
||||
<Sonner
|
||||
theme={mode.current}
|
||||
class="toaster group"
|
||||
toastOptions={{
|
||||
classes: {
|
||||
toast: "group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",
|
||||
description: "group-[.toast]:text-muted-foreground",
|
||||
actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",
|
||||
cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-foreground",
|
||||
},
|
||||
}}
|
||||
{...restProps}
|
||||
/>
|
|
@ -50,6 +50,7 @@ export function stationGeojson(stationMap: Record<string, StationStatus>): Featu
|
|||
const stations: Feature[] = [];
|
||||
|
||||
for (const [icao, station] of Object.entries(stationMap)) {
|
||||
if (station.stationType == 'TDWR') continue;
|
||||
const feature = turf.point([station.long, station.lat], {
|
||||
icao,
|
||||
icon: (() => {
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
<script lang="ts">
|
||||
import '../app.css';
|
||||
import * as Tooltip from "$lib/components/ui/tooltip";
|
||||
import {Toaster} from "$lib/components/ui/sonner/index.js";
|
||||
|
||||
let { children } = $props();
|
||||
</script>
|
||||
|
||||
<Toaster richColors theme="dark" />
|
||||
|
||||
<Tooltip.Provider>
|
||||
{@render children()}
|
||||
</Tooltip.Provider>
|
|
@ -15,14 +15,14 @@ export const load: PageServerLoad = async () => {
|
|||
layer: 'Composite Reflectivity',
|
||||
type: 'raster',
|
||||
tileUrl:
|
||||
'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_qcd_CONUS/{z}/{x}/{y}.png'
|
||||
'http://localhost:3000/grib2/noaa_mrms_merged_composite_reflectivity_qc_CONUS/{z}/{x}/{y}@2x.png',
|
||||
},
|
||||
{
|
||||
id: '01JV7RZJ7W9KZBJ34CG7YSS0PZ',
|
||||
layer: 'Differential Reflectivity',
|
||||
type: 'raster',
|
||||
tileUrl:
|
||||
'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_rhohv_CONUS/{z}/{x}/{y}.png'
|
||||
'https://tiler.weather.ax/grib2/noaa_mrms_composite_reflectivity_rhohv_CONUS/{z}/{x}/{y}@2x.png',
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -37,7 +37,7 @@ export const load: PageServerLoad = async () => {
|
|||
layer: 'Super Resolution Base Reflectivity (Tilt 1)',
|
||||
type: 'raster',
|
||||
tileUrl:
|
||||
'http://localhost:3000/nexrad/base_reflectivity_halfdegree/{site}/{z}/{x}/{y}@2x.png'
|
||||
'http://localhost:3000/nexrad/base_reflectivity_halfdegree/{site}/{z}/{x}/{y}@2x.png',
|
||||
},
|
||||
]
|
||||
}
|
||||
|
|
|
@ -87,7 +87,6 @@ pub fn parse(input: Vec<u8>) -> nexrad_data::result::Result<Scan> {
|
|||
let mut vcp = None;
|
||||
let mut radials = vec![];
|
||||
|
||||
println!("{:?}", file.header());
|
||||
for mut record in file.records() {
|
||||
if record.compressed() {
|
||||
record = record.decompress()?;
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
use std::fs;
|
||||
use std::{env, fs};
|
||||
use wxbox_ar2::parse;
|
||||
|
||||
fn main() {
|
||||
let f = fs::read("KCRP20170825_235733_V06").unwrap();
|
||||
let f = fs::read(env::args().nth(1).unwrap()).unwrap();
|
||||
let f = parse(f).unwrap();
|
||||
println!(
|
||||
"{:?}",
|
||||
|
|
|
@ -18,19 +18,12 @@ no_coverage = -999.0
|
|||
[data.nexrad.base_reflectivity_halfdegree]
|
||||
from = "DS.p94r0"
|
||||
palette = """
|
||||
Color: 5 0x40 0xe8 0xe3
|
||||
Color: 10 0x26 0xa4 0xfa
|
||||
Color: 15 0x00 0x30 0xed
|
||||
Color: 20 0x49 0xfb 0x3e
|
||||
Color: 25 0x36 0xc2 0x2e
|
||||
Color: 30 0x27 0x8c 0x1e
|
||||
Color: 35 0xfe 0xf5 0x43
|
||||
Color: 40 0xeb 0xb4 0x33
|
||||
Color: 45 0xf6 0x95 0x2e
|
||||
Color: 50 0xf8 0x0a 0x26
|
||||
Color: 55 0xcb 0x05 0x16
|
||||
Color: 60 0xa9 0x08 0x13
|
||||
Color: 65 0xee 0x34 0xfa
|
||||
Color: 70 0x91 0x61 0xc4
|
||||
Color: 75 0xff 0xff 0xff
|
||||
Color: 10 164 164 255 100 100 192
|
||||
Color: 20 64 128 255 32 64 128
|
||||
Color: 30 0 255 0 0 128 0
|
||||
Color: 40 255 255 0 255 128 0
|
||||
Color: 50 255 0 0 160 0 0
|
||||
Color: 60 255 0 255 128 0 128
|
||||
Color: 70 255 255 255 128 128 128
|
||||
Color: 80 128 128 128
|
||||
"""
|
Loading…
Add table
Reference in a new issue