Tôi có bảng đơn giản sau đây:truy vấn SQL cho point-in-polygon sử dụng PostgreSQL
CREATE TABLE tbl_test
(
id serial NOT NULL,
poly polygon NOT NULL
)
WITH (OIDS=FALSE);
sau đó tôi cố gắng để chèn một hàng với một đa giác:
insert into tbl_test values(1, PolyFromText('POLYGON((0 0, 10 10, 10 0, 0 0))'))
Và chạy vào lỗi này :
column "poly" is of type polygon but expression is of type geometry
Điều gì là đáng yêu. Vì vậy, câu hỏi đầu tiên của tôi là:
- Tôi có thực sự phải truyền không?
Dù sao, sau khi truyền, nó hoạt động. Và bây giờ tôi đang cố gắng để làm một ST_Contains truy vấn đơn giản:
select id, poly from tbl_test where ST_Contains(poly, Point(GeomFromText('POINT(9 2)')))
Mà cho các lỗi:
ERROR: function st_contains(polygon, point) does not exist
LINE 1: select id, poly from tbl_test where ST_Contains(poly, Point(...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Tôi phải làm gì đây?
Các công trình sau đây:
select st_contains(st_geomfromtext('POLYGON((0 0, 10 10, 10 0, 0 0))'), st_geomfromtext('POINT(0 0)'))
Nhưng có lẽ vì cả hai đối số của loại hình học. Truy vấn thực tế đối với dữ liệu bảng không hoạt động.
Trả lời:
Dơi! Vấn đề là DB tôi tạo ra không dựa trên mẫu postgis DB (và do đó không có các chức năng có liên quan và các bảng cột hình học, vv). Có thể tôi chỉ nhận xét, kết luận rằng cách PostGIS yêu cầu bạn thêm hàng trăm chức năng, hàng và một vài bảng vào DB của bạn để bạn có hỗ trợ GIS hoàn toàn bị lame. Nó làm cho bản sao lưu của lược đồ phức tạp hơn nhiều và rất dễ bị lỗi (trời cấm nếu bạn bỏ bê gọi AddGeometryColumn và chỉ thêm một cột hình học).
Nếu poly in poly hoạt động, tại sao không tạo đa giác "1-gon" với điểm bạn đang tìm? –
Tôi không chắc rằng đa giác của 1 điểm được hỗ trợ trong postgres. Bên cạnh đó, nó là một giải pháp cho một vấn đề tôi không chắc chắn tồn tại .. –