|
1 | 1 | import { MapboxOverlay } from "@deck.gl/mapbox"; |
2 | 2 | import { GeoJsonLayer } from "@deck.gl/layers"; |
3 | 3 | import maplibregl from "maplibre-gl"; |
4 | | -import { asyncBufferFromUrl } from "hyparquet"; |
| 4 | +import { asyncBufferFromUrl, parquetMetadataAsync } from "hyparquet"; |
5 | 5 | import { toGeoJson } from "geoparquet"; |
6 | 6 | import proj4 from "proj4"; |
| 7 | +import Converter from "projjson-to-wkt"; |
| 8 | + |
| 9 | +async function getSourceCrs(file) { |
| 10 | + const metadata = await parquetMetadataAsync(file); |
| 11 | + const geoMetadata = JSON.parse( |
| 12 | + metadata.key_value_metadata?.find((kv) => kv.key === "geo").value, |
| 13 | + ); |
| 14 | + return Converter.toWkt1(geoMetadata.columns.geometry.crs); |
| 15 | +} |
7 | 16 |
|
8 | 17 | async function initializeMap() { |
9 | 18 | try { |
10 | 19 | // Load and convert GeoParquet file |
11 | 20 | const url = |
12 | 21 | "https://raw.githubusercontent.com/astrojuanlu/desalkila/refs/heads/app/app/public/registry_cam_no_vuts_simple.geoparquet"; |
13 | 22 | const file = await asyncBufferFromUrl({ url }); |
| 23 | + const sourceCrs = await getSourceCrs(file); |
| 24 | + |
14 | 25 | var geojson = await toGeoJson({ file }); |
15 | 26 | geojson = { |
16 | 27 | type: "FeatureCollection", |
17 | 28 | features: geojson.features.map((feature) => { |
18 | 29 | const reprojectedGeometry = { |
19 | 30 | type: feature.geometry.type, |
20 | 31 | coordinates: proj4( |
21 | | - "+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs +type=crs", |
| 32 | + sourceCrs, |
22 | 33 | "EPSG:4326", |
23 | 34 | feature.geometry.coordinates, |
24 | 35 | ), |
|
0 commit comments