180 |
"""Return the name of the table in the database""" |
"""Return the name of the table in the database""" |
181 |
return self.tablename |
return self.tablename |
182 |
|
|
183 |
|
def Title(self): |
184 |
|
"""Return the title of the table. |
185 |
|
|
186 |
|
The title is currently fixed and equal to the tablename |
187 |
|
""" |
188 |
|
return self.tablename |
189 |
|
|
190 |
def Dependencies(self): |
def Dependencies(self): |
191 |
"""Return an empty tuple because a PostGISTable depends on nothing else |
"""Return an empty tuple because a PostGISTable depends on nothing else |
192 |
""" |
""" |
340 |
y=[] |
y=[] |
341 |
cursor = self.db.cursor() |
cursor = self.db.cursor() |
342 |
try: |
try: |
343 |
stmt = ("SELECT AsText(Envelope(%s)) FROM %s;" |
# Using the extent function is postgis specific. An OGC |
344 |
% (self.geometry_column, self.tablename)) |
# Simple Features compliant solution would be to use a query |
345 |
cursor.execute(stmt) |
# like "SELECT AsText(Envelope(the_geom)) FROM mytable;" and |
346 |
|
# calculate the bounding box by hand from that |
347 |
|
cursor.execute("SELECT extent(%s) FROM %s;" |
348 |
|
% (self.geometry_column, self.tablename)) |
349 |
result = cursor.fetchone() |
result = cursor.fetchone() |
350 |
while result: |
if result: |
351 |
result = result[0] |
(minx, miny), (maxx, maxy) \ |
352 |
# Here we must do some parsing through the result string |
= wellknowntext.parse_wkt_thuban(result[0])[0] |
353 |
# 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() |
|
354 |
finally: |
finally: |
355 |
cursor.close() |
cursor.close() |
|
if not x: |
|
|
# Empty table |
|
|
return None |
|
|
return (min(x), min(y), max(x), max(y)) |
|
356 |
|
|
357 |
def Shape(self, shapeid): |
def Shape(self, shapeid): |
358 |
cursor = self.db.cursor() |
cursor = self.db.cursor() |
362 |
cursor.close() |
cursor.close() |
363 |
return PostGISShape(shapeid, wkt) |
return PostGISShape(shapeid, wkt) |
364 |
|
|
365 |
|
def AllShapes(self): |
366 |
|
cursor = self.db.cursor() |
367 |
|
cursor.execute("SELECT gid, AsText(%s) FROM %s ORDER BY gid" |
368 |
|
% (self.geometry_column, self.tablename)) |
369 |
|
while 1: |
370 |
|
result = cursor.fetchone() |
371 |
|
if result is None: |
372 |
|
return |
373 |
|
yield PostGISShape(result[0], result[1]) |
374 |
|
|
375 |
|
|
376 |
def ShapesInRegion(self, bbox): |
def ShapesInRegion(self, bbox): |
377 |
"""Generate all shapes overlapping the region given by bbox.""" |
"""Generate all shapes overlapping the region given by bbox.""" |
378 |
# IMPORTANT:This will work for PostGIS < 0.8 |
# IMPORTANT:This will work for PostGIS < 0.8 |
388 |
while 1: |
while 1: |
389 |
result = cursor.fetchone() |
result = cursor.fetchone() |
390 |
if result is None: |
if result is None: |
391 |
raise StopIteration |
return |
392 |
yield PostGISShape(result[0], result[1]) |
yield PostGISShape(result[0], result[1]) |