diff --git a/src/mapfile.py b/src/mapfile.py index ac5314bcbf9a53d190ec6c09728eae9dae0113a9..08a432d7aa8cb5b15141d08ec7229096e9d3852a 100644 --- a/src/mapfile.py +++ b/src/mapfile.py @@ -291,6 +291,16 @@ class LayerModel(MetadataMixin): self.configure_layer(layer, ws) return layer + def get_extent(self): + extent = self.ms.getExtent() + return stores.Extent(extent.minx, extent.miny, extent.maxx, extent.maxy) + + def get_latlon_extent(self): + rect = mapscript.rectObj(*self.get_extent()) + res = rect.project(mapscript.projectionObj(self.ms.getProjection()), + mapscript.projectionObj('+init=epsg:4326')) + return stores.Extent(rect.minx, rect.miny, rect.maxx, rect.maxy) + class FeatureTypeModel(LayerModel): """ @@ -318,7 +328,7 @@ class FeatureTypeModel(LayerModel): self.ms.connection = "dbname=%s port=%s host=%s user=%s password=%s" % ( cparam["database"], cparam["port"], cparam["host"], cparam["user"], cparam["password"]) self.ms.data = "%s FROM %s" % (ds[ft_name].get_geometry_column(), ft_name) - self.set_metadata("wms_extent", "%s %s %s %s" % + self.set_metadata("ows_extent", "%s %s %s %s" % (ft.get_extent().minX(), ft.get_extent().minY(), ft.get_extent().maxX(), ft.get_extent().maxY()) ) @@ -359,7 +369,6 @@ class FeatureTypeModel(LayerModel): layer.ms.setMetaData("wfs_getfeature_formatlist", "OGRGML,SHAPEZIP") layer.ms.setMetaData("gml_types", "auto") - # TODO: layer.ms.setMetaData("wfs_extent", "") # TODO: layer.ms.setMetaData("wfs_metadataurl_format", "") # TODO: layer.ms.setMetaData("wfs_metadataurl_href", "") # TODO: layer.ms.setMetaData("wfs_metadataurl_type", "") @@ -453,7 +462,6 @@ class CoverageModel(LayerModel): layer.ms.setMetaData("wcs_enable_request", "GetCapabilities GetCoverage DescribeCoverage") # TODO: layer.set_metadata("wcs_srs", "") - # TODO: layer.set_metadata("wcs_extent", "") # TODO: layer.set_metadata("wcs_getfeature_formatlist", "") # TODO: layer.set_metadata("wcs_metadataurl_format", "") # TODO: layer.set_metadata("wcs_metadataurl_href", "") diff --git a/src/server.py b/src/server.py index 787da9be5a707621a481ecbeb920d0d4e59ebccf..6b052199b70f67e6c4fa71e661c85d007a39c399 100755 --- a/src/server.py +++ b/src/server.py @@ -224,15 +224,16 @@ class featuretype(object): @HTTPCompatible() def GET(self, map_name, ws_name, ds_name, ft_name, format): mf, ws = get_mapfile_workspace(map_name, ws_name) - with webapp.mightNotFound("featureType", datastore=ds_name): - ft = ws.get_featuretypemodel(ft_name, ds_name) ds = ws.get_datastore(ds_name) with webapp.mightNotFound("dataStore", datastore=ds_name): dsft = ds[ft_name] - extent = dsft.get_extent() - latlon_extent = dsft.get_latlon_extent() + with webapp.mightNotFound("featureType", datastore=ds_name): + ft = ws.get_featuretypemodel(ft_name, ds_name) + + extent = ft.get_extent() + latlon_extent = ft.get_latlon_extent() return {"featureType": ({ "name": ft.name, @@ -399,7 +400,7 @@ class coverage(object): with webapp.mightNotFound("coveragestore", workspace=ws_name): cs = ws.get_coveragestore(cs_name) - extent = cs.get_extent() + extent = c.get_extent() latlon_extent = cs.get_latlon_extent() return {"coverage": ({