2009-07-09 16 views
7

J'ai 8 valeurs réelles dans une table que je voudrais combiner dans un polygone. Cependant, je n'ai pas été capable de comprendre comment créer un polygone en utilisant ces valeurs. Je continue à essayer de variationsComment créer un polygone en utilisant des champs dans PostgreSQL?

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

mais continue à obtenir des erreurs sur la fonction polygone non existant ou une syntaxe d'entrée non valide pour un polygone de type. Est-ce que quelqu'un a déjà fait ça?

Répondre

12

La syntaxe pour un polygone régulier postgres est plus comme:

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

Où 1 est une pièce d'identité et l'entrée cité est le polygone. Je m'attendrais à ce que la requête soit similaire, vous avez probablement besoin de parenthèses etc pour les coordonnées. Typiquement pour les données géospatiales vous voulez (Lon Lat) les coordonnées. PostGIS prend également WKT des déclarations comme:

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

+0

Cette instruction WKT ressemble à ce que je veux, mais la base de données a été créée par Drupal (un CMS), donc le modèle PostGIS n'a pas été utilisé lors de sa création. Puis-je convertir le texte en polygone d'une autre manière? –

+0

J'ai trouvé les instructions pour ajouter PostGIS à une base de données et j'ai commencé à travailler. –

1

Comme mentionné par bvmou - GeomFromText fonctionnera bien. Je vais juste ajouter une petite mise à jour de la syntaxe:

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

+1 Toujours bousiller les parens! – unmounted

0

Cet exemple prend les coordonnées longitude et la latitude d'une table et les convertit en une géométrie. Les dimensions de chaque boîte sont données comme long_high, long_low, lat_high et lat_low. Ici, une boîte d'environ 500m par 500m.

  1. Ajouter une nouvelle colonne 'boîte' à la table

    SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
  2. géométrie mise à jour du nouveau champ avec ces valeurs.

     
    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 
         ); 
    

note la transformation à une référence spatiale différente. Le mot-clé POLYGON requiert des parenthèses doubles (()) '.