shapefile에서 필드 이름의 10 자 제한을 무시 하시겠습니까?


42

Java 및 Geotools 라이브러리를 사용하여 Oracle 데이터베이스에서 esri shapefile 형식 (.shp)으로 텍스트 속성이 첨부 된 형상을 내보내고 있습니다.

데이터베이스의 속성 열은 10자를 초과하는 이름을 가지며 Geotools는 강제로 자릅니다. .shp 또는 .dbf 파일 사양으로 인한 것임을 이해합니다.

"shrtname"= "전체 이름과 긴 이름"으로 간단한 txt 파일을 작성하면이 문제를 해결할 수 있지만 분명히 우리 이외의 다른 소프트웨어에서는이를 이해하고 가져올 수 없습니다.

짧은 필드 이름에서 긴 전체 텍스트 이름으로 매핑하는 공식적인 방법이 있습니까?

예를 들어, 다른 모든 .shp .dbf .shx 파일 옆에있는 xml 파일.

답변:


53

죄송합니다. 대답은 '아니요'입니다. 자신의 필드 매퍼를 롤아웃해야하며 매퍼를 사용하는 소프트웨어 만이를 이해할 수 있습니다. 그래도이 제한이없는 다른 형식 (예 : 파일 지오 데이터베이스, 공간 라이트 등)을 사용할 수 있습니다.


개인적인 경험의 해결 방법에 대한 조언.

사람들이 셰이프 파일을 기본 형식으로 선택하고 주장하면 상호 운용성을 위해 선택 됩니다. 사양을 준수하는 것으로 생각하십시오. 자신의 필드 매퍼를 롤링하기로 선택한 경우, 스펙 외부에서 작업을 수행하기 때문에 기본적으로 반대의 작업을 수행하는 것입니다. "확장 스펙"을 작성했습니다.

과거에 이것을 했습니까? 예. 셰이프 파일을 셰이프 파일을 읽거나 쓸 수있는 다른 파일로 열 때마다 이해하기 어려운 필드가 많은 테이블이 생겨나 기 때문에 실제로 문제를 해결하는 것보다 항상 더 많은 고통을 겪습니다. .

그 시점에서, 나는 당신에게 shapefile을 사용하는 이유를 묻습니다. shapefile 사양 및 제한 사항을 준수하거나 파일 형식을 변경하는 워크 플로 솔루션을 제공합니다. 다른 모든 것은 단지 두통의 요리법입니다.


불행히도 우리의 고객은 shapefile이 필요합니다 : /
denu

그때 다른 옵션은 없습니다 :(
Ragi Yaser Burhum

1
다른 옵션은 해결 방법이며 일부는 아래에 제안되어 있습니다.

고객이 shapefile을 원할 때 왜 임시 해결책이 나쁜 생각인지 설명하기 위해 위의 답변을 업데이트했습니다.
Ragi Yaser Burhum

6
컨설턴트로서, 제 경험은 고객을 도울 수있는 방법을 찾는 것이 "할 수있는 방법이 없습니다"라고 말하는 것보다 거의 항상 바람직하다는 것입니다. 셰이프 파일이 필요한 이유를 찾는 것이 좋은 시작이며 대안에 동의 할 수도 있지만 항상 그런 것은 아닙니다. 또한, 대안을위한 아이디어를 얻는 가장 좋은 방법 중 하나는 웹에 "다른 옵션은 없습니다"라는 알림을 게시하는 것입니다. :-)
whuber

16

클라이언트가 완전히 만족 스럽지는 않지만 표준 처리 방법이 있습니다. 셰이프 파일과 데이터 파일을 소프트웨어가 읽을 수있는 형식으로 두 파일을 내 보냅니다. shapefile에는 속성에 대한 고유 식별자 인 [Id] 만 있습니다. 데이터 파일에는 셰이프와 일치하는 [Id], 필드 이름을 제공하는 [Field], 유형을 나타내는 [Type] 및 값을 저장하는 가능한 각 데이터 유형의 속성이 있습니다. 원본 파일의 각 필드는이 데이터 파일에 레코드로 저장됩니다.

예를 들어 다음과 같은 소스 테이블이 있습니다.

[Shape] [Id] [Name]     [Population2010]
shape1  A1   California         37253956
shape2  A2   Texas              25145561
shape3  A3   Wyoming              563626

해당 데이터 파일이

[Id] [Field]        [Type]  [Text]     [Integer]
A1   Name           Text    California    <Null>
A1   Population2010 Integer <Null>      37253956
A2   Name           Text    Texas         <Null>
A2   Population2010 Integer <Null>      25145561
A3   Name           Text    Wyoming       <Null>
A3   Population2010 Integer <Null>        563262

RDBMS에서 이러한 데이터를 사용하는 방법과 두 형식 간을 변환하는 방법이 분명해야합니다.


7

고객이 ArcGIS를 사용하는 경우 필드 별칭을 대량 으로 할당 하는 스크립트를 제공 할 수 있습니다 . 이렇게하면 데이터를 사용할 때 긴 필드 이름이 나타납니다.

다른 GIS 패키지에 별명을 제공하기 위해 유사한 스크립팅이 작동 할 수도 있습니다.


4
물론 내 답변 중 하나를 높이 평가 한 것을 기쁘게 생각하지만 그 답변은 지오 데이터베이스에 적용되며 shapefile에는 적용되지 않습니다. 별명을 보유 할 수는 없지만 Arcgis에서는 별명을 기억하는 레이어 파일을 저장할 수 있습니다.
매트 윌키

설명을 해주셔서 감사합니다. 또한 별칭도 MXD와 함께 저장할 수 있습니다. 셰이프 파일이 새 맵에 추가 될 때마다 스크립트를 다시 실행해야하므로 고객에게 스크립트를 제공해야한다고 제안했습니다.

2

가장 쉬운 방법은 지오메트리 만 셰이프 파일로 저장하는 것입니다. 많은 GIS 응용 프로그램에 존재하는 탁월한 지오메트리 편집 기능을 위해 YET은 모든 필드 데이터 (또는 대부분)를 sqlite에 테이블로 저장합니다. 필요에 따라 필드 데이터를 조사하십시오.

그러나 공간 쿼리를 수행하거나 QGIS에서 shapefile 피처를 선택하는 동안 테이블을 편집해야하는 경우 옵션으로 [sqlite 테이블에 조인 된 shapefiles]를 잊고 대신 Spatialite로 내 보내야합니다. Qspatialite와 Spatialite_GUI 사용법 알아보기 (이 둘은 서로 다른 많은 기능을 통해 서로 보완 적입니다. SQLITE로 많은 작업을 수행 할 경우 둘 다 필요합니다)

셰이프 파일에 조인 된 해당 테이블은 조인과 동시에 편집 할 수 없다는 점을 명심해야합니다. 따라서 Spatialite로 마이그레이션하는 것이 shapefile의 훌륭한 대안이 될 것입니다. PostgreSQL의 복잡성없이 SQL 데이터베이스의 장점을 대부분 제공하면서 shapefile의 단순성과 이식성을 유지합니다.


-2

TAB 파일로 저장하는 임시 수정은 열 이름이 최대 31 자일 수 있습니다.


1
확실하지 않습니다 이것이 실제로 질문에 대답합니다
nmtoken
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.