/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/postgisdb.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/postgisdb.py

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

revision 1658 by bh, Tue Aug 26 10:34:48 2003 UTC revision 1662 by bh, Wed Aug 27 13:51:01 2003 UTC
# Line 209  class PostGISTable: Line 209  class PostGISTable:
209          cursor.execute("SELECT count(*) FROM %s" % self.tablename)          cursor.execute("SELECT count(*) FROM %s" % self.tablename)
210          return cursor.fetchone()[0]          return cursor.fetchone()[0]
211    
212      def ReadRowAsDict(self, row):      def RowIdToOrdinal(self, gid):
213            """Return the row ordinal given its id"""
214          cursor = self.db.cursor()          cursor = self.db.cursor()
215          cursor.execute(self.query_stmt + " LIMIT 1 OFFSET %d" % row)          cursor.execute("SELECT count(*) FROM %s WHERE gid < %d;"
216                           % (self.tablename, gid))
217            return cursor.fetchone()[0]
218    
219        def RowOrdinalToId(self, num):
220            """Return the rowid for given its ordinal"""
221            cursor = self.db.cursor()
222            cursor.execute("SELECT gid FROM %s LIMIT 1 OFFSET %d;"
223                           % (self.tablename, num))
224            return cursor.fetchone()[0]
225    
226        def ReadRowAsDict(self, row, row_is_ordinal = 0):
227            cursor = self.db.cursor()
228            if row_is_ordinal:
229                stmt = self.query_stmt + " LIMIT 1 OFFSET %d" % row
230            else:
231                stmt = self.query_stmt + " WHERE gid = %d" % row
232            cursor.execute(stmt)
233          result = {}          result = {}
234          for col, value in zip(self.columns, cursor.fetchone()):          for col, value in zip(self.columns, cursor.fetchone()):
235              result[col.name] = value              result[col.name] = value
236          return result          return result
237    
238      def ReadValue(self, row, col):      def ReadValue(self, row, col, row_is_ordinal = 0):
239          cursor = self.db.cursor()          cursor = self.db.cursor()
240          cursor.execute("SELECT %s FROM %s LIMIT 1 OFFSET %d" %          if row_is_ordinal:
241                         (self.column_map[col].name, self.tablename, row))              stmt = ("SELECT %s FROM %s LIMIT 1 OFFSET %d" %
242                        (self.column_map[col].name, self.tablename, row))
243            else:
244                stmt = ("SELECT %s FROM %s WHERE gid = %d" %
245                        (self.column_map[col].name, self.tablename, row))
246            cursor.execute(stmt)
247          return cursor.fetchone()[0]          return cursor.fetchone()[0]
248    
249      def ValueRange(self, col):      def ValueRange(self, col):
# Line 340  class PostGISShapeStore(PostGISTable): Line 363  class PostGISShapeStore(PostGISTable):
363          y=[]          y=[]
364          cursor = self.db.cursor()          cursor = self.db.cursor()
365          try:          try:
366              stmt = ("SELECT AsText(Envelope(%s)) FROM %s;"              # Using the extent function is postgis specific. An OGC
367                      % (self.geometry_column, self.tablename))              # Simple Features compliant solution would be to use a query
368              cursor.execute(stmt)              # like "SELECT AsText(Envelope(the_geom)) FROM mytable;" and
369                # calculate the bounding box by hand from that
370                cursor.execute("SELECT extent(%s) FROM %s;"
371                               % (self.geometry_column, self.tablename))
372              result = cursor.fetchone()              result = cursor.fetchone()
373              while result:              if result:
374                  result = result[0]                  (minx, miny), (maxx, maxy) \
375                  # Here we must do some parsing through the result string                        = wellknowntext.parse_wkt_thuban(result[0])[0]
376                  # to get the points out of the polygon which representes                  return (minx, miny, maxx, maxy)
                 # the bounding box The first and the last point of a  
                 # polygon are identical  
                 result = result.split("(")[2]  
                 result = result.split(")")[0]  
                 points = result.split(",")  
                 del points[4] # Remove the last point  
                 for point in points:  
                     px, py = point.split()  
                     x.append(float(px))  
                     y.append(float(py))  
                 result = cursor.fetchone()  
377          finally:          finally:
378              cursor.close()              cursor.close()
         if not x:  
             # Empty table  
             return None  
         return (min(x), min(y), max(x), max(y))  
379    
380      def Shape(self, shapeid):      def Shape(self, shapeid):
381          cursor = self.db.cursor()          cursor = self.db.cursor()

Legend:
Removed from v.1658  
changed lines
  Added in v.1662

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26