opengis: force coordinates precision to six digits (#39197)

This commit is contained in:
Emmanuel Cazenave 2020-01-23 13:59:42 +01:00
parent 7e58546c3a
commit 498a704c3d
2 changed files with 12 additions and 12 deletions

View File

@ -204,12 +204,12 @@ class OpenGIS(BaseResource):
def get_bbox(self, lon1, lat1, lon2, lat2):
if self.projection == 'EPSG:4326':
# send as is but invert coordinates
return '%s,%s,%s,%s' % (lat1, lon1, lat2, lon2)
return '%.6f,%.6f,%.6f,%.6f' % (lat1, lon1, lat2, lon2)
wgs84 = pyproj.Proj(init='EPSG:4326')
target_projection = pyproj.Proj(init=self.projection)
x1, y1 = pyproj.transform(wgs84, target_projection, lon1, lat1)
x2, y2 = pyproj.transform(wgs84, target_projection, lon2, lat2)
return '%s,%s,%s,%s' % (x1, y1, x2, y2)
return '%.6f,%.6f,%.6f,%.6f' % (x1, y1, x2, y2)
@endpoint(perm='can_access',
description=_('Get feature info'),
@ -292,7 +292,7 @@ class OpenGIS(BaseResource):
def reverse(self, request, lat, lon, **kwargs):
lon, lat = self.convert_coordinates(lon, lat)
cql_filter = 'DWITHIN(the_geom,Point(%s %s),%s,meters)' % (lon, lat, self.search_radius)
cql_filter = 'DWITHIN(the_geom,Point(%.6f %.6f),%s,meters)' % (lon, lat, self.search_radius)
params = {
'VERSION': self.get_wfs_service_version(),
'SERVICE': 'WFS',
@ -324,8 +324,8 @@ class OpenGIS(BaseResource):
point_lon = closest_feature['geometry']['coordinates'][0]
point_lat = closest_feature['geometry']['coordinates'][1]
point_lon, point_lat = self.convert_coordinates(point_lon, point_lat, reverse=True)
result['lon'] = str(point_lon)
result['lat'] = str(point_lat)
result['lon'] = "%.6f" % point_lon
result['lat'] = "%.6f" % point_lat
result['address'] = {}
for attribute, properties in self.attributes_mapping:

View File

@ -246,7 +246,7 @@ def test_feature_info(mocked_get, app, connector):
assert endpoint == '/opengis/test/feature_info'
mocked_get.return_value = utils.FakedResponse(content=FAKE_FEATURE_INFO, 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.26121,532579.160633,5747876.19433'
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']
['cad_cadastrecadparcelle_layer']
@ -256,7 +256,7 @@ def test_feature_info(mocked_get, app, connector):
connector.projection = 'EPSG:4326'
connector.save()
resp = app.get(endpoint, params={'lat': '45.796890', 'lon': '4.784140'})
assert mocked_get.call_args[1]['params']['BBOX'] == '45.79679,4.78404,45.79699,4.78424'
assert mocked_get.call_args[1]['params']['BBOX'] == '45.796790,4.784040,45.796990,4.784240'
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:4326'
@ -281,13 +281,13 @@ def test_tile(mocked_get, app, connector):
mocked_get.return_value = utils.FakedResponse(content='\x89PNG\r\n\x1a\n\x00\x00...', status_code=200)
resp = app.get(endpoint + '/16/33650/23378.png')
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:3857'
assert mocked_get.call_args[1]['params']['BBOX'] == '539339.67158,5741338.06856,539951.167806,5741949.56478'
assert mocked_get.call_args[1]['params']['BBOX'] == '539339.671580,5741338.068556,539951.167806,5741949.564782'
connector.projection = 'EPSG:4326'
connector.save()
resp = app.get(endpoint + '/16/33650/23378.png')
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:4326'
assert mocked_get.call_args[1]['params']['BBOX'] == '45.7560261559,4.84497070312,45.7598586879,4.85046386719'
assert resp.content == '\x89PNG\r\n\x1a\n\x00\x00...'
assert mocked_get.call_args[1]['params']['BBOX'] == '45.756026,4.844971,45.759859,4.850464'
@mock.patch('passerelle.utils.Request.get')
@ -415,9 +415,9 @@ def test_reverse_geocoding(mocked_get, app, connector):
'lon': '5.72462060798'
})
assert (mocked_get.call_args[1]['params']['CQL_FILTER']
== 'DWITHIN(the_geom,Point(1914061.48604 4224640.45779),45,meters)')
assert resp.json['lon'] == '5.72407744145'
assert resp.json['lat'] == '45.1893972656'
== 'DWITHIN(the_geom,Point(1914061.486036 4224640.457791),45,meters)')
assert resp.json['lon'] == '5.724077'
assert resp.json['lat'] == '45.189397'
assert resp.json['address']['house_number'] == '4'
assert resp.json['address']['road'] == 'place victor hugo'
assert resp.json['address']['postcode'] == '38000'