Insérer un point dans PostGIS?

49

J'ai créé une table dans mon écrou PostGIS que je ne peux pas insérer de point.

Quel est le problème avec ma requête?

CREATE TABLE app ( 
  p_id INTEGER PRIMARY KEY

);

SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);

INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));

Après la dernière requête, il affiche une erreur.

ERROR:  column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
                                                             ^
HINT:  You will need to rewrite or cast the expression.


********** Error **********

ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53

Je vérifie déjà ma version de PostGIS.

SELECT PostGIS_full_version();

J'ai la sortie suivante ..

"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"
Shahjalal
la source

Réponses:

84

Vous confondez SQL et WKT ( texte connu ). WKT est un peu comme un langage géométrique pour décrire des formes, mais ce n'est pas SQL, qui est un langage pour interroger et manipuler des bases de données. Lorsque vous utilisez WKT dans une requête SQL, il doit s'agir d'un texte et non d'un mélange avec le SQL.

Votre requête fonctionne si vous formatez correctement le fichier WKT (supprimez le ",") et définissez un SRID. Pour cette méthode, ST_GeomFromText(wkt, srid)fonctionne bien:

INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));

Si vous avez des colonnes avec une longitude / latitude numérique, vous pouvez créer directement une géométrie POINT:

ST_SetSRID(ST_MakePoint(long, lat), 4326);

Découvrez les autres constructeurs de géométrie du manuel .


Pour la demande de @ vik86, the_geompeut être mis à jour dans la table à apppartir de colonnes numériques longet en latutilisant:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);
Mike T
la source
Pourriez-vous préciser en utilisant cette fonctionnalité, "Si vous avez des colonnes avec latitude numérique longitude, vous pouvez directement créer une géométrie POINT: ST_SetSRID (ST_MakePoint (long, lat), 4326);" À l'heure actuelle, j'ai une table avec lat et long, pour utiliser les api PostGIS, j'en ai besoin au format point. Je voulais donc savoir comment mettre à jour la colonne de points en utilisant cette fonctionnalité. Merci Vikram
Vik86
@ Vik86 voir réponse mise à jour
Mike T
1

Si vous travaillez avec un client Java, mon conseil est d'utiliser les types binaires pour transférer les données. De mémoire, j’ai enregistré une amélioration des performances de 10% en effectuant ce changement sur la méthode ST_AsEWKT.

Sarge
la source