2012-05-09 49 views
5

Tôi đang cố tìm cách xác định tất cả hình học giao nhau với một điểm nhất định với PostGIS trên CartoDB.com (lưu trữ không gian lưu trữ đám mây).Tìm tất cả hình học giao nhau với một điểm

Gần nhất tôi đã có thể để có được để tái sản xuất này là:

SELECT * FROM sf_blocks WHERE ST_Contains(the_geom, ST_GeomFromText('POINT(-122.44107 37.750066)')); 

Thật không may này lỗi với 'ERROR:. Hoạt động trên hình học SRID hỗn hợp'

Cú pháp chính xác để chọn hình học từ một bảng giao cắt với một điểm là gì? Bảng của tôi, sf_blocks là tất cả các đa giác.

+0

Hóa ra tôi không có SRID, là bắt buộc. Để làm rõ, 'the_geom' là đa giác. – nym

Trả lời

5

Hàm ST_GeomFromText lấy đối số thứ hai - SRID. Vì vậy, nếu lớp sf_blocks của bạn ở Lon/Lat, WGS84 thì mã EPSG là 4326. Trong trường hợp này

SELECT * 
FROM sf_blocks 
WHERE ST_Contains(
    the_geom, 
    ST_GeomFromText('POINT(-122.44107 37.750066)', 4326) 
); 

nên làm điều đó. Nếu lớp sf_blocks nằm trong một số Hệ tọa độ khác, (và tọa độ điểm có vẻ là Lon/Lat) thì bạn sẽ muốn sử dụng ST_Transform xung quanh phần GeomFromText.

1

st_transform sẽ cho phép bạn chuyển đổi sang SRID khác, cung cấp cho nó tra cứu trên web. 4326 là phổ biến nhất .. xin lỗi, thiếu thời gian để viết đầy đủ một câu trả lời, sẽ chỉnh sửa trong một chút.

chỉnh sửa..để xác nhận 'the_geom' trong ví dụ của bạn là đa giác hoặc đa giác?

Các vấn đề liên quan