Chèn điểm vào PostGIS?


49

Tôi đã tạo một bảng trong nut PostGIS của mình, tôi không thể chèn điểm.

Có gì sai với truy vấn của tôi?

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

Sau truy vấn cuối cùng, nó hiển thị một số lỗi ..

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

Tôi đã kiểm tra phiên bản PostGIS của mình.

SELECT PostGIS_full_version();

Tôi đã nhận được đầu ra sau đây ..

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

Câu trả lời:


84

Bạn đang nhầm lẫn SQLWKT ( văn bản nổi tiếng ). WKT giống như một ngôn ngữ hình học để mô tả các hình dạng, nhưng nó không phải là SQL, là ngôn ngữ để truy vấn và thao tác cơ sở dữ liệu. Khi làm việc với WKT trong truy vấn SQL, nó phải là văn bản và không được trộn lẫn với SQL.

Truy vấn của bạn hoạt động nếu bạn định dạng đúng WKT (xóa ",") và đặt SRID. Đối với phương pháp này, ST_GeomFromText(wkt, srid)hoạt động tốt:

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

Nếu bạn có các cột có kinh độ / vĩ độ số, bạn có thể trực tiếp tạo hình dạng ĐIỂM:

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

Kiểm tra các nhà xây dựng hình học khác trong hướng dẫn .


Đối với yêu cầu của @ vik86, the_geomcó thể được cập nhật trong bảng apptừ các cột số longlatsử dụng:

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

Bạn có thể giải thích chi tiết về việc sử dụng tính năng này, "Nếu bạn có các cột có vĩ độ kinh độ số, bạn có thể trực tiếp tạo một hình dạng ĐIỂM: ST_SetSRID (ST_MakePoint (dài, lat), 4326);" Ngay bây giờ tôi có một bảng có độ trễ và dài, để sử dụng apG PostGIS tôi cần nó ở định dạng điểm. Do đó muốn biết làm thế nào để tôi cập nhật cột điểm bằng tính năng này. Cảm ơn Vikram
Vik86

@ Vik86 xem câu trả lời được cập nhật
Mike T

1

Nếu bạn đang làm việc với một máy khách Java thì lời khuyên của tôi là sử dụng các loại nhị phân để truyền dữ liệu. Từ bộ nhớ, tôi đã ghi lại sự cải thiện hiệu suất 10% khi tôi thực hiện thay đổi này so với phương pháp ST_AsEWKT.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.