PostgreSQL에서 dxf 파일 가져 오기


10

PostGIS 데이터베이스에 여러 모양 파일을 성공적으로로드했습니다. SQL 쿼리를 기반으로 특정 지오메트리 및 레이어를 dxf 파일로 검색하고 싶습니다.

Windows의 OSGeo4W 제품군에서 PostGIS, GDAL, PostgreSQL 및 Python을 사용하고 있습니다.

나는 ogr2ogr을 다음과 같이 사용해야한다고 상상하고있다.

$ ogr2ogr -sql "SELECT * FROM some_table" -f "dxf" outputfile.dxf -overwrite "PG:dbname=mydb user=dbusername password=dbpassword"

그러나 적절한 값으로 그렇게하면 다음과 같은 일련의 오류가 발생합니다.

ERROR 1: DXF layer does not support arbitrary field creation, field 'objectid' not created. 

레이어의 모든 속성 열에 오류가 발생 some_table하지만 dxf 파일을 얻습니다.

이미 .dxf 파일을 만들고 위의 명령 ( -overwrite옵션 포함)을 다시 실행 하면 대신이 오류가 발생합니다.

Layer sql_statement not found, and CreateLayer not supported by driver. ERROR 1: Terminating translation prematurely after failed translation from sql statement.

GDAL_DATA환경 변수가 올바르게 설정되어 있는지 확인했습니다 . (에 C:\OSGeo4W\share\gdal)

이 모든 도구를 처음 사용했기 때문에이 작업에 잘못 접근했을 가능성이 있습니다. 따라서 SQL 쿼리를 기반으로 PostgreSQL에 저장된 GIS 데이터에서 .dxf 파일을 만드는 방법에 대한 제안과 팁을 열었습니다.


답변:


9

베냐민,

DXF (OGR에서 가정)는 임의의 GIS 속성을 지원하지 않습니다. 다음과 같은 고정 스키마가 있습니다.

레이어 : 문자열 (0.0)
서브 클래스 : 문자열 (0.0)
ExtendedEntity : 문자열 (0.0)
선 종류 : 문자열 (0.0)
EntityHandle : 문자열 (0.0)

그리고 실제로이 중 몇 개만 실제로 검사합니다. 가장 간단한 방법은 -skipfailures 방법을 사용하는 것입니다. 오류 없이도 오류가 발생하더라도 번역이 진행되는 것처럼 보입니다.

-overwrite는 DXF가 지원하지 않는 레이어 삭제를 지원하는 형식에 적용됩니다. ogr2ogr을 실행하기 전에 기존 DXF 파일을 미리 삭제하십시오.


이것은 아마도 지금까지 가장 좋은 대답 일 것입니다.하지만 OGR의 dxf 내보내기 기능은 dxfs를 내 보내지 않는다는 것과 비슷합니다. 실제로 속성 데이터가 있고 큰 오류 목록이 아닌 유용한 dxfs를 얻을 수있는 대답을 원합니다. OGR 내보내기를 개선 할 수 있는지 살펴 보겠습니다.
BenjaminGolder

2

Frank의 답변과 Uster 마을의 "GIS-Kompetenzzentrum"의 힌트 (독일어 만 해당)

http://gis.uster.ch/dokumentation/datenkonvertierung/ogr

PostGIS to dxf가 다음과 같이 수행 될 수 있음을 알았습니다.

ogr2ogr -f DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$'" -sql "select $COLUMN$ as Layer, the_geom from $TABLE$"

결국 sql-statement는 $ COLUMN $의 모든 행에 대해 레이어를 생성했습니다. 따라서 ID 나 관련 이름과 같은 $ COLUMN $을 선택하는 것이 가장 좋습니다.

2D Polygon-Table로 시도했습니다. dxf 파일은 폴리 라인을 닫지 않았습니다. 아마도 "$ polygon $ as Linetype"과 같은 것을 sql-string에 추가하는 것이 가능할 것입니다.

하나의 레이어에서 테이블의 모든 형상을 원한다면 Uster의 "GIS-Kompetenzzentrum"의 코드를 사용할 수 있습니다

ogr2ogr -select '' -f DXF DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$' schemas=$SCHEMA$ tables=$TABLE$(the_geom)"

두 명령문 모두에서 다음 옵션을 추가 할 수 있습니다.

-spat xmin ymin xmax ymax

공간 제한이 필요한 경우


1

Frank가 말한 것은 나의 제안이 될 것입니다.
레이어 이름이 포함 된 dxf를 만들어 템플릿으로 사용하십시오.

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