나는 SRID 4326으로 정의 모두 나는 다음과 같은 사용하여 문제없이 테이블에 삽입 할 수있는 두 개의 기하학 열이 PostGIS와 테이블이 INSERT
(성명 lng
과 lat
값이 프로그램에 전달됩니다)
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
)
그러나 ST_Intersects를 사용하여 교차점을 쿼리 할 때 얻는 점의 값에 따라ERROR: Operation on mixed SRID geometries
.
예를 들어이 쿼리는 다음과 같이 작동합니다.
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 46.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
그리고 이것은 오류가 있습니다.
SELECT * FROM pad_meta where ST_Intersects(
'POINT(-122.334172173172 47.602634395263560)'::geometry, area::geometry
) ORDER BY created DESC;
참고, 그들은 경도 값을 제외하고는 동일 쿼리입니다. 다른 값으로 실험했지만 작동하지 않는 쿼리 사이의 명확한 전환점을 식별하지 못했습니다.
나는 근본적으로 무언가를 오해하고 있다고 생각합니다. 지금 ST_GeomFromText
은 SRID 를 사용 하고 명시 적으로 지정하도록 쿼리를 다시 형식화하여 문제를 해결 / 수정 / 해결했습니다 .
SELECT * FROM pad_meta where ST_Intersects(
ST_GeomFromText('POINT(-122.334172173172 47.602634395263560)', 4326), area
) ORDER BY created DESC;
그러나 나는 솔직히 차이점이 무엇인지, 이것이 정말로 "솔루션"인지 이해하지 못한다.
내 질문은 : 특정 값에 대해서만 오류가 발생하는 이유는 무엇 이며이 쿼리의 형식을 지정하는 올바른 방법은 무엇입니까?
다음은 참조를위한 테이블 정의입니다.
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)
);
또한 geometry_columns에 SRID 유형이 하나만 있음을 확인했습니다.
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
도움 / 조언 감사합니다. 감사합니다! (참고 : 이 질문 도 보았지만 테이블에 삽입 할 때 이미 지오메트리 SRID를 명시 적으로 정의했기 때문에 발생하지 않는 것 같습니다.)
SRID=4326
나머지 문장에 대해 SRID를 설정하는 올바른 방법으로 쿼리 앞에 접두사를 추가하고 있습니까? (ST_GeomFromText
SRID를 지정하는 방법을 모르기 때문에 단순히 사용하는 것과는 달리 ...?) 쿼리에 대한 기본 SRID를 설정하는 방법이 있습니까? 매번 명시 적으로 설정하는 것이 장황한 것 같습니다. 다시 한번 감사합니다!