Einfügen von Punkten in PostGIS?


49

Ich habe eine Tabelle in meiner PostGIS-Mutter erstellt. Ich kann keinen Punkt einfügen.

Was stimmt nicht mit meiner Anfrage?

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

Nach der letzten Abfrage wird ein Fehler angezeigt.

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

Ich überprüfe bereits meine PostGIS-Version.

SELECT PostGIS_full_version();

Ich habe die folgende Ausgabe bekommen ..

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

Antworten:


84

Sie verwechseln SQL und WKT (bekannter Text ). WKT ist wie eine Geometriesprache zum Beschreiben von Formen, aber nicht SQL, eine Sprache zum Abfragen und Bearbeiten von Datenbanken. Bei der Arbeit mit WKT in einer SQL-Abfrage muss es sich um Text handeln und darf nicht mit SQL gemischt werden.

Ihre Abfrage funktioniert, wenn Sie die WKT ordnungsgemäß formatieren (entfernen Sie das ",") und eine SRID festlegen. Für diese Methode ST_GeomFromText(wkt, srid)funktioniert gut:

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

Wenn Sie Spalten mit numerischer Länge / Breite haben, können Sie direkt eine POINT-Geometrie erstellen:

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

Schauen Sie sich die anderen Geometriekonstruktoren im Handbuch an .


Kann für @ vik86s Anfrage the_geomin der Tabelle appaus numerischen Spalten aktualisiert werden longund latverwendet:

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

Könnten Sie die Verwendung dieser Funktion näher erläutern? "Wenn Sie Spalten mit numerischem Längengrad und Breitengrad haben, können Sie direkt eine POINT-Geometrie erstellen: ST_SetSRID (ST_MakePoint (long, lat), 4326);" Im Moment habe ich eine Tabelle mit lat und long, Um die PostGIS-APIs verwenden zu können, benötige ich sie im Punktformat. Daher wollte ich wissen, wie ich die Punktspalte mit dieser Funktion aktualisieren kann. Thanks Vikram
Vik86

@ Vik86 siehe aktualisierte Antwort
Mike T

1

Wenn Sie mit einem Java-Client arbeiten, empfehle ich, die Binärtypen zum Übertragen der Daten zu verwenden. Aus dem Speicher habe ich eine Leistungsverbesserung von 10% festgestellt, als ich diese Änderung gegenüber der ST_AsEWKT-Methode vorgenommen habe.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.