2013-02-18 18 views
10

Python 3 kullanıyorum ve postGIS uzantıları ile postGre'ye bağlanmam gerekiyor. Bir psycopg2 sürücüsü kullanmak niyetindeyim.
Bu PPyGIS bulduğum tek eklentidir, ancak python 2.7 değil 3.3.0 üzerinde çalışır.
Herhangi biri 3.3.0 üzerinde çalışan bir çözümü biliyor?Python 3 Üzerinde PostGIS Kullanımı

cevap

6

istemci tarafında (Python) üzerinde geometri nesnelerle süslü bir şey yapıyor değilseniz, psycopg2 diğer CBS GeoJSON gibi output formatsgeometry accessors ile yerel veri türlerini kullanarak en temel bilgi almak, ya da. Sunucu (PostgreSQL/PostGIS) zor işi yapsın. Aslında Shapely veya GDAL/OGR, ancak her iki kütüphaneler bağımlılıkları uzun bir liste var kullanabilir

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) 
+0

aşağıdaki örnekte olduğu gibi süper kaygan pygeoif kütüphaneye dayalı küçük protokolü kendiniz uygulamak olabilir Olacak temel bir üzerindeki noktalar oluşan bir tabakaya sahiptir harita. Bir seçenek olarak iki nokta arasındaki mesafeyi ölçün. –

+1

@MilleBii Eğer ihtiyacınız olan tek şey mesafe ise, psycopg2 ihtiyacınız olan her şeydir. PPyGIS, sadece PostgreSQL/PostGIS ile sunucu tarafında değil, Python ile istemci tarafında gerçek geometri/coğrafyada bazı özel şeyler yapmanız gerektiğinde kullanışlıdır. –

+0

Ayrıca, coğrafi sorguları _psycopg2_ biçiminde biçimlendirmek için belirli bağdaştırıcıları tanımlayabilirsiniz. Örneğin geometriyi * pygeoif *: def uyarlama noktası (pt): geri dön AsIs ("ST_SetSRID (ST_MakePoint ({}, {}), 4326)". Biçim (adapte (pt.x), adapte (pt. y))); register_adapter (Puan, adapt_point) – Rmatt

1

: Burada

ilgi noktasının 1 km mesafededir şekillere GeoJSON'a dönmek için rastgele bir örnektir .

sadece çok az usecases varsa, ayrıca

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)