PostGIS에 GML 표면 저장


9

PostGIS 2.0.0을 사용하고 있으며 해당 표면과 다양한 점과 선 사이의 교차점을 계산할 수있는 방식으로 GML 표면을 저장하고 싶습니다. 필자의 경우 Surface에는 내부 링이없는 하나의 PolygonPatch와 LineStringSegment, Geodesic, Arc 또는 Circle이 될 수있는 외부 링이 있습니다. 거리는 수십에서 수백 마일 정도일 수 있습니다. PostGIS에는 CIRCULARSTRING및 유형이 CURVEPOLYGON지원되지 않는 점을 제외하고 호를 저장하는 좋은 방법 인 것으로 보입니다 . 이것을 저장하는 가장 좋은 방법은 무엇입니까? (일반적으로 PostGIS와 GIS를 처음 접했기 때문에 분명한 것이 누락되었을 가능성이 있습니다.)geographygeometry


postgis에있는 그대로 GML을 저장할 수 있습니다. postgis.refractions.net/documentation/manual-svn/…
Mapperz

여기 PostGIS와의 기하학과 지리 유형에 대한 일부 설명 postgis.refractions.net/docs/...
canisrufus

답변:


4

ST_GeomFromGML

ST_GeomFromGML 함수 를 사용 하여 GML 형상을 형상 데이터 유형으로 변환하여 GML 피쳐를 PostGIS 형상 데이터 유형으로 저장할 수 있습니다 . 참고 : KML, WKT 등에는 비슷한 기능이 있습니다.

그냥 다음과 같이하십시오 :

INSERT into myTable (mygeomField) values (ST_GeomFromGML('
    <gml:LineString srsName="EPSG:4269">
        <gml:coordinates>
            -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
        </gml:coordinates>
    </gml:LineString>'));

지오메트리 필드에 입력하면 PostGIS에서 원하는 모든 재미있는 교차와 작업을 수행 할 수 있습니다

그런 다음 ST_AsGML을 사용하여 결과를 GML 형식으로 다시 뱉을 수 있습니다.

편집 # 1 나는 당신이 찾고 있다고 생각합니다 :

http://postgis.net/docs/ST_Distance_Sphere.html

http://postgis.net/docs/ST_Distance_Spheroid.html

편집 # 2

"POSTGIS ="1.5.2 "(당신보다 이전 버전)를 사용하고 있으며 다음 문장은 잘 작동합니다.

select ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')

필요한 기능을 얻으려면 여러 기능을 사용해야합니다.

distance_spheroid는 형상 데이터 유형을 사용하므로 CIRCULARSTRING을 지원하지 않습니다.

문제가있는 샘플 GML을 사용하여 원래 질문에 EDIT 을 추가하십시오 . 그러면 진술서를 작성해 드리겠습니다.


감사합니다. 그러나 GML에서 가져 오는 것이 실제로 핵심적인 문제는 아닙니다. 주요 질문은 정확한 계산이 가능한 방식으로 데이터를 저장하는 방법에 관한 것입니다. 내가 알다시피, 기하 유형은 평면을 기반으로하고 지리 유형은 곡선을 지원하지 않기 때문에 적합하지 않습니다.
EM0

@EM : 내 편집 번호 1 확인
CaptDragon

고마워, 시도했지만 불행히도 CIRCULARSTRINGs는 지원하지 않습니다.
EM0

@EM : 내 편집 # 2 확인
CaptDragon

예, CIRCULARSTRING을 생성하는 명령문은 작동하지만 "geometry"유형이기 때문에 해당 문자열에 대한 거리 계산은 평면을 사용합니다. 어쨌든 CIRCULARSTRING과 같은 정확한 값 (형상)과 ST_CurveToLine을 사용하여 생성 된 근사값 (지리)과 같은 두 가지 방법으로 데이터를 저장하려고합니다.
EM0

2

결국 나는 "정확한"호 또는 원을 저장하는 것을 포기했다. GML 호 (호의 3 점으로 정의 됨)를 가져올 때 지오메트리를 임시 CIRCULARSTRING로 만든 다음 다음과 같이 지리학으로 변환합니다.

ST_RemoveRepeatedPoints(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(...)', 4326)))::geography

중심점, 반경 및 시작 및 끝 각도로 정의 된 GML ArcByCenterPoint를 가져올 때 시작 각도에서 끝 각도까지 1도 간격으로 점을 투영하여 직접 근사합니다. 이것은 구상이 아닌 구면에서 이루어 지므로 완전히 정확하지는 않지만 지리 유형에 대한 방위각점 투영 을 구현하기위한 PostGIS 티켓 이 있습니다. 원도 마찬가지입니다.

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