2

gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2)에서 컴파일 된 postgresql 버전 : "x86_64-unknown-linux-gnu에 PostgreSQL 9.3.1이 있습니다. , 64 비트 "postgresql에서 st_intersect()가 작동하지 않음

나는 포인트와 폴리곤을 데이터 유형으로 사용하여 2 개의 테이블 A와 B를 만들었습니다. 이제 포인트가 다각형 안에 있는지 여부를 알고 싶습니다. 이것을 위해 ST_Intersect (A.point_LatLong, B.polygon_abc)를 사용하려고합니다. 여기

SELECT A.id 
FROM A, B 
WHERE A.name = 'callifornia' 
AND ST_Intersect(A.point_LatLong , B.polygon_abc); 

point_latLongpolygon_abc는 데이터 형식 포인트와 폴리곤 테이블 A와 B.

을 가진 열 이름하지만이 쿼리에 오류가 있습니다 : 내 쿼리입니다

ERROR: function st_intersect(point, polygon) does not exist
LINE 3: WHERE city.city_name = 'callifornia' AND ST_intersect(city.c...
HINT: No function matches the given name and argument types. You might need to add
explicit type casts.


이 문제를 어떻게 해결할 수 있습니까? st_contains() 등의 postgresql에서 다른 공간 메서드를 사용할 수 없기 때문에 해결책이 있는지 알려주십시오.

+1

'st_intersect()'하는 PostGIS와 함수이다는 것처럼 소리 PostGIS와는 예를 들어, 대부분의 유형이 일부 명시 적 캐스트를 제공합니다 당신은 PostGIS를 설치하지 않았습니다. –

답변

5

PostgreSQL의 내장 (제한적이지만 유용한) 기하학적 유형을 PostGIS 기능과 혼합하려고합니다. PostGIS를 설치하지 않은 것 같습니다. 함수 이름도 입력 했으므로 ST_Intersects이 아니라 ST_Intersect입니다. 당신은 PostGIS와를 사용하려면

첫째, 반드시 그 다음 설치되어있어합니다

CREATE EXTENSION postgis; 

다음, 당신은 아마 당신이 실제로 pointpolygonST_Intersects를 호출 할 수 있음을 확인할 수 있습니다. PostGIS는 자체적으로 geometry 유형으로 작동합니다. PostgreSQL 내부 유형에는 일부 변환기가 있지만 제한적입니다. 당신은 종종 PostGIS와 자신의 geometry 형식으로 변환해야합니다

postgres=# SELECT ST_Intersects(polygon(box(point(0,0), point(10,10))), point(5,5)); 
ERROR: function st_intersects(polygon, point) does not exist 
LINE 1: SELECT ST_Intersects(polygon(box(point(0,0), point(10,10))... 
      ^
HINT: No function matches the given name and argument types. You might need to add explicit type casts. 

: 그래서 원시 기하학 유형의 호출 PostGIS와 기능이 같은 오류가 발생할 수 있습니다. 귀하의 요청에 따라서

postgres=# SELECT ST_Intersects(
    polygon(box(point(0,0), point(10,10)))::geometry, 
    point(5,5)::geometry 
); 
st_intersects 
--------------- 
t 
(1 row) 

, 즉 것 :

ST_Intersects(A.point_LatLong::geometry , B.polygon_abc::geometry); 
+0

감사합니다. Craig ringer 이제는 postgis를 설치 한 후 모든 설정을 완료했습니다. 이제 st_intersects()에 대한 쿼리가 잘 작동합니다. – virtual