1 |
# Copyright (c) 2001, 2002, 2003, 2004 by Intevation GmbH |
# Copyright (c) 2001, 2002, 2003, 2004, 2005 by Intevation GmbH |
2 |
# Authors: |
# Authors: |
3 |
# Bernhard Herzog <[email protected]> |
# Bernhard Herzog <[email protected]> |
4 |
# Jonathan Coles <[email protected]> |
# Jonathan Coles <[email protected]> |
237 |
# Ensure that region lies within the layer's bounding box |
# Ensure that region lies within the layer's bounding box |
238 |
# Otherwise projection of the region would lead to incorrect |
# Otherwise projection of the region would lead to incorrect |
239 |
# values. |
# values. |
240 |
clipbbox = self.ClipBoundingBox(bbox) |
clipbbox = self.__mangle_bounding_box(bbox) |
241 |
bbox = self.projection.ForwardBBox(clipbbox) |
bbox = self.projection.ForwardBBox(clipbbox) |
242 |
return self.store.ShapesInRegion(bbox) |
return self.store.ShapesInRegion(bbox) |
243 |
|
|
314 |
|
|
315 |
return (_("Layer '%s'") % self.Title(), items) |
return (_("Layer '%s'") % self.Title(), items) |
316 |
|
|
317 |
def ClipBoundingBox(self, bbox): |
def __mangle_bounding_box(self, bbox): |
318 |
""" Clip bbox to layer's bounding box. |
# FIXME: This method doesn't make much sense. |
319 |
|
# See RT #2845 which effectively says: |
320 |
Returns that part of bbox that lies within the layers bounding box. |
# |
321 |
If bbox is completely outside of the layers bounding box, bbox is |
# If this method, which was originally called ClipBoundingBox, |
322 |
returned. It is assumed that bbox has sensible values, i.e. bminx |
# is supposed to do clipping it shouldn't return the parameter |
323 |
< bmaxx and bminy < bmaxy. |
# unchanged when it lies completely outside of the bounding box. |
324 |
""" |
# It would be better to return None and return an empty list in |
325 |
|
# ShapesInRegion (the only caller) in that case. |
326 |
|
# |
327 |
|
# This method was introduced to fix a bug that IIRC had |
328 |
|
# something todo with projections and bounding boxes containing |
329 |
|
# NaN or INF when the parameter to ShapesInRegion covered the |
330 |
|
# entire earth or something similarly large). |
331 |
bminx, bminy, bmaxx, bmaxy = bbox |
bminx, bminy, bmaxx, bmaxy = bbox |
332 |
lminx, lminy, lmaxx, lmaxy = self.LatLongBoundingBox() |
lminx, lminy, lmaxx, lmaxy = self.LatLongBoundingBox() |
333 |
if bminx > lmaxx or bmaxx < lminx: |
if bminx > lmaxx or bmaxx < lminx: |
340 |
else: |
else: |
341 |
bottom = max(lminy, bminy) |
bottom = max(lminy, bminy) |
342 |
top = min(lmaxy, bmaxy) |
top = min(lmaxy, bmaxy) |
343 |
|
|
344 |
return (left, bottom, right, top) |
return (left, bottom, right, top) |
345 |
|
|
346 |
|
|
354 |
MASK_BIT = 1 |
MASK_BIT = 1 |
355 |
MASK_ALPHA = 2 |
MASK_ALPHA = 2 |
356 |
|
|
357 |
def __init__(self, title, filename, projection = None, visible = True): |
def __init__(self, title, filename, projection = None, |
358 |
|
visible = True, opacity = 1, masktype = MASK_BIT): |
359 |
"""Initialize the Raster Layer. |
"""Initialize the Raster Layer. |
360 |
|
|
361 |
title -- title for the layer. |
title -- title for the layer. |
378 |
|
|
379 |
self.bbox = -1 |
self.bbox = -1 |
380 |
|
|
381 |
self.mask_type = self.MASK_BIT |
self.mask_type = masktype |
382 |
self.opacity = 1 |
self.opacity = opacity |
383 |
|
|
384 |
self.image_info = None |
self.image_info = None |
385 |
|
|