Memasukkan poin ke PostGIS?

49

Saya telah membuat satu tabel di kacang PostGIS saya, saya tidak bisa memasukkan titik.

Apa yang salah dengan permintaan saya?

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

Setelah permintaan terakhir ini menunjukkan beberapa kesalahan ..

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

Saya sudah memeriksa versi PostGIS saya.

SELECT PostGIS_full_version();

Saya mendapat output berikut ..

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

Jawaban:

84

Anda membingungkan SQL dan WKT ( teks terkenal ). WKT adalah seperti bahasa geometri untuk mendeskripsikan bentuk, tetapi bukan SQL, yang merupakan bahasa untuk kueri dan memanipulasi basis data. Saat bekerja dengan WKT dalam kueri SQL, itu harus berupa teks , dan tidak tercampur dengan SQL.

Kueri Anda berfungsi jika Anda memformat WKT dengan benar (menghapus ",") dan mengatur SRID. Untuk metode ini, ST_GeomFromText(wkt, srid)berfungsi dengan baik:

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

Jika Anda memiliki kolom dengan bujur / lintang numerik, Anda dapat langsung membuat geometri TITIK:

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

Lihatlah konstruktor geometri lain dalam manual .


Untuk permintaan @ vik86, the_geomdapat diperbarui dalam tabel appdari kolom numerik longdan latmenggunakan:

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);
Mike T
sumber
Bisakah Anda menguraikan menggunakan fitur ini, "Jika Anda memiliki kolom dengan lintang bujur numerik, Anda dapat langsung membuat geometri TITIK: ST_SetSRID (ST_MakePoint (panjang, lat), 4326);" Saat ini saya memiliki tabel dengan lat dan panjang, untuk menggunakan api PostGIS, saya membutuhkannya dalam format point. Karenanya ingin tahu bagaimana cara memperbarui kolom titik menggunakan fitur ini. Terima kasih Vikram
Vik86
@ Vik86 lihat jawaban yang diperbarui
Mike T
1

Jika Anda bekerja dengan klien Java maka saran saya adalah menggunakan tipe biner untuk mentransfer data. Dari memori, saya mencatat peningkatan kinerja 10% ketika saya melakukan perubahan ini di atas metode ST_AsEWKT.

Sersan
sumber