Inserimento di punti in PostGIS?


49

Ho creato una tabella nel mio dado PostGIS che non riesco a inserire punto.

Cosa c'è di sbagliato nella mia domanda?

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

Dopo l'ultima query mostra qualche errore.

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

Controllo già la mia versione PostGIS.

SELECT PostGIS_full_version();

Ho ottenuto il seguente output ..

"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"

Risposte:


84

Stai confondendo SQL e WKT ( testo ben noto ). WKT è un linguaggio simile alla geometria per descrivere le forme, ma non è SQL, che è un linguaggio per interrogare e manipolare i database. Quando si lavora con WKT in una query SQL, deve essere di testo e non miscelato con SQL.

La query funziona se si formatta correttamente il WKT (rimuovere ",") e si imposta un SRID. Per questo metodo, ST_GeomFromText(wkt, srid)funziona bene:

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

Se hai colonne con longitudine / latitudine numerica, puoi creare direttamente una geometria POINT:

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

Scopri gli altri costruttori di geometrie nel manuale .


Per la richiesta di @ vik86, the_geompuò essere aggiornato nella tabella appda colonne numeriche longe latusando:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

Potresti approfondire l'utilizzo di questa funzione, "Se hai colonne con latitudine numerica di longitudine, puoi creare direttamente una geometria POINT: ST_SetSRID (ST_MakePoint (long, lat), 4326);" In questo momento ho una tabella con lat e long, per usare le API di PostGIS ne ho bisogno nel formato punto. Quindi volevo sapere come faccio ad aggiornare la colonna dei punti usando questa funzione. Grazie Vikram
Vik86,

@ Vik86 vedi la risposta aggiornata
Mike T

1

Se si lavora con un client Java allora il mio consiglio è quello di utilizzare i tipi di binari per trasferire i dati. Dalla memoria, ho registrato un miglioramento delle prestazioni del 10% quando ho apportato questa modifica al metodo ST_AsEWKT.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.