PostGIS에 포인트를 삽입 하시겠습니까?


49

PostGIS 너트에 포인트를 삽입 할 수없는 하나의 테이블을 만들었습니다.

내 질문에 어떤 문제가 있습니까?

CREATE TABLE app ( 
  p_id INTEGER PRIMARY KEY

);

SELECT AddGeometryColumn('app','the_geom','4326','POINT',2);

INSERT INTO app(p_id, the_geom) VALUES(2, POINT(-71.060316, 48.432044));

마지막 쿼리 후 약간의 오류가 표시됩니다.

ERROR:  column "the_geom" is of type geometry but expression is of type point
LINE 1: ...SERT INTO app(p_id, the_geom) VALUES(2, POINT(-71....
                                                             ^
HINT:  You will need to rewrite or cast the expression.


********** Error **********

ERROR: column "the_geom" is of type geometry but expression is of type point
SQL state: 42804
Hint: You will need to rewrite or cast the expression.
Character: 53

PostGIS 버전을 이미 확인했습니다.

SELECT PostGIS_full_version();

나는 다음과 같은 결과를 얻었다.

"POSTGIS="1.5.3" GEOS="3.3.1-CAPI-1.7.1" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.7.3" USE_STATS"

답변:


84

SQLWKT (잘 알려진 텍스트 )를 혼동 하고 있습니다. WKT는 모양을 설명하는 기하학 언어와 비슷하지만 데이터베이스를 쿼리하고 조작하는 언어 인 SQL은 아닙니다. SQL 쿼리에서 WKT로 작업 할 때는 텍스트 여야하며 SQL과 혼합 되어서는 안됩니다 .

WKT를 올바르게 형식화하고 ( ","제거) SRID를 설정하면 쿼리가 작동합니다. 이 방법의 경우 ST_GeomFromText(wkt, srid)잘 작동합니다.

INSERT INTO app(p_id, the_geom)
VALUES(2, ST_GeomFromText('POINT(-71.060316 48.432044)', 4326));

경도 / 위도가 숫자 인 열이있는 경우 POINT 형상을 직접 만들 수 있습니다.

ST_SetSRID(ST_MakePoint(long, lat), 4326);

매뉴얼에서 다른 지오메트리 생성자 확인하십시오 .


@의 vik86의 요청에 대해 the_geom테이블에 업데이트 할 수있는 app숫자 열의 longlat사용 :

UPDATE app SET
  the_geom = ST_SetSRID(ST_MakePoint(long, lat), 4326);

이 기능을 사용하여 자세히 설명 할 수 있습니까? "숫자 경도 위도가있는 열이있는 경우 POINT 형상을 직접 만들 수 있습니다. ST_SetSRID (ST_MakePoint (long, lat), 4326);"지금은 위도와 경도가있는 테이블이 있습니다 PostGIS API를 사용하려면 포인트 형식이 필요합니다. 따라서이 기능을 사용하여 포인트 열을 업데이트하는 방법을 알고 싶었습니다. 감사합니다 Vikram
Vik86

@ Vik86 업데이트 된 답변보기
Mike T

1

경우 당신이 자바 클라이언트로 작업 한 후 내 조언은 데이터를 전송하는 바이너리 형식을 사용하는 것입니다. 메모리에서 ST_AsEWKT 방법을 통해이 변경을 수행했을 때 성능이 10 % 향상되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.