diff --git a/src/mra.py b/src/mra.py index c8933df7acbe312a602083d53f1f8f7b4ade7d66..d5826bc6bc82d3dd17fc0e87f049c2a29f117dab 100644 --- a/src/mra.py +++ b/src/mra.py @@ -502,6 +502,7 @@ class Mapfile(MetadataMixin): class LayerModel(Layer): + def __init__(self, ws, *args, **kwargs): Layer.__init__(self, *args, **kwargs) self.ws = ws @@ -509,6 +510,7 @@ class LayerModel(Layer): class FeatureTypeModel(LayerModel): + def update(self, ds_name, ft_name, metadata): ws = self.ws @@ -634,8 +636,21 @@ class CoverageModel(LayerModel): self.ms.name = "c:%s:%s" % (cs_name, c_name) self.ms.status = mapscript.MS_OFF self.ms.type = mapscript.MS_LAYER_RASTER - self.ms.setProjection(cs.get_proj4()) - self.ms.setExtent(*cs.get_extent()) + + try: + crs = metadata.pop("crs") + proj4 = "+init=%s:%s" % (crs["authority_name"], crs["authority_code"]) + except Exception as e: + logging.warn('mra.py::MRA::CoverageModel.update error %s', e) + proj4 = cs.get_proj4() + self.ms.setProjection(proj4) + + try: + extent = stores.Extent(*metadata.pop("extent")) + except Exception as e: + logging.warn('mra.py::MRA::CoverageModel.update error %s', e) + extent = cs.get_extent() + self.ms.setExtent(*extent) processing_raster = \ ws.mra.config["mapfile"].get("processing", {}).get("raster", {}) diff --git a/src/server.py b/src/server.py index b27fd65ff57af4c705b80381472b738e6602742e..80ac871f60ad3581251450a2dcdfb5ea2ea1aa55 100755 --- a/src/server.py +++ b/src/server.py @@ -592,8 +592,9 @@ class coverages(object): """Create a new coverage.""" ws = get_workspace(ws_name) - data = get_data(name="coverage", mandatory=["name"], - authorized=["name", "title", "abstract", "enabled"]) + data = get_data( + name="coverage", mandatory=["name"], authorized=[ + "name", "title", "abstract", "enabled", "crs", "extent"]) l_enabled = data.pop("enabled", True) l_metadata = dict( @@ -707,7 +708,10 @@ class coverage(object): ws = get_workspace(ws_name) - data = get_data(name="coverage", mandatory=["name"], authorized=["name", "title", "abstract"]) + data = get_data( + name="coverage", mandatory=["name"], authorized=[ + "name", "title", "abstract", "enabled", "crs", "extent"]) + if c_name != data["name"]: raise webapp.Forbidden("Can't change the name of a coverage.") @@ -725,7 +729,8 @@ class coverage(object): # We need to check if there are any layers using this. mf = mra.get_available() assert_is_empty( - mf.iter_layers(mra={"name": c_name, "workspace": ws_name, "storage": cs_name, "type": "coverage"}), + mf.iter_layers(mra={"name": c_name, "workspace": ws_name, + "storage": cs_name, "type": "coverage"}), "coverage", c_name) with webapp.mightNotFound("coverage", coveragestore=cs_name):