Suite

Comment remplir une table avec la ligne geom ?

Comment remplir une table avec la ligne geom ?


J'ai les coordonnées de beaucoup de points dans un tableau. Dans pgadmin je veux faire une ligne qui passe sur ces points. J'ai déjà mon point de coordonnées dans ma table. Je veux faire la ligne avec ces points cooirdinate qui ont déjà dans ma table. Dans le même tableau, je veux INSÉRER la ligne geom dans la colonne de géométrie geom

Description de la table : ID,X,Y, colonne description, longueur, colonne description. Je veux faire la ligne qui passe sur ce point.

J'ai fait cette requête :

SELECT AddGeometryColumn('MyTable', 'geom', 32634, 'LINESTRING', 2); MISE À JOUR "MyTable" SET geom = ST_SetSRID(ST_MakeLINE((ST_MakePOINT1("X", "Y"), ST_MakePOINT2("X", "Y")), 32634));

mais ça ne marche pas. Quelqu'un peut-il m'aider s'il-vous-plaît?


Pour autant que je sache, une table ne peut pas avoir deux types de géométrie (à moins que le type ne soit une collection). Au lieu de modifier votre table existante, essayez d'en créer une nouvelle :

La colonne de géométrie est comme n'importe quelle autre colonne, elle a une valeur pour chaque ligne du tableau. Vous essayez de créer une géométrie à partir de plusieurs géométries, donc ce que vous voulez n'est pas de mettre à jour la géométrie de vos lignes actuelles, mais de créer une nouvelle ligne avec une nouvelle géométrie. Pour cela, vous devrez créer une nouvelle table, qui n'aura qu'une seule ligne, avec toute la géométrie de la ligne :

créer la table "MyLineTable" ( geom geometry(LINESTRING,32634) );

Pour créer la géométrie, vous pouvez soit utiliser ST_MakeLine avec un tableau de géométries de points, soit utiliser la colonne de géométrie d'une table de points. Étant donné que vos coordonnées sont dans des colonnes non géométriques, vous pouvez soit les transmettre à un tableau :

avec des points en tant que ( sélectionnez array_agg(st_makepoint("X","Y")) en tant que points de "MyPointsTable" ) sélectionnez st_setsrid(st_makeline(pts),32634) des points ;

Ou transmettez-les à la colonne geom de votre table de points et utilisez-la pour alimenter ST_MakeLine :

mettre à jour "MyPointsTable" set geom = st_setsrid(st_makepoint("X","Y"),32634) ; insérer dans "MyLineTable" (geom) sélectionner st_makeline(pts.geom) de "MyPointsTable" en tant que pts ;

Il est un peu difficile de déterminer exactement ce que vous essayez d'atteindre.

J'ai fourni un exemple de la façon de gérer les deux scénarios que je pense que vous essayez probablement de réaliser. J'ai essayé de garder l'exemple court et simple, donc je n'ai inclus aucun élément SRID et j'ai juste utilisé des INT pour les coordonnées.

Le scénario 1 consiste à ajouter une ligne pour chacune des lignes de votre tableau.

Le scénario 2 crée une ligne qui relie les points de toutes les lignes. Notez que cela ne doit pas être ajouté en tant que colonne dans votre tableau. Vous aurez également besoin d'un moyen de séquencer les points.

-- Setup Test CREATE TABLE myTest ( X1 INT, Y1 INT, X2 INT, Y2 INT, SEQ INT ); INSÉRER DANS LES VALEURS myTest (0, 0, 10, 0, 1), (10, 0, 10, 10, 2), (10, 10, 0, 10, 3), (0, 10, 0, 0, 4 ); -- Scénario 1. UNE LINESTRING pour chaque ligne ALTER TABLE myTest ADD myLine Geometry(LINESTRING); MISE À JOUR myTest SET myLine = ST_MakeLine(ST_MakePoint(x1,y1), ST_MakePoint(x2,y2)); SELECT ST_AsText(myLine),* FROM myTest; -- Scénario 2. Un seul LINESTRING pour toutes les lignes CREATE TABLE myTestLine ( myLine Geometry(LINESTRING) ); INSÉRER DANS myTestLine (myLine) SELECT ST_MakeLine(ST_MakePoint(X1,Y1)ORDER BY SEQ) FROM myTest; SELECT ST_AsText(myLine) FROM myTestLine; -- Nettoyer DROP TABLE myTest; SUPPRIMER LA TABLE maLigneTest;