2121 RasterMapLayer ,
2222 VectorFeature ,
2323 VectorMapLayer ,
24+ FMVLayer ,
25+ FMVVectorFeature ,
2426)
2527from uvdat .core .rest .serializers import (
2628 AbstractMapLayerSerializer ,
2729 NetCDFLayerSerializer ,
2830 RasterMapLayerSerializer ,
2931 VectorMapLayerDetailSerializer ,
3032 VectorMapLayerSerializer ,
33+ FMVLayerSerializer ,
3134)
3235
3336from .permissions import DefaultPermission
@@ -466,7 +469,8 @@ def create(self, request, *args, **kwargs):
466469 raster_layer = RasterMapLayer .objects .filter (id = layer_id ).first ()
467470 vector_layer = VectorMapLayer .objects .filter (id = layer_id ).first ()
468471 netcdf_layer = NetCDFLayer .objects .filter (id = layer_id ).first ()
469- map_layer = raster_layer or vector_layer or netcdf_layer
472+ fmv_layer = FMVLayer .objects .filter (id = layer_id ).first ()
473+ map_layer = raster_layer or vector_layer or netcdf_layer or fmv_layer
470474
471475 if map_layer is None :
472476 continue # Skip if no layer is found for the provided ID
@@ -478,6 +482,8 @@ def create(self, request, *args, **kwargs):
478482 serializer = VectorMapLayerSerializer (map_layer )
479483 elif isinstance (map_layer , NetCDFLayer ):
480484 serializer = NetCDFLayerSerializer (map_layer )
485+ elif isinstance (map_layer , FMVLayer ):
486+ serializer = FMVLayerSerializer (map_layer )
481487 # Get the serialized data
482488 layer_response = serializer .data
483489 if raster_layer :
@@ -486,6 +492,8 @@ def create(self, request, *args, **kwargs):
486492 layer_response ['type' ] = 'vector'
487493 elif netcdf_layer :
488494 layer_response ['type' ] = 'netcdf'
495+ elif fmv_layer :
496+ layer_response ['type' ] = 'fmv'
489497
490498 # Check for LayerRepresentation if provided
491499 if layer_representation_id is not None :
@@ -525,12 +533,14 @@ def list_all_map_layers(self, request, *args, **kwargs):
525533 raster_layers = RasterMapLayer .objects .all ()
526534 vector_layers = VectorMapLayer .objects .all ()
527535 netcdf_layers = NetCDFLayer .objects .all ()
536+ fmv_layers = FMVLayer .objects .all ()
528537
529538 # Serialize layers
530539 for map_layer , _serializer , layer_type in [
531540 (raster_layers , RasterMapLayerSerializer , 'raster' ),
532541 (vector_layers , VectorMapLayerSerializer , 'vector' ),
533542 (netcdf_layers , NetCDFLayerSerializer , 'netcdf' ),
543+ (fmv_layers , FMVLayer , 'fmv' ),
534544 ]:
535545 for layer in map_layer :
536546 serializer = AbstractMapLayerSerializer (layer )
@@ -577,6 +587,9 @@ def list(self, request, *args, **kwargs):
577587 if not map_layer and 'netcdf' == layer_type :
578588 map_layer = NetCDFLayer .objects .filter (id = layer_id ).first ()
579589 serializer_class = NetCDFLayerSerializer
590+ if not map_layer and 'fmv' == layer_type :
591+ map_layer = FMVLayer .objects .filter (id = layer_id ).first ()
592+ serializer_class = FMVLayerSerializer
580593
581594 if not map_layer :
582595 continue # Skip if no matching layer is found
@@ -619,6 +632,7 @@ def map_layer_bbox(self, request, *args, **kwargs):
619632 raster_map_layer_ids = request .query_params .getlist ('rasterMapLayerIds' )
620633 vector_map_layer_ids = request .query_params .getlist ('vectorMapLayerIds' )
621634 netcdf_map_layer_ids = request .query_params .getlist ('netCDFMapLayerIds' )
635+ fmv_map_layer_ids = request .query_params .getlist ('fmvMapLayerIds' )
622636
623637 # Initialize variables to track the overall bounding box
624638 overall_bbox = {
@@ -663,6 +677,17 @@ def map_layer_bbox(self, request, *args, **kwargs):
663677 overall_bbox ['ymin' ] = min (overall_bbox ['ymin' ], netcdf_bbox [1 ])
664678 overall_bbox ['xmax' ] = max (overall_bbox ['xmax' ], netcdf_bbox [2 ])
665679 overall_bbox ['ymax' ] = max (overall_bbox ['ymax' ], netcdf_bbox [3 ])
680+ if fmv_map_layer_ids :
681+ fmv_bboxes = FMVVectorFeature .objects .filter (
682+ map_layer_id__in = fmv_map_layer_ids
683+ ).aggregate (extent = Extent ('geometry' ))['extent' ]
684+
685+ if vector_bboxes :
686+ overall_bbox ['xmin' ] = min (overall_bbox ['xmin' ], vector_bboxes [0 ])
687+ overall_bbox ['ymin' ] = min (overall_bbox ['ymin' ], vector_bboxes [1 ])
688+ overall_bbox ['xmax' ] = max (overall_bbox ['xmax' ], vector_bboxes [2 ])
689+ overall_bbox ['ymax' ] = max (overall_bbox ['ymax' ], vector_bboxes [3 ])
690+
666691 # Check if the bbox values were updated; if not, return an error message
667692 if overall_bbox ['xmin' ] == float ('inf' ):
668693 return JsonResponse (
@@ -697,6 +722,8 @@ def update_name(self, request, *args, **kwargs):
697722 RasterMapLayer .objects .filter (id = layer_id ).update (name = new_name )
698723 elif layer_type == 'netcdf' :
699724 NetCDFData .objects .filter (id = layer_id ).update (name = new_name )
725+ elif layer_type == 'fmv' :
726+ FMVLayer .objects .filter (id = layer_id ).update (name = new_name )
700727 else :
701728 return Response (
702729 {'error' : 'Invalid layer type. Must be "vector" or "raster".' },
0 commit comments