1 votos

Transferencia entre tipos PostGIS en GeoAlchemy

Estoy trabajando con datos de OpenStreetMap, y cargándolos en una base de datos PostGIS usando osm2pgsql.

El problema que estoy tratando es que osm2pgsql almacena la forma como un tipo de geometría.

Estoy usando GeoAlchemy2 para consultar la base de datos Postgres, pero estoy teniendo problemas con la siguiente consulta.

query = session.query(Route).filter(func.ST_Distance(Route.way,'SRID=4326;POINT(10.71223 47.69716)') < distance )

Debido a que osm2pgsql almacena los datos como un tipo de Geometría, no interpreta mis puntos como un tipo de geografía, y por lo tanto no filtra en base a la distancia en metros, sino en grados.

¿Habría una manera de convertir los objetos de tipo Geometría (Route.way y la representación de cadena del punto) en una forma de Geografía?

2voto

email missing Puntos 21

Me di cuenta de que es posible hacer un casting del objeto Geometría al objeto Geografía usando la función SQLAlchemy, a pesar de que los dos no son objetos nativos de SQLAlchemy.

query = session.query(Route).filter(func.ST_Distance(cast(Route.way,Geography),'SRID=4326;POINT(10.71223 47.69716)') < distance )

0voto

Chris Puntos 128

Si su route.way ya está en WGS84, EPSG:4326, entonces el reparto debería ser posible.

No he utilizado GeoAlchemy2 pero basándome en tu sintaxis debería ser así:

query = session.query(Route).filter(func.ST_Distance(Route.way::geography,ST_GeomFromText('POINT(10.71223 47.69716)',4326)::geography) < distance

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X