4 votos

Generar geometría espacial a partir de puntos de latitud y longitud para un mapa en PostGIS

Estoy interesado en una implementación de PostGIS de la solución basada en R de una pregunta anterior, ¿Cómo puedo convertir datos en forma de lat, lon, valor en un archivo de ráster usando R?

Actualmente, espero generar tiles para un mapa en CartoDB a partir de una tabla con columnas "lat, lon, valor".

He encontrado algunas pistas en el grupo de Google de CartoDB, que se reducen a "insertar rásteres/valores poligonizados en una tabla de polígonos vacía válida en CartoDB"

Pero los ejemplos incluyen una función obsoleta (ST_MapAlgebraExpr) y una serie de funciones anidadas ST_*, incluyendo st_transform(st_setsrid(st_multi(st_makevalid((.... Siendo nuevo en PostGIS, esto resulta bastante difícil de entender y aplicar, y la ayuda de las funciones individuales requiere cierto entendimiento básico.

Soy nuevo en PostGIS, así que por favor disculpen que no haya avanzado mucho, y el alcance de los nuevos tipos de datos y transformaciones resultan intimidantes. Si puedo aventurarme aquí, prometo mostrar mejoras antes de mi próximopost :)

6voto

Anthony Cramp Puntos 126

Estoy asumiendo que tus coordenadas de entrada lat-long están basadas en el datum WGS84. Hacer una geometría de punto bajo esta suposición es tan fácil como usar la función ST_MakePoint():

El problema con ST_MakePoint() es que la geometría que se crea no tiene una referencia espacial. Podemos establecer la referencia espacial usando la función ST_SetSRID().

Entonces, la forma más simple de hacer una geometría de punto en la referencia espacial correcta es encadenar ambas llamadas de función de esta manera:

--Devolver punto marcado como longitud latitud WGS 84
SELECT ST_SetSRID(ST_MakePoint(-71.1043443253471, 42.3150676015829),4326);

Acabo de notar que tienes una tabla con las columnas "lat, lon, value". En ese caso, puedes usar la siguiente consulta para obtener un punto y un valor

SELECT ST_SetSRID(ST_MakePoint(lon, lat),4326) as the_geom, value from mytable;

5voto

Ricardo Reyes Puntos 3428

Creo que lo que estás buscando es la interpolación, ¿verdad?

Si tienes un conjunto de observaciones de latitud, longitud y quieres convertirlas en un raster, este post sugiere que deberías hacer la interpolación fuera de postgis: http://postgis.17.x6.nabble.com/PostGIS-Raster-and-IDW-td4662998.html

Esto está de acuerdo: Opciones de interpolación/triangulación en PostGIS

Entonces, lo que haría es cargar los puntos en PostGIS (ver el post de @Devdatta arriba), abrir la capa en QGIS y luego utilizar el plugin de interpolación. Si solo quieres convertir el vector en raster, utiliza la función rasterize vector en QGIS.

1voto

naknode Puntos 143

Para una versión de PostGIS de R, mi suposición es que deberías usar ST_AsRaster para generar un raster a partir de datos vectoriales, en mosaico o sin mosaico. El caso a continuación genera una serie de rasters cuadrados. Para rasters en mosaico, los valores de la esquina superior izquierda también deben ser proporcionados. Luego podrías fusionar todos esos rasters en una sola composición.

SELECT 
  ST_AsRaster(
    st_setSRID( st_makePoint( t.long, t.lat), 4326 )
  , 256
  , 256
  , '8BUI'
  , t.value /* asume que la columna de valores es numérica */
  , 0 /* valor para lugares donde no hay coincidencia */
  --, double precision upperleftx=NULL
  --, double precision upperlefty=NULL
  --, double precision skewx=0, double precision skewy=0
  --, boolean touched=false
  )
FROM "table" AS t;

Para hacer la operación inversa, generar geometría a partir de datos raster para cada punto raster podrías hacer algo así fácilmente:

SELECT st_astext( geom ), val FROM st_pixelAsPolygons( /* tu raster */ )

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