Comment puis-je créer un polygone utilisant des champs dans PostgreSQL?
-
12-09-2019 - |
Question
Je 8 valeurs réelles dans un tableau que je voudrais combiner en un polygone. Je n'ai pas été en mesure de comprendre comment créer un polygone en utilisant ces valeurs bien. Je continue d'essayer des variations de
SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table;
mais continuer à obtenir des erreurs sur la fonction polygone non existant ou une syntaxe d'entrée non valide pour un polygone de type. Quelqu'un at-il fait cela avant?
La solution
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 pense que la requête soit similaire, vous avez probablement besoin entre parenthèses etc pour les coordonnées. En règle générale pour les données que vous voulez géospatiale (Lon Lat) coordonne. PostGIS prend également WKT déclarations comme:
GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
Autres conseils
Comme mentionné par bvmou - GeomFromText
fonctionnera très bien.
Je vais juste ajouter une petite mise à jour de la syntaxe:
GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
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és à titre long_high, long_low, lat_high et lat_low. Ici, une boîte d'environ 500m par 500m.
-
Ajouter une nouvelle colonne de géométrie 'boîte' à la table
SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
-
Mettre à jour le 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 );
Notez la transformation d'une référence spatiale différente. Le mot-clé POLYGONE nécessite entre parenthèses double '(()).