0001-opengis-compute-bbox-according-to-opengis-1.3-rules-.patch
passerelle/apps/opengis/models.py | ||
---|---|---|
201 | 201 |
lon, lat = pyproj.transform(wgs84, target_projection, lon, lat) |
202 | 202 |
return lon, lat |
203 | 203 | |
204 |
def get_bbox(self, lon1, lat1, lon2, lat2): |
|
205 |
if self.projection == 'EPSG:4326': |
|
206 |
# send as is but invert coordinates |
|
207 |
return '%s,%s,%s,%s' % (lat1, lon1, lat2, lon2) |
|
208 |
wgs84 = pyproj.Proj(init='EPSG:4326') |
|
209 |
target_projection = pyproj.Proj(init=self.projection) |
|
210 |
x1, y1 = pyproj.transform(wgs84, target_projection, lon1, lat1) |
|
211 |
x2, y2 = pyproj.transform(wgs84, target_projection, lon2, lat2) |
|
212 |
return '%s,%s,%s,%s' % (x1, y1, x2, y2) |
|
213 | ||
204 | 214 |
@endpoint(perm='can_access', |
205 | 215 |
description=_('Get feature info'), |
206 | 216 |
parameters={ |
... | ... | |
209 | 219 |
}) |
210 | 220 |
def feature_info(self, request, lat, lon): |
211 | 221 |
lon_b, lat_b = float(lon) + 0.002, float(lat) + 0.002 |
212 |
if self.projection != 'EPSG:4326': |
|
213 |
wgs84 = pyproj.Proj(init='EPSG:4326') |
|
214 |
target_projection = pyproj.Proj(init=self.projection) |
|
215 |
lon_b, lat_b = pyproj.transform(wgs84, target_projection, lon_b, lat_b) |
|
216 |
lon, lat = pyproj.transform(wgs84, target_projection, lon, lat) |
|
217 |
bbox = '%s,%s,%s,%s' % (lat, lon, lat_b, lon_b) |
|
222 |
bbox = self.get_bbox(lon, lat, lon_b, lat_b) |
|
218 | 223 |
params = { |
219 | 224 |
'VERSION': '1.3.0', |
220 | 225 |
'SERVICE': 'WMS', |
... | ... | |
261 | 266 |
# upper right |
262 | 267 |
ur_lon, ur_lat = num2deg(tile_x+1, tile_y, zoom) |
263 | 268 | |
264 |
# convert only when projection system is other than WGS84 |
|
265 |
if self.projection != 'EPSG:4326': |
|
266 |
wgs84 = pyproj.Proj(init='EPSG:4326') |
|
267 |
target_projection = pyproj.Proj(init=self.projection) |
|
268 |
ll_lon, ll_lat = pyproj.transform(wgs84, target_projection, ll_lon, ll_lat) |
|
269 |
ur_lon, ur_lat = pyproj.transform(wgs84, target_projection, ur_lon, ur_lat) |
|
270 | ||
271 |
bbox = '%s,%s,%s,%s' % (ll_lon, ll_lat, ur_lon, ur_lat) |
|
269 |
bbox = self.get_bbox(ll_lon, ll_lat, ur_lon, ur_lat) |
|
272 | 270 | |
273 | 271 |
params = { |
274 |
'VERSION': '1.1.1',
|
|
272 |
'VERSION': '1.3.0',
|
|
275 | 273 |
'SERVICE': 'WMS', |
276 | 274 |
'REQUEST': 'GetMap', |
277 | 275 |
'LAYERS': self.query_layer, |
... | ... | |
280 | 278 |
'TRANSPARENT': 'false', |
281 | 279 |
'HEIGHT': '256', |
282 | 280 |
'WIDTH': '256', |
283 |
'SRS': self.projection,
|
|
281 |
'CRS': self.projection,
|
|
284 | 282 |
'BBOX': bbox, |
285 | 283 |
} |
286 | 284 |
response = self.requests.get( |
tests/test_opengis.py | ||
---|---|---|
246 | 246 |
assert endpoint == '/opengis/test/feature_info' |
247 | 247 |
mocked_get.return_value = utils.FakedResponse(content=FAKE_FEATURE_INFO, status_code=200) |
248 | 248 |
resp = app.get(endpoint, params={'lat': '45.796890', 'lon': '4.784140'}) |
249 |
assert mocked_get.call_args[1]['params']['BBOX'] == '5747860.22776,532568.028684,5748179.56467,532790.667665'
|
|
249 |
assert mocked_get.call_args[1]['params']['BBOX'] == '532568.028684,5747860.22776,532790.667665,5748179.56467'
|
|
250 | 250 |
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:3857' |
251 | 251 |
assert (resp.json['data'] |
252 | 252 |
['cad_cadastrecadparcelle_layer'] |
... | ... | |
266 | 266 |
assert endpoint == '/opengis/test/tile' |
267 | 267 |
mocked_get.return_value = utils.FakedResponse(content='\x89PNG\r\n\x1a\n\x00\x00...', status_code=200) |
268 | 268 |
resp = app.get(endpoint + '/16/33650/23378.png') |
269 |
assert mocked_get.call_args[1]['params']['SRS'] == 'EPSG:3857'
|
|
269 |
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:3857'
|
|
270 | 270 |
assert mocked_get.call_args[1]['params']['BBOX'] == '539339.67158,5741338.06856,539951.167806,5741949.56478' |
271 | 271 |
connector.projection = 'EPSG:4326' |
272 | 272 |
connector.save() |
273 | 273 |
resp = app.get(endpoint + '/16/33650/23378.png') |
274 |
assert mocked_get.call_args[1]['params']['SRS'] == 'EPSG:4326'
|
|
275 |
assert mocked_get.call_args[1]['params']['BBOX'] == '4.84497070312,45.7560261559,4.85046386719,45.7598586879'
|
|
274 |
assert mocked_get.call_args[1]['params']['CRS'] == 'EPSG:4326'
|
|
275 |
assert mocked_get.call_args[1]['params']['BBOX'] == '45.7560261559,4.84497070312,45.7598586879,4.85046386719'
|
|
276 | 276 |
assert resp.content == '\x89PNG\r\n\x1a\n\x00\x00...' |
277 | 277 | |
278 | 278 | |
279 |
- |