/[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 929 by jonathan, Tue May 20 15:22:42 2003 UTC revision 1117 by bh, Fri May 30 18:31:19 2003 UTC
# Line 173  class Layer(BaseLayer): Line 173  class Layer(BaseLayer):
173          self.store = store          self.store = store
174          self.shapefile = self.store.Shapefile()          self.shapefile = self.store.Shapefile()
175          self.shapetable = self.store.Table()          self.shapetable = self.store.Table()
176          self.filename = self.store.filename          if hasattr(self.store, "FileName"):
177                self.filename = self.store.FileName()
178          self.table = self.shapetable          self.table = self.shapetable
179    
180          numshapes, shapetype, mins, maxs = self.shapefile.info()          numshapes, shapetype, mins, maxs = self.shapefile.info()
# Line 198  class Layer(BaseLayer): Line 199  class Layer(BaseLayer):
199    
200          self.shapetree = shptree.SHPTree(self.shapefile.cobject(), 2,          self.shapetree = shptree.SHPTree(self.shapefile.cobject(), 2,
201                                           maxdepth)                                           maxdepth)
202            # Set the classification to None if there is a classification
203            # and the new shapestore doesn't have a table with a suitable
204            # column, i.e one with the same name and type as before
205            # FIXME: Maybe we should keep it the same if the type is
206            # compatible enough such as FIELDTYPE_DOUBLE and FIELDTYPE_INT
207          if self.__classification is not None:          if self.__classification is not None:
208              fieldname = self.__classification.GetField()              fieldname = self.__classification.GetField()
209              if fieldname is not None and \              fieldtype = self.__classification.GetFieldType()
210                 not self.store.Table().HasColumn(fieldname):              table = self.store.Table()
211                if (fieldname is not None
212                    and (not table.HasColumn(fieldname)
213                         or table.Column(fieldname).type != fieldtype)):
214                  self.SetClassification(None)                  self.SetClassification(None)
215          self.changed(LAYER_CHANGED, self)          self.changed(LAYER_CHANGED, self)
216    
# Line 211  class Layer(BaseLayer): Line 220  class Layer(BaseLayer):
220      def Destroy(self):      def Destroy(self):
221          BaseLayer.Destroy(self)          BaseLayer.Destroy(self)
222          self.SetClassification(None)          self.SetClassification(None)
223            self.store = self.shapetree = None
224            self.table = self.shapefile = self.shapetable = None
225    
226      def BoundingBox(self):      def BoundingBox(self):
227          """Return the layer's bounding box in the intrinsic coordinate system.          """Return the layer's bounding box in the intrinsic coordinate system.
# Line 349  class Layer(BaseLayer): Line 360  class Layer(BaseLayer):
360      def TreeInfo(self):      def TreeInfo(self):
361          items = []          items = []
362    
363            if hasattr(self, 'filename'):
364                items.append(_("Filename: %s") % self.filename)
365    
366          if self.Visible():          if self.Visible():
367              items.append(_("Shown"))              items.append(_("Shown"))
368          else:          else:
# Line 384  class RasterLayer(BaseLayer): Line 398  class RasterLayer(BaseLayer):
398                        the source image is in.                        the source image is in.
399    
400          visible -- True is the layer should initially be visible.          visible -- True is the layer should initially be visible.
401    
402            Throws IOError if the filename is invalid or points to a file that
403            is not in a format GDAL can use.
404          """          """
405    
406          BaseLayer.__init__(self, title, visible = visible)          BaseLayer.__init__(self, title, visible = visible)
# Line 393  class RasterLayer(BaseLayer): Line 410  class RasterLayer(BaseLayer):
410    
411          self.bbox = -1          self.bbox = -1
412    
413          self.UnsetModified()          #
414            # temporarily open the file so that GDAL can test if it's valid.
415            #
416            dataset = gdal.Open(self.filename, GA_ReadOnly)
417    
418            if dataset is None:
419                raise IOError()
420    
421            self.UnsetModified()
422    
423      def BoundingBox(self):      def BoundingBox(self):
424          """Return the layer's bounding box in the intrinsic coordinate system.          """Return the layer's bounding box in the intrinsic coordinate system.
# Line 406  class RasterLayer(BaseLayer): Line 430  class RasterLayer(BaseLayer):
430              if dataset is None:              if dataset is None:
431                  self.bbox = None                  self.bbox = None
432              else:              else:
433                  left, bottom = self.__CalcCorner(dataset,                  geotransform = dataset.GetGeoTransform()
434                                                   0, dataset.RasterYSize)                  if geotransform is None:
435                  right, top   = self.__CalcCorner(dataset,                      return None
436                                                   dataset.RasterXSize, 0)  
437                    x = 0
438                    y = dataset.RasterYSize
439                    left = geotransform[0] +        \
440                           geotransform[1] * x +    \
441                           geotransform[2] * y
442    
443                    bottom = geotransform[3] +      \
444                             geotransform[4] * x +  \
445                             geotransform[5] * y
446    
447                    x = dataset.RasterXSize
448                    y = 0
449                    right = geotransform[0] +       \
450                            geotransform[1] * x +   \
451                            geotransform[2] * y
452    
453                    top = geotransform[3] +         \
454                          geotransform[4] * x +     \
455                          geotransform[5] * y
456    
457                  self.bbox = (left, bottom, right, top)                  self.bbox = (left, bottom, right, top)
458    
459          return self.bbox          return self.bbox
460    
     def __CalcCorner(self, dataset, x, y):  
         geotransform = dataset.GetGeoTransform()  
         return geotransform[0] + geotransform[1] * x + geotransform[2] * y, \  
                geotransform[3] + geotransform[4] * x + geotransform[5] * y  
   
461      def LatLongBoundingBox(self):      def LatLongBoundingBox(self):
462          bbox = self.BoundingBox()          bbox = self.BoundingBox()
463          if bbox is not None:          if bbox is None:
             llx, lly, urx, ury = bbox  
             if self.projection is not None:  
                 llx, lly = self.projection.Inverse(llx, lly)  
                 urx, ury = self.projection.Inverse(urx, ury)  
             return llx, lly, urx, ury  
         else:  
464              return None              return None
465    
466            llx, lly, urx, ury = bbox
467            if self.projection is not None:
468                llx, lly = self.projection.Inverse(llx, lly)
469                urx, ury = self.projection.Inverse(urx, ury)
470    
471            return llx, lly, urx, ury
472    
473      def GetImageFilename(self):      def GetImageFilename(self):
474          return self.filename          return self.filename
475    

Legend:
Removed from v.929  
changed lines
  Added in v.1117

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26