非常に大きなシェープファイルのレンダリングパフォーマンスを改善する方法


20

100MBの.dbfと500MBの.shpファイルコンポーネントを持つポリゴンシェープファイルがあります。それがとても大きい理由は、それが地区全体の土地基地として分類されているからです。

ArcCatalogまたはArcMapでファイルを表示し、ビューウィンドウを少し移動するたびに、ファイル全体を最初から再描画する必要があります。空間インデックスとジオデータベースへのインポートを試みました-どちらのアプローチも、レンダリングに関して顕著なパフォーマンスの改善を提供しません。

Esriのヘルプページは、シェープファイルのパフォーマンスを向上させるために、ユーザーがファイル一般化できることを示唆しています。これは明らかに機能しますが、情報を失いたくありません。ファイルを分割することは、その領域全体で多くのジオプロセシング/クエリを実行しているため、理想的ではありません。領域全体を一度に表示することは避けることができると思いますが、たとえば、クエリがファイルのどの部分を選択したかを確認した方がよい場合もあります。

レンダリングのパフォーマンスを改善するために他に取れる方法はありますか?

(理論的には、シェープファイルの「ピラミッド」を構築することが理想的です。ArcGISがこのようなアプローチをサポートしたことがない理由はわかりません-少なくとも私は知っています...)


2
このような大きなシェープファイルは、単にトラブルを引き起こしています。私の経験では、大きなシェープファイルは非常に簡単に破損する傾向があります。破損を防ぐために、ファイルジオデータベースで取得します。描画パフォーマンスが向上すると、ボーナスが追加されます。
Devdatta Tengshe

上記で簡単に述べたように、大きなシェープファイルをgdbにインポートしても、純粋なレンダリングの観点からは改善されないことがわかりました。一般的な観点からすると、gdbに大きなshpファイルを置かないことはほとんど意味がありません(あらゆる種類の理由で)。
-youzer

2
シェープファイルの代わりにラスターを使用することを検討しましたか?
カーククイケンダル

ファイルサイズが2ギガバイトで、コンピューターメモリも2ギガバイトである場合、arcgisがこのファイルデータをフルメモリで消費するためにどのように処理するのか、
user2174920

数百万の小さなポリゴンがある場合、ラスターを使用すべきであるというのは悪名高い格言です(土壌レイヤーを作成している場合を除いて...)
知らない場合-GIS

回答:


22

私の考えは次のとおりです。

  1. シェープファイルをファイルジオデータベースフィーチャクラスにエクスポートします- 描画のパフォーマンスは向上すると思いますが、どの程度かはわかりません
  2. ArcGIS Desktop 10.0以降を使用している場合は、ベースマップレイヤーに移動します-これにより、描画パフォーマンスが大幅に向上します
  3. ベクターデータのピラミッドの音が気に入ったら、このArcGIS Ideaに投票してください。

3
ベースマップレイヤーIIRCで解析または選択を実行できないことを除きます。
blah238

4
TOCの2番目のレイヤーがベースマップレイヤーではなく同じソースを指していることで回避できる可能性があります。ベースマップレイヤーは通常オフになっていますが、分析または選択に必要なときに表示できます。
PolyGeo

PolyGeo-回答ありがとうございます。私はベースレイヤーを試しましたが、実際には、「レイヤーにズーム」をクリックすると、ファイルが最初からレンダリングされないため、パフォーマンスが大幅に向上します。blah238のコメントを与えることをお勧めする回避策は、いくつかのプロジェクトで機能する可能性がありますが、ベースレイヤーの使用を制限する追加事項は、シンボルを使用してdbfを視覚化できないことです。この制限により、参照用ファイル(ベースレイヤーではない)を生成し、必要に応じて「実際の」レイヤーを再表示することもできます。本当に素晴らしい解決策ではありません。あなたが提案するように、私は「ピラミッド」のアイデアに投票します!
-youzer

6

ArcMapのパフォーマンスを改善するための多くのヒントがありますが、ここで使用した3つの提案があります。

  1. データフレームの座標系が、シェープファイルおよびTOCにある他のレイヤーと一致することを確認します。表示するレイヤーが少ないほど良いです。
  2. 透明度やその他の複雑さのない単純な線と塗りつぶしに基づいたシンボルのみを使用します。
  3. 概要と近くをパンする機能の両方が必要な場合は、拡大鏡またはビューアの使用を検討してください。

一般的に非常に良いアドバイス。私は最初のテストでこれらのすべてを実際に実装しました-非常に大きなフィーチャクラス/シェープファイルを処理するには、より多くの/異なるトリックが必要なようです。
-youzer

4

レイヤーが大きな縮尺(たとえば、1:10,000以上)で表示されないように、レイヤー表示パラメーターを設定することにより、レンダリングを改善できます。このオプションは、レイヤーのプロパティで確認できます。[レイヤーのプロパティ]> [全般]タブ> [超えてズームアウトしてもレイヤーを表示しない...]

また、ストレージの場所も重要です。たとえば、帯域幅の低い古いサーバーに格納されている場合、パフォーマンスの低下が保証されます。サーバーで1GB以上のベクターデータを定期的に処理しているため、システムの仕様を更新する必要があるかどうか疑問に思います(参考として、12GB RAM、第2世代i7、平均グラフィックスカードを実行しています)。

ここに画像の説明を入力してください


3

クエリを実行するためにマップをレンダリングする必要がありますか?pythonスクリプトを実行し、マップを描画せずにデータにアクセスした場合はどうなりますか?正確なプロセス、ニーズなどはわかりませんが、考えはあります。


3

アーロンの答えへのちょっとしたフォローアップとして、定義クエリを使用して、視覚化のために返される結果の数を制限することもできます(そして分析を含みます-それは選択のように機能すると思います)。特定の瞬間にすべての機能が必要なわけではなく、リージョンを1トンも切り替えていない場合、定義クエリは実行可能なソリューションになる可能性がありますが、質問やニーズに対する正確な答えではありません。


3

フラストレーションが聞こえます。私はこのような大きなシェープファイルを日常的に使用しており、一般に表示の問題はありません。上記のすべてのコメントに同意します。特に、データフレームを含め、すべてが同じ投影になっていることを確認します。ファイルをローカルにコピーし、ネットワーク経由でアクセスしようとしていないと思いますか?このサイズのシェープファイルで表示の問題が発生する原因の1つは、ストリームネットワークのように極端な量の頂点がある場合です。これに対する唯一の解決策は、Pythonスクリプトを作成してレイヤー定義をオンザフライで実行することです。もう1つは、コンピューターのグラフィックメモリとグラフィックカードを更新することです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.