Tôi có bảng PostGIS với hai cột hình học, cả hai được xác định bằng SRID 4326. Tôi có thể chèn vào bảng mà không gặp vấn đề gì, sử dụng INSERT
câu lệnh sau (trong đó lng
và lat
là các giá trị được truyền theo chương trình):
INSERT INTO pad_meta (
uuid, created, updated, name, origin, radius, area, expiry, creator
) VALUES (
$1, now(), now(), $2, ST_GeomFromText('POINT(lng, lat)', 4326), $3,
ST_Buffer(ST_GeomFromText('POINT(lng, lat)', 4326), $4), $5, $6
)
Nhưng khi tôi truy vấn một giao lộ bằng ST_Intersects, tùy thuộc vào giá trị của điểm tôi nhận được ERROR: Operation on mixed SRID geometries
.
Ví dụ: truy vấn này hoạt động:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Và lỗi này là:
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
Lưu ý, chúng là các truy vấn giống hệt nhau ngoại trừ giá trị của kinh độ. Tôi đã thử nghiệm với các giá trị khác nhau, nhưng không xác định được điểm chuyển tiếp rõ ràng giữa các truy vấn hoạt động và không.
Tôi nghĩ rằng về cơ bản tôi đang hiểu nhầm một cái gì đó. Hiện tại, tôi đã giải quyết / sửa chữa / khắc phục sự cố bằng cách định dạng lại truy vấn để sử dụng ST_GeomFromText
và chỉ định rõ ràng SRID:
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
Nhưng tôi thực sự không hiểu sự khác biệt là gì, hoặc nếu đây thực sự là "giải pháp".
Câu hỏi của tôi là: Tại sao tôi chỉ nhận được một lỗi cho các giá trị cụ thể và cách thích hợp để định dạng truy vấn này là gì?
Dưới đây là định nghĩa bảng của tôi để tham khảo:
CREATE TABLE IF NOT EXISTS pad_meta (
uuid CHAR(32),
created TIMESTAMP,
updated TIMESTAMP,
name VARCHAR(128),
origin GEOMETRY(Point, 4326),
radius INTEGER,
area GEOMETRY(Polygon, 4326),
expiry TIMESTAMP,
creator CHAR(32),
PRIMARY KEY (uuid)
);
Tôi cũng đã xác minh rằng chỉ có một loại SRID trong hình học_columns:
SELECT f_table_name, f_geometry_column, srid FROM geometry_columns;
f_table_name | f_geometry_column | srid
--------------+-------------------+------
pad_meta | origin | 4326
pad_meta | area | 4326
Trợ giúp / tư vấn đánh giá cao. Cảm ơn bạn! (Lưu ý: Tôi cũng đã thấy câu hỏi này , nhưng vì tôi đã xác định rõ ràng các SRID hình học của mình khi chèn vào bảng, có vẻ như đó không phải là điều đang xảy ra.)
SRID=4326
(như bạn đã làm ở trên) là cách đúng để đặt SRID cho phần còn lại của câu lệnh? (trái ngược với việc sử dụngST_GeomFromText
đơn giản vì tôi không biết cách nào khác để chỉ định SRID ...?) có cách nào để đặt SRID mặc định cho các truy vấn không? có vẻ khá dài dòng để đặt nó rõ ràng mỗi lần. một lần nữa cám ơn!