Làm thế nào để tìm hiểu xem vị trí lat / long có nằm trong Đa giác không?


8

Tôi đang làm việc trên một hệ thống lưu trữ thông tin vĩ độ / kinh độ của các địa chỉ trong bảng PostGIS. Để lưu trữ Lat / Long trong kiểu dữ liệu hình học, tôi đang sử dụng hàm ST_GeometryFromText.

Ví dụ: lệnh gọi hàm sau nhận giá trị hình học theo vị trí Long / Lat đã chỉ định:

 myPointGeo =  ST_GeometryFromText('POINT(40.758871 -73.985114)');

Tương tự, tôi chuyển đổi một Đa giác thành biểu diễn hình học như sau:

myPolygonGeo =  ST_GeometryFromText('POLYGON ((40.7566484549725 -73.9878561496734, 40.7556894646734 -73.9853026866913, 40.7545841705587 -73.9860537052154, 40.7548036054111 -73.9881458282471, 40.7559820394514 -73.9887895584106, 40.7566484549725 -73.9878561496734 ))')

Tôi muốn tìm hiểu xem vị trí lat / long ở trên có nằm trong Đa giác này hay không. Đối với điều này, tôi đang sử dụng chức năng ST_Within. Nhưng mặc dù 'myPointGeo' thực sự nằm trong Đa giác, ST_Within đang trả về sai. Tôi đang sử dụng ST_Within theo cách này:

 St_Within(myPointGeo,myPolygonGeo)

Tôi làm gì sai ở đây? Tôi có nên sử dụng một số chức năng khác cho mục đích này?


Hôm nay tôi cũng hạ cánh trong tình huống tương tự; và mô tả có trong liên kết này đã giúp tôi và đang hoạt động tốt postgis.refraction.net/documentation/manual-1.4/. Co-tình cờ các ví dụ ở đó và loại dữ liệu bạn sử dụng là giống nhau; vì vậy sẽ đơn giản để nhân rộng
sidd.k

Cũng lưu ý rằng các tài liệu đề xuất sử dụng ST_MakePoint, nói chung vì nó nhanh hơn - postgis.net/docs/ST_MakePoint.html
chrismarx

Câu trả lời:


18

Tôi nghĩ ST_Intersects sẽ hoạt động tốt hơn, nó trả về đúng hay sai về việc hai hình học có giao nhau hay không. Vì vậy, bạn muốn làm một cái gì đó như:

SELECT ST_Intersects(myPointGeo, myPolygonGeo);

hoặc bạn có thể làm:

SELECT a.id, b.id 
FROM pointTableName a, polygonTableName b 
WHERE ST_Intersects(a.myPointGeo, b.myPolygonGeo);

Cảm ơn câu trả lời của bạn
Md Amiruzzaman
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.