0

测试数据

目标三重:

  1. raster2pgsql使用QGIS将栅格加载到 PostGIS 中并在其中进行可视化
  2. 在我的 IPython Notebook 中连接到 PostGIS 并将栅格加载到 NumPy 数组中
  3. 在我的 IPyhton Notebook 中,使用 Pandas 加载一个像素的时间序列,其中存储在 PostGIS 中的不同时间步长

到目前为止,我已经设法使用raster2pgsql命令将一张光栅图像放入 PostGIS Raster 中,并使用 DB Manager 在 QGIS 中将其可视化:

raster2pgsql -s 4326 -d -I -C -M -R -l 4 D:\Downloads\raster//modis.tif -F -t 100x100 public.ndvi | psql -U postgres -d rastertest -h localhost -p 5432

但是如何从 IPython Notebook 中访问/查询这个栅格呢?

我找到了这个关于 SQLALchemy 和 GeoAlchemy2 的演示文稿。并且提到它也支持 PostGIS Raster。这似乎很有趣!但是使用文档我看不到如何将其应用于栅格数据

我想我可以使用以下代码 where 和 连接到我的postgres=userPostGISpassword=admin数据库database=rastertest

from sqlalchemy import create_engine
engine = create_engine('postgresql://postgres:admin@localhost/rastertest', echo=True)

但是然后..任何建议都非常感谢。

4

1 回答 1

2

您应该使用psycopg模块从 python 连接到 postgres 数据库。一些代码示例:

import psycopg2


def connect_db():

try:
    conn = psycopg2.connect("dbname='rastertest' user='admin' host='localhost' password='password'")
    conn.set_session(autocommit=True) #if you want your updates to take effect without being in a transaction and requiring a commit, for a beginner, I would set this to True
    return conn
except:
    print "I am unable to connect to the database"
    return None

def get_raster(raster_id,conn):

    query= "SELECT ST_AsText(geom) from raster_table where id={}".format(raster_id)
    conn.cursor().execute(query)
    res = cur.fetchall()

    return res[0][0]

也许光栅的文本表示是您可以使用的。或者,查看http://postgis.net/docs/RT_reference.html以查看是否有任何函数返回您想要的 numpy 数组并相应地替换 get_raster 中的查询。(可能是这个http://postgis.net/docs/RT_ST_DumpValues.html

于 2014-03-19T13:34:22.340 回答