opengis: compute bbox according to opengis 1.3 rules (#33458)
This commit is contained in:
parent
0c431e3557
commit
61bb06b143
|
@ -201,6 +201,16 @@ class OpenGIS(BaseResource):
|
|||
lon, lat = pyproj.transform(wgs84, target_projection, lon, lat)
|
||||
return lon, lat
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
@endpoint(perm='can_access',
|
||||
description=_('Get feature info'),
|
||||
parameters={
|
||||
|
@ -209,12 +219,7 @@ class OpenGIS(BaseResource):
|
|||
})
|
||||
def feature_info(self, request, lat, lon):
|
||||
lon_b, lat_b = float(lon) + 0.002, float(lat) + 0.002
|
||||
if self.projection != 'EPSG:4326':
|
||||
wgs84 = pyproj.Proj(init='EPSG:4326')
|
||||
target_projection = pyproj.Proj(init=self.projection)
|
||||
lon_b, lat_b = pyproj.transform(wgs84, target_projection, lon_b, lat_b)
|
||||
lon, lat = pyproj.transform(wgs84, target_projection, lon, lat)
|
||||
bbox = '%s,%s,%s,%s' % (lat, lon, lat_b, lon_b)
|
||||
bbox = self.get_bbox(lon, lat, lon_b, lat_b)
|
||||
params = {
|
||||
'VERSION': '1.3.0',
|
||||
'SERVICE': 'WMS',
|
||||
|
@ -261,17 +266,10 @@ class OpenGIS(BaseResource):
|
|||
# upper right
|
||||
ur_lon, ur_lat = num2deg(tile_x+1, tile_y, zoom)
|
||||
|
||||
# convert only when projection system is other than WGS84
|
||||
if self.projection != 'EPSG:4326':
|
||||
wgs84 = pyproj.Proj(init='EPSG:4326')
|
||||
target_projection = pyproj.Proj(init=self.projection)
|
||||
ll_lon, ll_lat = pyproj.transform(wgs84, target_projection, ll_lon, ll_lat)
|
||||
ur_lon, ur_lat = pyproj.transform(wgs84, target_projection, ur_lon, ur_lat)
|
||||
|
||||
bbox = '%s,%s,%s,%s' % (ll_lon, ll_lat, ur_lon, ur_lat)
|
||||
bbox = self.get_bbox(ll_lon, ll_lat, ur_lon, ur_lat)
|
||||
|
||||
params = {
|
||||
'VERSION': '1.1.1',
|
||||
'VERSION': '1.3.0',
|
||||
'SERVICE': 'WMS',
|
||||
'REQUEST': 'GetMap',
|
||||
'LAYERS': self.query_layer,
|
||||
|
@ -280,7 +278,7 @@ class OpenGIS(BaseResource):
|
|||
'TRANSPARENT': 'false',
|
||||
'HEIGHT': '256',
|
||||
'WIDTH': '256',
|
||||
'SRS': self.projection,
|
||||
'CRS': self.projection,
|
||||
'BBOX': bbox,
|
||||
}
|
||||
response = self.requests.get(
|
||||
|
|
|
@ -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'] == '5747860.22776,532568.028684,5748179.56467,532790.667665'
|
||||
assert mocked_get.call_args[1]['params']['BBOX'] == '532568.028684,5747860.22776,532790.667665,5748179.56467'
|
||||
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:3857'
|
||||
assert (resp.json['data']
|
||||
['cad_cadastrecadparcelle_layer']
|
||||
|
@ -266,13 +266,13 @@ def test_tile(mocked_get, app, connector):
|
|||
assert endpoint == '/opengis/test/tile'
|
||||
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']['SRS'] == 'EPSG:3857'
|
||||
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'
|
||||
connector.projection = 'EPSG:4326'
|
||||
connector.save()
|
||||
resp = app.get(endpoint + '/16/33650/23378.png')
|
||||
assert mocked_get.call_args[1]['params']['SRS'] == 'EPSG:4326'
|
||||
assert mocked_get.call_args[1]['params']['BBOX'] == '4.84497070312,45.7560261559,4.85046386719,45.7598586879'
|
||||
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...'
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue