2009-11-21 49 views
1

我需要使用python从“postgis”数据库(postgresql)可视化空间数据(20多边形)。我知道如何连接postgresql数据库与Python,但我不知道如何可视化这些多边形。这是我的大学的项目。我们需要使用例如matplotlib并在python中创建应用程序,它将从postgresql数据库中可视化shapefile(.shp)。postgresql和python

我开始使用此代码,但我不知道如何继续:

import psycopg2 
conn = psycopg2.connect("dbname='***' user='***' host='***' password='***'") 
print 'Succesfully connected' 

cur = conn.cursor() 
cur.execute("""SELECT astext(the_geom) from buildings;""") 
listpoly = cur.fetchall() 
conn.close() 

回答

2

有许多绘图包的Python(当然他们支持绘制多边形,它是在这个空间最根本的特征之一;-),而我认为最受欢迎的是matplotlib

+0

你可以写更多关于matplot lib吗?是否足以在python中可视化多边形? – boofighter 2009-11-21 19:47:58

1

使用matplotlib,可以使用fill() command绘制多边形。例如,要创建一个顶点为(3,2),(4,2),(4,4),(3,4), 的多边形,可以定义x = [3,4,4,3 ],y = [2,2,4,4](相应的x和y坐标) 并使用fill(x,y)。例如,

import pylab 
z=[(3,2),(4,2),(4,4),(3,4)] 
x,y=zip(*z) 
pylab.fill(x,y, 'b', alpha=0.2, edgecolor='r') 
pylab.show() 

有关fill()命令和pylab API的更多信息,请参阅http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.fill

+0

谢谢,但我已经在postgis数据库中使用了shapefile格式(.shp)中的那些多边形。我只需要创建应用程序,它将从数据库中提取它们并可视化这些多边形。 – boofighter 2009-11-21 20:45:40

3

当我需要创建栅格(位图)图形时,我使用Python Imaging Library祝你好运。它有一个非常简单的界面,并且可以很容易地将图形叠加在另一个图像上。不幸的是,PIL不会经常更新。可能因为它正常工作。以下是如何做一个简单的多边形(从Nadia Alrami's excellent little intro to PIL解除):

im = Image.new('RGBA', (100, 100), (0, 0, 0, 0)) # Create a blank image 
draw = ImageDraw.Draw(im) 
lines = [(50, 0), (0, 40), (20, 100), (80, 100), (100, 40)] 
draw.polygon(lines, fill="black") 

对于更复杂的图像,我倾向于使用svgfig包蟒蛇,使它们在SVG。因为它是SVG,所以它们非常适合在Web浏览器上扩展和共享。不幸的是,我不相信svgfig有一个很好的多边形功能,所以你需要做这样的事情砍你自己:

def polygon(points): 
    for x in xrange(len(points)-1): 
     line(points[x][0], points[x][1], points[x+1][0], points[x+1][1]) 
    line(points[-1][0], points[-1][1], points[0][0], points[0][1]) 
+0

谢谢,但我已经在postgis数据库中使用了shapefile格式(.shp)中的那些多边形。我只需要创建应用程序,它将从数据库中提取它们并可视化这些多边形。 – boofighter 2009-11-21 20:46:32

0

什么是你正试图在这里达到目的?你只想看看.shp文件中的数据吗?有一个名为Quantum GIS的开源应用程序,允许您直接从PostGIS打开空间数据(并直接从shapefile中打开)。如果你只需要看多边形,这可能是最简单的方法。如果这不是你想要做的,也许你可以澄清你的问题。

+0

这是我的大学的项目。我无法使用任何类似量子gis的软件。我们只需要创建一个应用程序来在python中可视化这些shapefile文件。 – boofighter 2009-11-22 14:08:18

1

也许你可以试试patch_collection example。我有matplotlib.pyplot只有多边形部分它拷贝到这里:

import matplotlib 
import matplotlib.pyplot as plt 
from matplotlib.patches import Polygon 
from matplotlib.collections import PatchCollection 
import numpy as np 
fig = plt.figure() 
ax = fig.add_subplot(111) 
patches = [] 
for x in xrange(2): 
    polygon = Polygon(np.random.rand(3, 2), True) 
    patches.append(polygon) 
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4) 
colors = 100*np.random.rand(len(patches)) 
p.set_array(np.array(colors)) 
ax.add_collection(p) 
plt.colorbar(p) 

plt.show() 

输出PIC是herealt text http://i46.tinypic.com/v762a9.jpg
我觉得文档matplotlib.patches.Polygon值得一看了。希望这可以帮助。

+0

我明白了,谢谢。但我只知道如何连接到数据库,但我不知道如何从该postgresql数据库可视化多边形。我不知道将在我的数据库中应用该修补程序到.shp多边形的代码? – boofighter 2009-11-22 13:09:18

+0

oops,我只知道一点matplotlib,不知道'.shp'相关的东西,希望这里有人可以处理这个,尽管我认为解析'.sha'格式并不是Python特有的。 – sunqiang 2009-11-22 13:54:50