Я использую Python 3 и вам нужно подключиться к postGre с расширениями postGIS.
Я намерен использовать драйвер psycopg2.
Этот PPyGIS является единственным расширением, которое я нашел, но он работает на python 2.7, а не на 3.3.0.
Кто-нибудь знает решение, работающее над 3.3.0?
Использование PostGIS на Python 3
Ответ 1
Если вы ничего не делаете с объектами геометрии на стороне клиента (Python), psycopg2 может получить самую основную информацию, используя собственные типы данных с аксессуарами геометрии, или других GIS форматов вывода, например GeoJSON. Пусть сервер (PostgreSQL/PostGIS) выполняет тяжелую работу.
Вот случайный пример возврата GeoJSON к формам, находящимся в пределах 1 км от точки интереса:
import psycopg2
conn = psycopg2.connect(database='postgis', user='postgres')
curs = conn.cursor()
# Find the distance within 1 km of point-of-interest
poi = (-124.3, 53.2) # longitude, latitude
# Table 'my_points' has a geography column 'geog'
curs.execute("""\
SELECT gid, ST_AsGeoJSON(geog), ST_Distance(geog, poi)
FROM my_points, (SELECT ST_MakePoint(%s, %s)::geography AS poi) AS f
WHERE ST_DWithin(geog, poi, 1000);""", poi)
for row in curs.fetchall():
print(row)
Ответ 2
Фактически вы можете использовать Shapely или GDAL/OGR, но обе библиотеки имеют длинный список зависимостей.
Если у вас есть только очень мало случаев, вы можете также реализовать небольшой протокол самостоятельно, основываясь на супер-слайке pygeoif, как пример ниже
from psycopg2.extensions import register_adapter, AsIs, adapt
from pygeoif.geometry import Point
def adapt_point(pt):
return AsIs("ST_SetSRID(ST_MakePoint({}, {}), 4326)".format(adapt(pt.x), adapt(pt.y)))
register_adapter(Point, adapt_point)
Ответ 3
Поскольку этот вопрос был задан, добавлен пакет Geopandas
classmethod GeoDataFrame.from_postgis(sql, con, geom_col='geom',
crs=None, index_col=None, coerce_float=True, parse_dates=None, params=None)
который будет извлекать геоданные из таблицы SQL со столбцом геометрии
http://geopandas.org/reference.html#geopandas.GeoDataFrame.from_postgis