32 |
from Thuban.UI.baserenderer import BaseRenderer, \ |
from Thuban.UI.baserenderer import BaseRenderer, \ |
33 |
add_renderer_extension, init_renderer_extensions |
add_renderer_extension, init_renderer_extensions |
34 |
|
|
35 |
from Thuban.version import versions |
if Thuban.Model.resource.has_gdal_support(): |
36 |
|
from gdalwarp import ProjectRasterFile |
37 |
|
|
38 |
class MockDC: |
class MockDC: |
39 |
|
|
95 |
self.raster_data = data |
self.raster_data = data |
96 |
self.raster_format = format |
self.raster_format = format |
97 |
|
|
98 |
|
def projected_raster_layer(self, layer, srcProj, dstProj, extents, |
99 |
|
resolution, dimensions, options): |
100 |
|
|
101 |
|
if not Thuban.Model.resource.has_gdal_support(): |
102 |
|
raise support.SkipTest("No gdal support") |
103 |
|
|
104 |
|
#print srcProj, dstProj,extents, resolution, dimensions, options |
105 |
|
|
106 |
|
return ProjectRasterFile(layer.GetImageFilename(), |
107 |
|
srcProj, dstProj, |
108 |
|
extents, resolution, dimensions, |
109 |
|
options) |
110 |
|
|
111 |
class MockProjection: |
class MockProjection: |
112 |
|
|
113 |
"""Objects that look like projections but simply apply non-uniform scalings |
"""Objects that look like projections but simply apply non-uniform scalings |
276 |
('SetFont', "label font"), |
('SetFont', "label font"), |
277 |
('EndDrawing',)]) |
('EndDrawing',)]) |
278 |
|
|
279 |
|
def test_projected_raster_layer(self): |
280 |
|
if not Thuban.Model.resource.has_gdal_support(): |
281 |
|
raise support.SkipTest("No gdal support") |
282 |
|
|
283 |
|
layer = RasterLayer("raster layer", |
284 |
|
os.path.join("..", "Data", "iceland", |
285 |
|
"island.tif")) |
286 |
|
|
287 |
|
dc = MockDC(size = (20, 20)) |
288 |
|
renderer = SimpleRenderer(dc, map, 34, (800, 2250)) |
289 |
|
|
290 |
|
# The reference data as a base64 coded RAW image |
291 |
|
raw_data = binascii.a2b_base64( |
292 |
|
'UmbmUmbmUmbmUmbmUmbmAtYCJooCAtICAq4CJooCArICAuICArICAuYCAs4COn4CO' |
293 |
|
'n4CAq4CAuICFpICUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAuYCAqICAqoCAqoCFp' |
294 |
|
'ICJooCIo4CCpoCQnoGOn4CDpYCOn4CUmbmUmbmNo6aEpYCLoYCAqICGpICFpICUmb' |
295 |
|
'mAt4CUmbmNo6aAtICArYCAqoCKoYCMoICTnYKOn4CFpICUmbmUmbmUmbmUmbmAp4C' |
296 |
|
'NoICArYCAr4CCpoCAqYCCpoCEpYCHo4CFpICHo4CGpICFpICKoYCTnYKMoICAp4CU' |
297 |
|
'mbmUmbmUmbmUmbmUmbmUmbmAtYCAroCArYCCpoCAtYCAroCAtICAsYCUmbmAt4CAq' |
298 |
|
'YCAroCMoICAs4CAs4CAtYCAt4CAqYCUmbmUmbmUmbmUmbmAtoCAtYCAq4CAtoCBp4' |
299 |
|
'CAroCAqoCAq4CAr4CDpYCGpICAt4CAsICDpYCArICCpoCHo4CAs4CAuICUmbmUmbm' |
300 |
|
'UmbmUmbmUmbmUmbmAuICAqICFpYCAq4CDpoCAqYCFpICAqYCUmbmNo6aAsYCCpoCD' |
301 |
|
'pYCAqICAtoCUmbmAt4CAqoCCpoCAroCHo4CAsYCAq4CAsICAs4CAp4CUmbmAtYCAq' |
302 |
|
'YCIooCHo4CAsICAr4CAqICEpYCAs4CAqICArICDpYCEpYCEpYCAr4CUmbmEpYCAs4' |
303 |
|
'CAtICAs4CAqYCUmbmAtoCAp4CCpoCDpYCAq4CArICAqoCAqYCAqYCAtYCAtoCDpYC' |
304 |
|
'At4CUmbmUmbmUmbmUmbmAt4CAsoCAsoCAp4CAp4CCpoCAsoCAt4CNo6aUmbmUmbmU' |
305 |
|
'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmAt4CAtYCCpoCAqICAroCAr4CUmbmUm' |
306 |
|
'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb' |
307 |
|
'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm' |
308 |
|
'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU' |
309 |
|
'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm' |
310 |
|
'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb' |
311 |
|
'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm' |
312 |
|
'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmU' |
313 |
|
'mbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUm' |
314 |
|
'bmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmb' |
315 |
|
'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm' |
316 |
|
'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n') |
317 |
|
|
318 |
|
raw_mask = binascii.a2b_base64( |
319 |
|
'//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P/' |
320 |
|
'/8P//8P//8P//8P//8P\n') |
321 |
|
|
322 |
|
raw_mask_inverted = binascii.a2b_base64( |
323 |
|
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' |
324 |
|
'AAAAAAAAAAAAAAAAAAA\n') |
325 |
|
|
326 |
|
raw_alpha = binascii.a2b_base64( |
327 |
|
'/////////////////////////////////////////////////////////////' |
328 |
|
'/////////////////////////////////////////////////////////////' |
329 |
|
'/////////////////////////////////////////////////////////////' |
330 |
|
'/////////////////////////////////////////////////////////////' |
331 |
|
'/////////////////////////////////////////////////////////////' |
332 |
|
'/////////////////////////////////////////////////////////////' |
333 |
|
'/////////////////////////////////////////////////////////////' |
334 |
|
'/////////////////////////////////////////////////////////////' |
335 |
|
'/////////////////////////////////////////////w==\n') |
336 |
|
|
337 |
|
for opts, data in [[1, (raw_data, raw_mask, None)], |
338 |
|
[1|4, (raw_data, raw_mask_inverted, None)], |
339 |
|
[2, (raw_data, None, raw_alpha)]]: |
340 |
|
|
341 |
|
img_data = renderer.projected_raster_layer(layer, "", "", |
342 |
|
(-24, 65, -23, 66), [0, 0], (20, 20), opts) |
343 |
|
self.assertEquals(img_data, data) |
344 |
|
|
345 |
def test_raster_no_projection(self): |
def test_raster_no_projection(self): |
346 |
"""Test BaseRenderer with raster layer and no projections |
"""Test BaseRenderer with raster layer and no projections |
347 |
|
|
357 |
layer = RasterLayer("raster layer", |
layer = RasterLayer("raster layer", |
358 |
os.path.join("..", "Data", "iceland", |
os.path.join("..", "Data", "iceland", |
359 |
"island.tif")) |
"island.tif")) |
360 |
|
layer.SetMaskType(layer.MASK_NONE) |
361 |
|
|
362 |
map.AddLayer(layer) |
map.AddLayer(layer) |
363 |
self.to_destroy.append(map) |
self.to_destroy.append(map) |
364 |
|
|
402 |
'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm' |
'mUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm' |
403 |
'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n') |
'UmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbmUmbm\n') |
404 |
|
|
|
#print |
|
|
#hexed = binascii.b2a_base64(renderer.raster_data[2][1]) |
|
|
#while hexed: |
|
|
#print repr(hexed[:61]) |
|
|
#hexed = hexed[61:] |
|
|
|
|
|
|
|
|
if versions['wxPython-tuple'] < (2,5,3): |
|
|
raw_mask = binascii.a2b_base64( |
|
|
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' |
|
|
'AAAAAAAAAAAAAAAAAAA\n') |
|
|
else: |
|
|
raw_mask = binascii.a2b_base64( |
|
|
'//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P//8P/' |
|
|
'/8P//8P//8P//8P//8P\n') |
|
|
|
|
405 |
self.assertEquals(renderer.raster_data, |
self.assertEquals(renderer.raster_data, |
406 |
(20,20,(raw_data, raw_mask, None))) |
(20,20,(raw_data, None, None))) |
407 |
|
|
408 |
self.assertEquals(renderer.raster_format, "RAW") |
self.assertEquals(renderer.raster_format, "RAW") |
409 |
|
|
412 |
('SetFont', "label font"), |
('SetFont', "label font"), |
413 |
('EndDrawing',)]) |
('EndDrawing',)]) |
414 |
|
|
|
if versions['wxPython-tuple'] >= (2,5,3): |
|
|
layer.SetMaskType(layer.MASK_ALPHA) |
|
|
renderer.render_map() |
|
|
|
|
|
#print |
|
|
#hexed = binascii.b2a_base64(renderer.raster_data[2][2]) |
|
|
#while hexed: |
|
|
#print repr(hexed[:61]) |
|
|
#hexed = hexed[61:] |
|
|
raw_alpha = binascii.a2b_base64( |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////////////////////' |
|
|
'/////////////////////////////////////////////w==\n') |
|
|
self.assertEquals(renderer.raster_data, |
|
|
(20,20,(raw_data, None, raw_alpha))) |
|
|
|
|
|
|
|
|
layer.SetMaskType(layer.MASK_NONE) |
|
|
renderer.render_map() |
|
|
self.assertEquals(renderer.raster_data, (20,20,(raw_data, None, None))) |
|
|
|
|
415 |
def test_point_map_projection(self): |
def test_point_map_projection(self): |
416 |
"""Test BaseRenderer with point layer and map projection""" |
"""Test BaseRenderer with point layer and map projection""" |
417 |
table = MemoryTable([("type", FIELDTYPE_STRING), |
table = MemoryTable([("type", FIELDTYPE_STRING), |