2 votos

¿Cómo crear una geometría a partir de un conjunto o matriz de lat/lon en una tabla utilizando PostGIS?

Mi pregunta es similar a ¿Crear una geometría a partir de una tabla de lat/lon utilizando PostGIS? Pero necesito convertir un conjunto o matriz de LON y LAT en PostgreSQL en un valor geométrico.

Por ejemplo, puedo convertir LON y LAT individuales en puntos geométricos utilizando el siguiente código (usando el comando PostgreSQL):

SET geometry = ST_GeomFromText('POINT(' || lon || ' ' || lat || ')',4326);

¿Qué pasa si tengo una matriz de LON y LAT como esta? lon1,lon2,lon3,lat1,lat2,lat3 y quiero combinar esas coordenadas con valores geométricos que produzcan una forma poligonal larga en lugar de una forma de un solo punto?

4voto

mathieu Puntos 53

Es un poco desagradable almacenar las coordenadas de esa manera...

Sin embargo, lo más importante es que la creación de Polígonos de los puntos requieren que se cumplan algunas condiciones previas:

  • los vértices (es decir, sus pares de coordenadas) tienen que estar en (cualquier) orden sinuoso (hay definiciones contrarias sobre la dirección que debe tomar ese orden entre los formatos; a PostGIS mismo no le importa)
  • el último vértice debe ser idéntico al primero; un simple Polígono suele definirse como un cerrado LineString

Suponiendo que sus matrices cumplan estas condiciones, la ejecución de

UPDATE  <table> AS a
    SET <geom> = (
        SELECT ST_SetSRID(ST_MakePolygon(ST_MakeLine(ST_MakePoint(dmp.x, dmp.y))), <SRID>)
        FROM   <table> AS b,
               LATERAL UNNEST(<array>[:ARRAY_LENGTH(<array>, 1)/2], <array>[ARRAY_LENGTH(<array>, 1)/2+1:]) AS dmp(x, y)
        WHERE  a.<id> = b.<id>
    )
;

creará Polígonos con un determinado <SRID> en la columna <geom> de su <array> columna. Si prefiere LineString s, quitar el envoltorio ST_MakePolygon() de la consulta.

Si sus matrices no cumplen estos requisitos, edite y actualice su pregunta con los detalles.

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