/[thuban]/trunk/thuban/Thuban/Model/layer.py
ViewVC logotype

Diff of /trunk/thuban/Thuban/Model/layer.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1587 by bh, Fri Aug 15 10:31:07 2003 UTC revision 1983 by bh, Thu Nov 27 15:57:23 2003 UTC
# Line 8  Line 8 
8    
9  __version__ = "$Revision$"  __version__ = "$Revision$"
10    
11    import os
12  import warnings  import warnings
13    
14  from Thuban import _  from Thuban import _
# Line 124  class Layer(BaseLayer): Line 125  class Layer(BaseLayer):
125    
126          self.UnsetModified()          self.UnsetModified()
127    
     def __getattr__(self, attr):  
         """Access to some attributes for backwards compatibility  
   
         The attributes implemented here are now held by the shapestore  
         if at all. For backwards compatibility pretend that they are  
         still there but issue a DeprecationWarning when they are  
         accessed.  
         """  
         if attr in ("table", "shapetable"):  
             value = self.store.Table()  
         elif attr == "shapefile":  
             value = self.store.Shapefile()  
         elif attr == "filename":  
             value = self.store.FileName()  
         else:  
             raise AttributeError, attr  
         warnings.warn("The Layer attribute %r is deprecated."  
                       " It's value can be accessed through the shapestore"  
                       % attr, DeprecationWarning, stacklevel = 2)  
         return value  
   
128      def SetShapeStore(self, store):      def SetShapeStore(self, store):
129          # Set the classification to None if there is a classification          # Set the classification to None if there is a classification
130          # and the new shapestore doesn't have a table with a suitable          # and the new shapestore doesn't have a table with a suitable
# Line 186  class Layer(BaseLayer): Line 166  class Layer(BaseLayer):
166          Return None, if the layer doesn't contain any shapes.          Return None, if the layer doesn't contain any shapes.
167          """          """
168          bbox = self.BoundingBox()          bbox = self.BoundingBox()
169          if bbox is not None:          if bbox is not None and self.projection is not None:
170              llx, lly, urx, ury = bbox              bbox = self.projection.InverseBBox(bbox)
171              if self.projection is not None:          return bbox
                 llx, lly = self.projection.Inverse(llx, lly)  
                 urx, ury = self.projection.Inverse(urx, ury)  
             return llx, lly, urx, ury  
         else:  
             return None  
172    
173      def ShapesBoundingBox(self, shapes):      def ShapesBoundingBox(self, shapes):
174          """Return a bounding box in lat/long coordinates for the given          """Return a bounding box in lat/long coordinates for the given
# Line 204  class Layer(BaseLayer): Line 179  class Layer(BaseLayer):
179    
180          if shapes is None or len(shapes) == 0: return None          if shapes is None or len(shapes) == 0: return None
181    
182          llx = []          xs = []
183          lly = []          ys = []
         urx = []  
         ury = []  
   
         if self.projection is not None:  
             inverse = lambda x, y: self.projection.Inverse(x, y)  
         else:  
             inverse = lambda x, y: (x, y)  
184    
185          for id in shapes:          for id in shapes:
186              left, bottom, right, top = self.Shape(id).compute_bbox()              bbox = self.Shape(id).compute_bbox()
187                if self.projection is not None:
188              left, bottom = inverse(left, bottom)                  bbox = self.projection.InverseBBox(bbox)
189              right, top   = inverse(right, top)              left, bottom, right, top = bbox
190                xs.append(left); xs.append(right)
191                ys.append(bottom); ys.append(top)
192    
193              llx.append(left)          return (min(xs), min(ys), max(xs), max(ys))
             lly.append(bottom)  
             urx.append(right)  
             ury.append(top)  
194    
         return (min(llx), min(lly), max(urx), max(ury))  
195    
196      def GetFieldType(self, fieldName):      def GetFieldType(self, fieldName):
197          if self.store:          if self.store:
# Line 254  class Layer(BaseLayer): Line 220  class Layer(BaseLayer):
220          return self.store.Shape(index)          return self.store.Shape(index)
221    
222      def ShapesInRegion(self, bbox):      def ShapesInRegion(self, bbox):
223          """Return the ids of the shapes that overlap the box.          """Return an iterable over the shapes that overlap the bounding box.
224    
225          Box is a tuple (left, bottom, right, top) in unprojected coordinates.          The bbox parameter should be the bounding box as a tuple in the
226            form (minx, miny, maxx, maxy) in unprojected coordinates.
227          """          """
228          if self.projection is not None:          if self.projection is not None:
229              left, bottom, right, top = bbox              bbox = self.projection.ForwardBBox(bbox)
             xs = []; ys = []  
             for x, y in [(left, bottom), (left, top), (right, top),  
                          (right, bottom)]:  
                 x, y = self.projection.Forward(x, y)  
                 xs.append(x)  
                 ys.append(y)  
             bbox = (min(xs), min(ys), max(xs), max(ys))  
   
230          return self.store.ShapesInRegion(bbox)          return self.store.ShapesInRegion(bbox)
231    
232      def GetClassificationColumn(self):      def GetClassificationColumn(self):
# Line 369  class RasterLayer(BaseLayer): Line 328  class RasterLayer(BaseLayer):
328          BaseLayer.__init__(self, title, visible = visible)          BaseLayer.__init__(self, title, visible = visible)
329    
330          self.projection = projection          self.projection = projection
331          self.filename = filename          self.filename = os.path.abspath(filename)
332    
333          self.bbox = -1          self.bbox = -1
334    
# Line 431  class RasterLayer(BaseLayer): Line 390  class RasterLayer(BaseLayer):
390          if bbox is None:          if bbox is None:
391              return None              return None
392    
         llx, lly, urx, ury = bbox  
393          if self.projection is not None:          if self.projection is not None:
394              llx, lly = self.projection.Inverse(llx, lly)              bbox = self.projection.InverseBBox(bbox)
             urx, ury = self.projection.Inverse(urx, ury)  
395    
396          return llx, lly, urx, ury          return bbox
397    
398      def GetImageFilename(self):      def GetImageFilename(self):
399          return self.filename          return self.filename

Legend:
Removed from v.1587  
changed lines
  Added in v.1983

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26