Utilizzo Python 3 e devo connettermi a postGre con le estensioni postGIS. Ho intenzione di utilizzare un driver psycopg2.
Questo PPyGIS è l'unica estensione che ho trovato, ma funziona su Python 2.7 non 3.3.0.
Qualcuno conosce una soluzione che funziona su 3.3.0?Utilizzo di PostGIS su Python 3
10
A
risposta
6
Se non si sta facendo nulla di fantasia con gli oggetti della geometria sul lato client (Python), psycopg2 può ottenere più informazioni di base utilizzando i tipi di dati nativi con geometry accessors, o altro GIS output formats come GeoJSON. Lascia che il server (PostgreSQL/PostGIS) faccia il duro lavoro.
Ecco un esempio a caso per restituire la GeoJSON a forme che si trovano entro 1 km di un punto di interesse:
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)
1
Si può effettivamente utilizzare Shapely o GDAL/OGR, ma entrambe le librerie hanno una lunga lista di dipendenze .
Se avete solo pochissimi casi d'uso, si potrebbe anche implementare un piccolo protocollo te stesso, sulla base del super-chiazza di petrolio pygeoif biblioteca, come nell'esempio qui sotto
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)
Problemi correlati
- 1. Utilizzo di Python 3 super()
- 2. python 3 setuptools su mac
- 3. Calcolo distanza PostGis
- 4. Utilizzo di decoratori su lambda in Python?
- 5. Utilizzo di python e matplotlib su Android
- 6. Python - Virtualenv, python 3?
- 7. Problemi di installazione di PostGIS
- 8. installazione pyaudio su Mac (Python 3)
- 9. Installare Gtk 3 per Python su Mac
- 10. Come si disinstalla Postgis?
- 11. Abilitazione del supporto di Ruby PostGIS su Heroku
- 12. Python: Utilizzo di PyEval_EvalCode
- 13. Rails Postgis Upgrade Issues
- 14. Utilizzo della memoria String Python su FreeBSD
- 15. dizionario di ordinamento python 3
- 16. Utilizzo di Rails 3 e Haml 3, come configurare Haml?
- 17. Errore di sintassi su stampa con Python 3
- 18. Intersezione ricorsiva PostGIS tra poligoni
- 19. bisogno di prestazioni in PostGIS con GeoDjango
- 20. PostGis vicini più vicini query
- 21. virtualenvwrapper e Python 3
- 22. Rails + Errori PostGIS migrazione database
- 23. Utilizzo di Microsoft.VisualBasic.Logging.FileLogTraceListener con ASP.NET MVC 3
- 24. Utilizzo di `firstOption` con slick 3
- 25. Python 3 hosting
- 26. coda ImportError in python 3
- 27. Utilizzo di python shelve multipiattaforma
- 28. Python: utilizzo di xpath localmente/su un elemento specifico
- 29. Utilizzo di GUI in Python su un IDE online?
- 30. Installazione di OpenCV 3 per Python 3 su un Mac utilizzando Homebrew e pyenv
Sarà fondamentale, avendo uno strato di punti su una carta geografica. Come opzione misurare la distanza tra due punti. –
@MilleBii se tutto ciò di cui hai bisogno è la distanza, allora psycopg2 è tutto ciò di cui hai bisogno. PPyGIS è utile solo se hai bisogno di fare alcune cose personalizzate sulla geometria/geografia reale sul lato client con Python, piuttosto che sul lato server con PostgreSQL/PostGIS. –
È anche possibile definire adattatori specifici per consentire a _psycopg2_ di formattare le geoquery. Usando per esempio le geometrie di * pygeoif *: def adapt_point (pt): return AsIs ("ST_SetSRID (ST_MakePoint ({}, {}), 4326)." Format (adatta (pt.x), adatta (pt. y))); register_adapter (Point, adapt_point) – Rmatt