From 0e52aef09181a82e140caa091522fb9c1ce2ee13 Mon Sep 17 00:00:00 2001
From: m431m <mmeliani@neogeo.fr>
Date: Fri, 13 Nov 2020 13:15:27 +0100
Subject: [PATCH] Add force CRS value with coverage model

---
 src/mra.py    | 19 +++++++++++++++++--
 src/server.py | 13 +++++++++----
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/mra.py b/src/mra.py
index c8933df..d5826bc 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 b27fd65..80ac871 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):
-- 
GitLab