opengis: add support for wfs:FeatureCollection responses (#84053)
gitea/passerelle/pipeline/head This commit looks good
Details
gitea/passerelle/pipeline/head This commit looks good
Details
This commit is contained in:
parent
b9939892b8
commit
f513f2451d
|
@ -314,6 +314,9 @@ class OpenGIS(BaseResource):
|
|||
}
|
||||
response = self.requests.get(self.wms_service_url, params=params)
|
||||
element = ET.fromstring(response.content)
|
||||
if element.tag == '{http://www.opengis.net/wfs}FeatureCollection':
|
||||
features = element.findall('{http://www.opengis.net/gml}featureMembers/*')
|
||||
return {'err': 0, 'data': build_dict_from_xml(features[0]) if features else []}
|
||||
return {'err': 0, 'data': build_dict_from_xml(element)}
|
||||
|
||||
# https://carton.entrouvert.org/hydda-tiles/16/33650/23378.pn
|
||||
|
|
|
@ -39,6 +39,56 @@ FAKE_FEATURE_INFO = '''<?xml version="1.0" encoding="UTF-8"?>
|
|||
</cad_cadastre.cadparcelle_layer>
|
||||
</msGMLOutput>'''
|
||||
|
||||
FAKE_FEATURE_INFO_FEATURE_COLLECTION = '''<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wfs:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
xmlns:wfs="http://www.opengis.net/wfs"
|
||||
xmlns:gml="http://www.opengis.net/gml"
|
||||
xmlns:metropole-de-lyon="http://metropole-de-lyon"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="..."
|
||||
>
|
||||
<gml:boundedBy>
|
||||
<gml:Envelope srsDimension="2" srsName="urn:x-ogc:def:crs:EPSG:3857">
|
||||
<gml:lowerCorner>531238.20604672 5735107.61605308</gml:lowerCorner>
|
||||
<gml:upperCorner>546464.26335844 5751147.23178471</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</gml:boundedBy>
|
||||
<gml:featureMembers>
|
||||
<metropole-de-lyon:eco_ecologie.zfe gml:id="eco_ecologie.zfe.200046977-ZFE-001">
|
||||
<gml:boundedBy>
|
||||
<gml:Envelope srsName="urn:x-ogc:def:crs:EPSG:3857" srsDimension="2">
|
||||
<gml:lowerCorner>531238.20604672 5735107.61605308</gml:lowerCorner>
|
||||
<gml:upperCorner>546464.26335844 5751147.23178471</gml:upperCorner>
|
||||
</gml:Envelope>
|
||||
</gml:boundedBy>
|
||||
<metropole-de-lyon:gid>200046977-ZFE-001</metropole-de-lyon:gid>
|
||||
<metropole-de-lyon:date_debut>2020-01-01</metropole-de-lyon:date_debut>
|
||||
<metropole-de-lyon:vp_critair>V5</metropole-de-lyon:vp_critair>
|
||||
<metropole-de-lyon:vp_horaires>24/7</metropole-de-lyon:vp_horaires>
|
||||
<metropole-de-lyon:vul_critair>V3</metropole-de-lyon:vul_critair>
|
||||
<metropole-de-lyon:vul_horaires>24/7</metropole-de-lyon:vul_horaires>
|
||||
<metropole-de-lyon:pl_critair>V3</metropole-de-lyon:pl_critair>
|
||||
<metropole-de-lyon:pl_horaires>24/7</metropole-de-lyon:pl_horaires>
|
||||
<metropole-de-lyon:autobus_autocars_critair>V5</metropole-de-lyon:autobus_autocars_critair>
|
||||
<metropole-de-lyon:autobus_autocars_horaires>24/7</metropole-de-lyon:autobus_autocars_horaires>
|
||||
<metropole-de-lyon:deux_rm_critair>V5</metropole-de-lyon:deux_rm_critair>
|
||||
<metropole-de-lyon:deux_rm_horaires>24/7</metropole-de-lyon:deux_rm_horaires>
|
||||
<metropole-de-lyon:url_arrete>https://agora.grandlyon.com/webdelib/files/unzip//seance_264250/23_d1647427974276.pdf</metropole-de-lyon:url_arrete>
|
||||
<metropole-de-lyon:url_site_information>https://www.grandlyon.com/actions/zfe.html#c20726</metropole-de-lyon:url_site_information>
|
||||
<metropole-de-lyon:the_geom>
|
||||
<gml:Polygon srsName="urn:x-ogc:def:crs:EPSG:3857" srsDimension="2">
|
||||
<gml:exterior>
|
||||
<gml:LinearRing>
|
||||
<gml:posList>...</gml:posList>
|
||||
</gml:LinearRing>
|
||||
</gml:exterior>
|
||||
</gml:Polygon>
|
||||
</metropole-de-lyon:the_geom>
|
||||
<metropole-de-lyon:id>200046977-ZFE-001</metropole-de-lyon:id>
|
||||
</metropole-de-lyon:eco_ecologie.zfe>
|
||||
</gml:featureMembers>
|
||||
</wfs:FeatureCollection>'''
|
||||
|
||||
FAKE_SERVICE_CAPABILITIES = '''<?xml version="1.0" encoding="UTF-8"?>
|
||||
<wfs:WFS_Capabilities version="2.0.0"
|
||||
xmlns:wfs="http://www.opengis.net/wfs/2.0"
|
||||
|
@ -448,6 +498,22 @@ def test_feature_info(mocked_get, app, connector):
|
|||
assert mocked_get.call_args[1]['params']['crs'] == 'EPSG:4326'
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
def test_feature_info_feature_collection(mocked_get, app, connector):
|
||||
endpoint = tests.utils.generic_endpoint_url('opengis', 'feature_info', slug=connector.slug)
|
||||
assert endpoint == '/opengis/test/feature_info'
|
||||
mocked_get.return_value = tests.utils.FakedResponse(
|
||||
content=FAKE_FEATURE_INFO_FEATURE_COLLECTION, status_code=200
|
||||
)
|
||||
resp = app.get(endpoint, params={'lat': '45.796890', 'lon': '4.784140'})
|
||||
assert (
|
||||
mocked_get.call_args[1]['params']['bbox']
|
||||
== '532556.896735,5747844.261214,532579.160633,5747876.194333'
|
||||
)
|
||||
assert mocked_get.call_args[1]['params']['crs'] == 'EPSG:3857'
|
||||
assert resp.json['data']['autobus_autocars_critair'] == 'V5'
|
||||
|
||||
|
||||
@mock.patch('passerelle.utils.Request.get')
|
||||
@pytest.mark.parametrize(
|
||||
'lat,lon',
|
||||
|
|
Loading…
Reference in New Issue