def publish_layer_group(geonode_map): """ Publishes local map layers as WMS layer group on local OWS. """ if 'geonode.geoserver' in settings.INSTALLED_APPS: from geonode.geoserver.helpers import gs_catalog from geoserver.layergroup import UnsavedLayerGroup as GsUnsavedLayerGroup else: raise Exception( 'Cannot publish layer group if geonode.geoserver is not in INSTALLED_APPS') # temporary permission workaround: # only allow public maps to be published if not geonode_map.is_public: return 'Only public maps can be saved as layer group.' map_layers = MapLayer.objects.filter(map=geonode_map.id) # Local Group Layer layers and corresponding styles layers = [] lg_styles = [] for ml in map_layers: if ml.local: layer = Layer.objects.get(typename=ml.name) style = ml.styles or getattr(layer.default_style, 'name', '') layers.append(layer) lg_styles.append(style) lg_layers = [l.name for l in layers] # Group layer bounds and name lg_bounds = [ str(min(geonode_map.bbox_x0,geonode_map.bbox_x1)), # xmin str(max(geonode_map.bbox_x0,geonode_map.bbox_x1)), # xmax str(min(geonode_map.bbox_y0,geonode_map.bbox_y1)), # ymin str(max(geonode_map.bbox_y0,geonode_map.bbox_y1)), # ymax str(geonode_map.srid)] # lg_bounds = [str(coord) for coord in geonode_map.bbox] lg_name = '%s_%d' % (slugify(geonode_map.title), geonode_map.id) # Update existing or add new group layer lg = geonode_map.layer_group if lg is None: lg = GsUnsavedLayerGroup( gs_catalog, lg_name, lg_layers, lg_styles, lg_bounds) else: lg.layers, lg.styles, lg.bounds = lg_layers, lg_styles, lg_bounds gs_catalog.save(lg) return lg_name
def publish_layer_group(self): """ Publishes local map layers as WMS layer group on local OWS. """ if check_ogc_backend(geoserver.BACKEND_PACKAGE): from geonode.geoserver.helpers import gs_catalog from geoserver.layergroup import UnsavedLayerGroup as GsUnsavedLayerGroup else: raise Exception( 'Cannot publish layer group if geonode.geoserver is not in INSTALLED_APPS') # temporary permission workaround: # only allow public maps to be published if not self.is_public: return 'Only public maps can be saved as layer group.' map_layers = MapLayer.objects.filter(map=self.id) # Local Group Layer layers and corresponding styles layers = [] lg_styles = [] for ml in map_layers: if ml.local: layer = Layer.objects.get(alternate=ml.name) style = ml.styles or getattr(layer.default_style, 'name', '') layers.append(layer) lg_styles.append(style) lg_layers = [lyr.name for lyr in layers] # Group layer bounds and name lg_bounds = [str(coord) for coord in self.bbox] lg_name = f'{slugify(self.title)}_{self.id}' # Update existing or add new group layer lg = self.layer_group if lg is None: lg = GsUnsavedLayerGroup( gs_catalog, lg_name, lg_layers, lg_styles, lg_bounds) else: lg.layers, lg.styles, lg.bounds = lg_layers, lg_styles, lg_bounds gs_catalog.save(lg) return lg_name
def publish_layer_group(self): """ Publishes local map layers as WMS layer group on local OWS. """ # temporary permission workaround: # only allow public maps to be published if not self.is_public: return 'Only public maps can be saved as layer group.' map_layers = MapLayer.objects.filter(map=self.id) # Local Group Layer layers and corresponding styles layers = [] lg_styles = [] for ml in map_layers: if ml.local: layer = Layer.objects.get(typename=ml.name) style = ml.styles or getattr(layer.default_style, 'name', '') layers.append(layer) lg_styles.append(style) lg_layers = [l.name for l in layers] # Group layer bounds and name lg_bounds = [str(coord) for coord in self.bbox] lg_name = '%s_%d' % (slugify(self.title), self.id) # Update existing or add new group layer cat = Catalog(ogc_server_settings.rest, _user, _password) lg = self.layer_group if lg is None: lg = GsUnsavedLayerGroup(cat, lg_name, lg_layers, lg_styles, lg_bounds) else: lg.layers, lg.styles, lg.bounds = lg_layers, lg_styles, lg_bounds cat.save(lg) return lg_name