2009-07-09 25 views
7

Tengo 8 valores reales en una tabla que me gustaría combinar en un polígono. Sin embargo, no he podido averiguar cómo crear un polígono usando estos valores. Sigo tratando variaciones de¿Cómo puedo crear un polígono usando campos en PostgreSQL?

SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table; 

pero obtengo errores acerca de la función polígono no existente o una sintaxis de entrada no válido para el tipo de polígono. ¿Alguien ha hecho esto antes?

Respuesta

12

La sintaxis de una postgres polígono regular es más como:

insert into geo_table values (1, '((2,2),(3,4),(3,6),(1,1))');

Donde 1 es un documento de identidad y la entrada es citado polígono. Esperaría que la consulta sea similar, probablemente necesites paréntesis, etc. para las coordenadas. Por lo general, para los datos geoespaciales que desea (Lon Lat) coordenadas. Postgis también toma WKT declaraciones como:

GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')

+0

Esa declaración WKT parece lo que quiero, pero la base de datos fue creada por Drupal (un CMS) por lo que la plantilla PostGIS no se utilizó al crearla. ¿Puedo convertir texto al polígono de otra manera? –

+0

Encontré las instrucciones para agregar PostGIS a una base de datos y lo hice funcionar. –

1

Según lo mencionado por bvmou - GeomFromText no tendrán ningún problema. voy a añadir una pequeña actualización de sintaxis:

GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))') 
+0

+1 ¡Siempre arruine los parens! – unmounted

0

En este ejemplo se toma longitud y latitud coordenadas de una tabla y las convierte en una geometría. Las dimensiones de cada cuadro se dan long_high, long_low, lat_high y lat_low. Aquí, una caja de aproximadamente 500 m por 500 m.

  1. Agregar una nueva columna de geometría 'caja' a la mesa

    SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
  2. actualización del nuevo campo con esos valores.

     
    UPDATE predpol_raw 
    SET box = 
         ST_Transform(
          ST_GeomFromText(
           format('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))', 
            long_high,lat_high, long_low,lat_high, 
            long_low,lat_low, long_high,lat_low, 
            long_high,lat_high 
           ), 
           4326 
          ), 
          2240 
         ); 
    

nota la transformación a una referencia espacial diferente. La palabra clave POLYGON requiere dobles paréntesis '(())'.

Cuestiones relacionadas