シェープファイルのフィールド名の10文字制限をバイパスしますか?


42

JavaおよびGeotoolsライブラリを使用して、Oracleデータベースからesriシェープファイル形式(.shp)にテキスト属性がアタッチされたジオメトリをエクスポートしています。

データベース内の属性列には10文字を超える名前があり、Geotoolsはそれらを切り捨てます。.shpまたは.dbfファイルの仕様によるものであることを理解しています。

これを回避するには、「shrtname」= "The full and long name"を使用して簡単なtxtファイルを作成しますが、明らかに他のソフトウェアでは理解されず、インポートされません。

短いフィールド名から長いフルテキスト名へのマッピングを行う公式の方法はありますか?

たとえば、他のすべての.shp .dbf .shxファイルの横にあるxmlファイル。

回答:


53

申し訳ありませんが、答えはノーです。独自のフィールドマッパーを展開する必要があり、マッパーを使用するソフトウェアのみがそれを理解します。ただし、この制限のない他の形式(ファイルジオデータベース、spatialiteなど)を使用することもできます。


個人的な経験からの回避策に関するアドバイスの言葉。

人々がシェープファイルをメイン形式として選択する(そしてそれらを主張する)とき、それは通常相互運用性のために選択されます- それは仕様に準拠していると考えてください。独自のフィールドマッパーを使用することを選択した場合、基本的にまったく逆のことを行います-仕様外のことを行うため、「拡張仕様」を作成しました。

過去にこれをやったことがありますか?はい。そして、シェイプファイルを読み書きできる他の何かにシェイプファイルを開こうとするたびに、理解しにくいフィールドがたくさんあるテーブルになってしまうため、実際に問題を解決するよりも必ず痛みになります。

その時点で、なぜシェープファイルを使用しているのですか?シェープファイルの仕様とその制限を遵守するワークフローソリューションを考え出すか、ファイル形式を変更します。それ以外はすべて頭痛のレシピです。


残念ながら、お客様にはシェープファイルが必要です:/
denu

その後、他のオプションはありません:
ラギヤーサーバーフム

1
他のオプションは回避策であり、その一部を以下に示します。

上記の回答を更新して、顧客がシェープファイルだけを必要とする場合に回避策が悪い考えである理由を説明しました。
ラギヤセルバーフム

6
コンサルタントとしての私の経験では、クライアントを支援する方法を見つけることは、「それを行う方法はありません」と言うよりも、ほとんど常に望ましいということです。シェープファイルが必要な理由を知ることは良い出発点であり、代替案に同意できるかもしれませんが、常にそうなるとは限りません。ちなみに、回避策のアイデアを得る最良の方法の1つは、「他に選択肢はありません」という通知をWebに投稿することです。:-)
whuber

16

これに対処する標準的な方法がありますが、クライアントはこれに完全に満足しているわけではありません。シェープファイルとデータファイルの2つのファイルを、ソフトウェアが読み取れる形式でエクスポートします。シェープファイルには、属性の一意の識別子[Id]のみがあります。データファイルには、形状に一致する[Id]、フィールド名を提供する[Field]、そのタイプを示す[Type]、および値を格納する可能性のある各データタイプの1つの属性があります。元のファイルの各フィールドは、このデータファイルにレコードとして保存されます。

たとえば、次のようなソーステーブル:

[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でこれらのデータを使用する方法と、2つの形式を相互に変換する方法は明らかです。


7

顧客がArcGISを使用している場合、フィールドエイリアスを一括で割り当てるスクリプトを提供できます。これにより、データを使用しているときに長いフィールド名が表示されます。

同様のスクリプトは、他のGISパッケージでもエイリアスを提供するために機能する場合があります。


4
もちろん、私の回答の1つが高く評価されていることを喜んでいますが、その答えはシェープファイルではなくジオデータベースに適用されます。エイリアスを保持することはできませんが、Arcgisではエイリアスを記憶するレイヤーファイルを保存できます。
マットウィルキー

注目され、説明をありがとう。また、エイリアスもMXDで保存できることに注意してください。シェイプファイルを新しいマップに追加するたびにスクリプトを再実行する必要があるため、スクリプトを顧客に提供することを提案しました。

2

最も簡単な方法は、ジオメトリのみをシェープファイルとして保存することです。多くのGISアプリケーションに存在する優れたジオメトリ編集機能のために、まだすべてのフィールドデータ(またはそれらの大部分)をテーブルとしてsqliteに保存します。必要に応じて参加して、フィールドデータを調査してください。

ただし、空間クエリを実行中にテーブルを編集する必要がある場合、またはQGISでシェープファイル機能を選択する必要がある場合は、オプションとして[sqliteテーブルに結合されたシェープファイル]を忘れて、代わりにすべてをSpatialiteにエクスポートする必要があります。QspatialiteとSpatialite_GUIの使用方法を学習します(どちらも他の機能にはない多くの機能を備えており、互いに補完的です。SQLITEで多くのことを行う場合は両方を必要とし、使用します)

これらのテーブル(シェープファイルに結合されている)は、結合と同時に編集できないことに注意してください。したがって、Spatialiteへの移行は、シェープファイルの優れた代替手段となります。PostgreSQLの複雑さを伴うことなく、SQLデータベースの長所のほとんどを提供しながら、シェープファイルのシンプルさと移植性を維持します。


-2

一時的な修正として、最大31文字の列名を持つTABファイルとして保存することができます。


1
これが本当に質問に答えるかどうかわからない
-nmtoken
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.