Geotiff Layer for Anti Meridian South Pacific Leaflet map.
maritimeWeatherUser opened this issue · 2 comments
Hi guys i have a test geotiff file that i have loaded as a layer into Leaflet map. The Geotiff has been georeferenced within QGIS using the EPSG:4326 CRS (gdaltranslate and warp) functions and raw geotiff extracted from a GFS forecast netcdf file band (Thredds = Unidata).
The geotiff produced loads onto the Leaflet map BUT on the West of the anti-meridian geotiff layer shows as expected, and on the east of the anti-meridian the layer is missing this half (not rendering). The geotiff layer only shows on the west of the anti-meridian line.
I have set the map CRS to 4326 (or so i think).
Here is the code i use for jscript:
var map = L.map('map').setView([0, 0], 5);
// add OpenStreetMap basemap
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
crs: L.CRS.EPSG4326,
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
}).addTo(map);
// originally from https://globalwindatlas.info/downloads/gis-files
var url_to_geotiff_file = "https://www.cassavaweather.com/leaflet-kmz-master/NightTest4326.tif";
fetch(url_to_geotiff_file)
.then(response => response.arrayBuffer())
.then(arrayBuffer => {
parseGeoraster(arrayBuffer).then(georaster => {
const min = georaster.mins[0];
const max = georaster.maxs[0];
const range = georaster.ranges[0];
// available color scales can be found by running console.log(chroma.brewer);
console.log(chroma.brewer);
var scale = chroma.scale("Viridis");
var layer = new GeoRasterLayer({
georaster: georaster,
opacity: 0.7,
pixelValuesToColorFn: function(pixelValues) {
var pixelValue = pixelValues[0]; // there's just one band in this raster
// if there's zero wind, don't return a color
if (pixelValue === 0) return null;
// scale to 0 - 1 used by chroma
var scaledPixelValue = (pixelValue - min) / range;
var color = scale(scaledPixelValue).hex();
return color;
},
resolution: 256
});
console.log("layer:", layer);
layer.addTo(map);
map.fitBounds(layer.getBounds());
});
});
Here is the output of gdalinfo for the rendered geotif file:
/leaflet-kmz-master$ gdalinfo NightTest4326.tif
Driver: GTiff/GeoTIFF
Files: NightTest4326.tif
Size is 145, 50
Coordinate System is:
GEOGCRS["WGS 84",
ENSEMBLE["World Geodetic System 1984 ensemble",
MEMBER["World Geodetic System 1984 (Transit)"],
MEMBER["World Geodetic System 1984 (G730)"],
MEMBER["World Geodetic System 1984 (G873)"],
MEMBER["World Geodetic System 1984 (G1150)"],
MEMBER["World Geodetic System 1984 (G1674)"],
MEMBER["World Geodetic System 1984 (G1762)"],
MEMBER["World Geodetic System 1984 (G2139)"],
ELLIPSOID["WGS 84",6378137,298.257223563,
LENGTHUNIT["metre",1]],
ENSEMBLEACCURACY[2.0]],
PRIMEM["Greenwich",0,
ANGLEUNIT["degree",0.0174532925199433]],
CS[ellipsoidal,2],
AXIS["geodetic latitude (Lat)",north,
ORDER[1],
ANGLEUNIT["degree",0.0174532925199433]],
AXIS["geodetic longitude (Lon)",east,
ORDER[2],
ANGLEUNIT["degree",0.0174532925199433]],
USAGE[
SCOPE["Horizontal component of 3D system."],
AREA["World."],
BBOX[-90,-180,90,180]],
ID["EPSG",4326]]
Data axis to CRS axis mapping: 2,1
Origin = (110.000000000000000,-5.000000000000000)
Pixel Size = (1.000000000000000,-1.000000000000000)
Metadata:
AREA_OR_POINT=Area
Image Structure Metadata:
INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left ( 110.0000000, -5.0000000) (110d 0' 0.00"E, 5d 0' 0.00"S)
Lower Left ( 110.0000000, -55.0000000) (110d 0' 0.00"E, 55d 0' 0.00"S)
Upper Right ( 255.000, -5.000) (255d 0' 0.00"E, 5d 0' 0.00"S)
Lower Right ( 255.000, -55.000) (255d 0' 0.00"E, 55d 0' 0.00"S)
Center ( 182.500, -30.000) (182d30' 0.00"E, 30d 0' 0.00"S)
Band 1 Block=145x14 Type=Byte, ColorInterp=Red
Mask Flags: PER_DATASET ALPHA
Band 2 Block=145x14 Type=Byte, ColorInterp=Green
Mask Flags: PER_DATASET ALPHA
Band 3 Block=145x14 Type=Byte, ColorInterp=Blue
Mask Flags: PER_DATASET ALPHA
Band 4 Block=145x14 Type=Byte, ColorInterp=Alpha
Here is a photo of the results of much trial and error the geotiff layer should be centered on the south pacific region with the anti-meridian at the center of the geotiff layer (achieved). Only the west of the layer from antimeridian shows.
Have tried Stuarts Leaflet plugin but complains about missing dependencies and i can see the files are dated 5 years ago.
Hello, @maritimeWeatherUser . Would you be able to share the GeoTIFF file? It will make debugging easier. If you can't share it publicly on Github, you could email it to daniel.j.dufour@gmail.com. Thank you for bringing this bug to our attention!