@@ -33,8 +33,6 @@ class GetMap:
3333 DEFAULT_STYLE : str = "raster/default"
3434 DEFAULT_PALETTE : str = "turbo"
3535
36- BBOX_BUFFER = 30_000 # meters
37-
3836 cache : cachey .Cache
3937
4038 # Data selection
@@ -280,36 +278,38 @@ async def render(
280278 if minmax_only :
281279 logger .warning ("Falling back to default minmax" )
282280 return {"min" : float (da .min ()), "max" : float (da .max ())}
283-
284- try :
285- da = filter_data_within_bbox (da , self .bbox , self .BBOX_BUFFER )
286- except Exception as e :
287- logger .error (f"Error filtering data within bbox: { e } " )
288- logger .warning ("Falling back to full layer" )
289281
290- print (f"Projection time: { time .time () - projection_start } " )
282+ # x and y are only set for triangle grids, we dont subset the data for triangle grids
283+ # at this time.
284+ if x is None :
285+ try :
286+ # Grab a buffer around the bbox to ensure we have enough data to render
287+ # TODO: Base this on actual data resolution?
288+ if self .crs == "EPSG:4326" :
289+ buffer = 0.5 # degrees
290+ elif self .crs == "EPSG:3857" :
291+ buffer = 30000 # meters
292+ else :
293+ # Default to 0.5, this should never happen
294+ buffer = 0.5
295+
296+ # Filter the data to only include the data within the bbox + buffer so
297+ # we don't have to render a ton of empty space or pull down more chunks
298+ # than we need
299+ da = filter_data_within_bbox (da , self .bbox , buffer )
300+ except Exception as e :
301+ logger .error (f"Error filtering data within bbox: { e } " )
302+ logger .warning ("Falling back to full layer" )
303+
304+ logger .debug (f"Projection time: { time .time () - projection_start } " )
291305
292306 start_dask = time .time ()
293307
294308 da = await asyncio .to_thread (da .compute )
295309
296- # da = da.persist()
297- # if x is not None and y is not None:
298- # x = x.persist()
299- # y = y.persist()
300- # else:
301- # da["x"] = da.x.persist()
302- # da["y"] = da.y.persist()
303-
304- print (da .x [1 ].values - da .x [0 ].values )
305- print (da .y [1 ].values - da .y [0 ].values )
306-
307- print (f"dask compute: { time .time () - start_dask } " )
310+ logger .debug (f"dask compute: { time .time () - start_dask } " )
308311
309312 if minmax_only :
310- # da = da.persist()
311- # data_sel = filter_data_within_bbox(da, self.bbox, self.BBOX_BUFFER)
312-
313313 try :
314314 return {
315315 "min" : float (np .nanmin (da )),
@@ -366,7 +366,7 @@ async def render(
366366 how = "linear" ,
367367 span = (vmin , vmax ),
368368 )
369- print (f"Shade time: { time .time () - start_shade } " )
369+ logger . debug (f"Shade time: { time .time () - start_shade } " )
370370
371371 im = shaded .to_pil ()
372372 im .save (buffer , format = "PNG" )
0 commit comments