/[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 723 by bh, Thu Apr 24 15:31:53 2003 UTC revision 839 by bh, Tue May 6 15:54:18 2003 UTC
# Line 31  class Shape: Line 31  class Shape:
31      def __init__(self, points):      def __init__(self, points):
32          self.points = points          self.points = points
33          #self.compute_bbox()          #self.compute_bbox()
34            self.bbox = None
35    
36      def compute_bbox(self):      def compute_bbox(self):
37            if self.bbox is not None:
38                return self.bbox
39    
40          xs = []          xs = []
41          ys = []          ys = []
42          for x, y in self.points:          for x, y in self.points:
# Line 43  class Shape: Line 47  class Shape:
47          self.urx = max(xs)          self.urx = max(xs)
48          self.ury = max(ys)          self.ury = max(ys)
49    
50            self.bbox = (self.llx, self.lly, self.urx, self.ury)
51    
52            return self.bbox
53    
54      def Points(self):      def Points(self):
55          return self.points          return self.points
56    
# Line 66  class BaseLayer(TitledObject, Modifiable Line 74  class BaseLayer(TitledObject, Modifiable
74    
75      """Base class for the layers."""      """Base class for the layers."""
76    
77      def __init__(self, title, visible = 1):      def __init__(self, title, visible = True):
78          """Initialize the layer.          """Initialize the layer.
79    
80          title -- the title          title -- the title
# Line 106  class Layer(BaseLayer): Line 114  class Layer(BaseLayer):
114                   fill = Color.Transparent,                   fill = Color.Transparent,
115                   stroke = Color.Black,                   stroke = Color.Black,
116                   lineWidth = 1,                   lineWidth = 1,
117                   visible = 1):                   visible = True):
118          """Initialize the layer.          """Initialize the layer.
119    
120          title -- the title          title -- the title
# Line 176  class Layer(BaseLayer): Line 184  class Layer(BaseLayer):
184                                           maxdepth)                                           maxdepth)
185          if self.__classification is not None:          if self.__classification is not None:
186              fieldname = self.__classification.GetField()              fieldname = self.__classification.GetField()
187              if not self.store.Table().field_info_by_name(fieldname):              if fieldname is not None and \
188                   not self.store.Table().HasColumn(fieldname):
189                  self.SetClassification(None)                  self.SetClassification(None)
190          self.changed(LAYER_CHANGED, self)          self.changed(LAYER_CHANGED, self)
191    
# Line 209  class Layer(BaseLayer): Line 218  class Layer(BaseLayer):
218          else:          else:
219              return None              return None
220    
221      def GetFieldType(self, fieldName):      def ShapesBoundingBox(self, shapes):
222          info = self.table.field_info_by_name(fieldName)          """Return a bounding box in lat/long coordinates for the given
223          if info is not None:          list of shape ids.
224              return info[0]  
225            If shapes is None or empty, return None.
226            """
227    
228            if shapes is None or len(shapes) == 0: return None
229    
230            llx = []
231            lly = []
232            urx = []
233            ury = []
234    
235            if self.projection is not None:
236                inverse = lambda x, y: self.projection.Inverse(x, y)
237          else:          else:
238              return None              inverse = lambda x, y: (x, y)
239    
240            for id in shapes:
241                left, bottom, right, top = self.Shape(id).compute_bbox()
242    
243                left, bottom = inverse(left, bottom)
244                right, top   = inverse(right, top)
245    
246                llx.append(left)
247                lly.append(bottom)
248                urx.append(right)
249                ury.append(top)
250    
251            return (min(llx), min(lly), max(urx), max(ury))
252    
253        def GetFieldType(self, fieldName):
254            if self.table.HasColumn(fieldName):
255                return self.table.Column(fieldName).type
256            return None
257    
258      def NumShapes(self):      def NumShapes(self):
259          """Return the number of shapes in the layer"""          """Return the number of shapes in the layer"""
# Line 244  class Layer(BaseLayer): Line 283  class Layer(BaseLayer):
283      def ShapesInRegion(self, box):      def ShapesInRegion(self, box):
284          """Return the ids of the shapes that overlap the box.          """Return the ids of the shapes that overlap the box.
285    
286          Box is a tuple (left, bottom, right, top) in the coordinate          Box is a tuple (left, bottom, right, top) in unprojected coordinates.
         system used by the layer's shapefile.  
287          """          """
288          left, bottom, right, top = box          left, bottom, right, top = box
289    
290            if self.projection is not None:
291                left,  bottom = self.projection.Forward(left, bottom)
292                right, top    = self.projection.Forward(right, top)
293    
294          return self.shapetree.find_shapes((left, bottom), (right, top))          return self.shapetree.find_shapes((left, bottom), (right, top))
295    
296        def GetProjection(self):
297            return self.projection
298    
299      def SetProjection(self, projection):      def SetProjection(self, projection):
300          """Set the layer's projection"""          """Set the layer's projection"""
301          self.projection = projection          self.projection = projection
# Line 305  class Layer(BaseLayer): Line 351  class Layer(BaseLayer):
351              items.append(_("Extent (lat-lon):"))              items.append(_("Extent (lat-lon):"))
352          items.append(_("Shapetype: %s") % shapetype_names[self.ShapeType()])          items.append(_("Shapetype: %s") % shapetype_names[self.ShapeType()])
353    
354            if self.projection and len(self.projection.params) > 0:
355                items.append((_("Projection"),
356                            [str(param) for param in self.projection.params]))
357    
358          items.append(self.__classification)          items.append(self.__classification)
359    
360          return (_("Layer '%s'") % self.Title(), items)          return (_("Layer '%s'") % self.Title(), items)
361    
362    

Legend:
Removed from v.723  
changed lines
  Added in v.839

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26