/[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 1088 by bh, Wed May 28 12:42:23 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 349  class Layer(BaseLayer): Line 358  class Layer(BaseLayer):
358      def TreeInfo(self):      def TreeInfo(self):
359          items = []          items = []
360    
361            if hasattr(self, 'filename'):
362                items.append(_("Filename: %s") % self.filename)
363    
364          if self.Visible():          if self.Visible():
365              items.append(_("Shown"))              items.append(_("Shown"))
366          else:          else:
# Line 384  class RasterLayer(BaseLayer): Line 396  class RasterLayer(BaseLayer):
396                        the source image is in.                        the source image is in.
397    
398          visible -- True is the layer should initially be visible.          visible -- True is the layer should initially be visible.
399    
400            Throws IOError if the filename is invalid or points to a file that
401            is not in a format GDAL can use.
402          """          """
403    
404          BaseLayer.__init__(self, title, visible = visible)          BaseLayer.__init__(self, title, visible = visible)
# Line 393  class RasterLayer(BaseLayer): Line 408  class RasterLayer(BaseLayer):
408    
409          self.bbox = -1          self.bbox = -1
410    
411          self.UnsetModified()          #
412            # temporarily open the file so that GDAL can test if it's valid.
413            #
414            dataset = gdal.Open(self.filename, GA_ReadOnly)
415    
416            if dataset is None:
417                raise IOError()
418    
419            self.UnsetModified()
420    
421      def BoundingBox(self):      def BoundingBox(self):
422          """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 428  class RasterLayer(BaseLayer):
428              if dataset is None:              if dataset is None:
429                  self.bbox = None                  self.bbox = None
430              else:              else:
431                  left, bottom = self.__CalcCorner(dataset,                  geotransform = dataset.GetGeoTransform()
432                                                   0, dataset.RasterYSize)                  if geotransform is None:
433                  right, top   = self.__CalcCorner(dataset,                      return None
434                                                   dataset.RasterXSize, 0)  
435                    x = 0
436                    y = dataset.RasterYSize
437                    left = geotransform[0] +        \
438                           geotransform[1] * x +    \
439                           geotransform[2] * y
440    
441                    bottom = geotransform[3] +      \
442                             geotransform[4] * x +  \
443                             geotransform[5] * y
444    
445                    x = dataset.RasterXSize
446                    y = 0
447                    right = geotransform[0] +       \
448                            geotransform[1] * x +   \
449                            geotransform[2] * y
450    
451                    top = geotransform[3] +         \
452                          geotransform[4] * x +     \
453                          geotransform[5] * y
454    
455                  self.bbox = (left, bottom, right, top)                  self.bbox = (left, bottom, right, top)
456    
457          return self.bbox          return self.bbox
458    
     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  
   
459      def LatLongBoundingBox(self):      def LatLongBoundingBox(self):
460          bbox = self.BoundingBox()          bbox = self.BoundingBox()
461          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:  
462              return None              return None
463    
464            llx, lly, urx, ury = bbox
465            if self.projection is not None:
466                llx, lly = self.projection.Inverse(llx, lly)
467                urx, ury = self.projection.Inverse(urx, ury)
468    
469            return llx, lly, urx, ury
470    
471      def GetImageFilename(self):      def GetImageFilename(self):
472          return self.filename          return self.filename
473    

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26