Wie kann die Renderleistung eines sehr großen Shapefiles verbessert werden?

20

Ich habe ein Polygon-Shapefile mit einer 100 MB-DBF- und einer 500 MB-SHP-Dateikomponente. Der Grund, warum es so groß ist, ist, dass es als Landbasis für einen ganzen Bezirk klassifiziert ist.

Jedes Mal, wenn ich die Datei in ArcCatalog oder ArcMap anzeige und das Ansichtsfenster leicht verschiebe, muss die gesamte Datei neu gezeichnet werden. Ich habe versucht, räumliche Indizes zu erstellen und in eine Geodatabase zu importieren. Bei beiden Methoden ist keine deutliche Leistungsverbesserung beim Rendern zu verzeichnen.

Auf der Hilfeseite von Esri wird vorgeschlagen, dass der Benutzer die Datei verallgemeinern kann, um die Leistung von Shapefiles zu verbessern . Das würde natürlich funktionieren, aber ich möchte keine Informationen verlieren. Das Aufteilen der Datei ist nicht ideal, da ich viele Geoverarbeitungen / Abfragen mit dem gesamten Bereich durchführe. Ich schätze, ich könnte vermeiden, den gesamten Bereich auf einmal anzuzeigen - aber manchmal ist es zum Beispiel gut zu sehen, welche Teile der Datei von einer Abfrage ausgewählt wurden.

Gibt es einen anderen Ansatz, um die Renderleistung zu verbessern?

(Theoretisch wäre es ideal, Shapefile-Pyramiden zu erstellen. Ich bin mir nicht sicher, warum ArcGIS einen solchen Ansatz noch nie unterstützt hat. Zumindest ist mir dies bekannt.)

youzer
quelle
2
Ein so großes Shapefile zu haben, ist nur ein Problem. Nach meiner Erfahrung neigen große Shapefiles dazu, sehr leicht zu korrumpieren. Laden Sie es in eine File-Geodatabase, um Beschädigungen zu vermeiden. Eine bessere Zeichenleistung wäre ein zusätzlicher Bonus.
Devdatta Tengshe
Wie ich oben kurz anmerkte, stellte ich fest, dass das Importieren eines großen Shapefiles in eine GDB keine Verbesserung bringt - aus rein rendernder Sicht. Sie haben jedoch völlig Recht, dass es aus allgemeiner Sicht wenig sinnvoll ist, keine große shp-Datei in einer GDB zu haben (aus allen möglichen Gründen).
youzer
2
Haben Sie darüber nachgedacht, ein Raster anstelle eines Shapefiles zu verwenden?
Kirk Kuykendall
Ich bin in einer Sache verwirrt, was ist, wenn die Dateigröße 2 GB und der Computerspeicher 2 GB ist, dann, wie ArcGIS diese Dateidaten behandeln wird, da es den vollen Speicher
belegen
Wenn Sie Millionen kleiner Polygone haben, sollten Sie das berüchtigte Sprichwort "Raster" verwenden (es sei denn, Sie
erstellen

Antworten:

22

Meine Gedanken sind:

  1. Exportieren Sie Ihr Shapefile in eine File-Geodatabase-Feature-Class. Ich denke, die Leistung beim Zeichnen ist besser, bin mir aber nicht sicher, um wie viel
  2. Wenn Sie ArcGIS Desktop 10.0 oder höher verwenden, verschieben Sie es in einen Grundkarten-Layer. Dadurch wird die Zeichenleistung erheblich verbessert
  3. Wenn Sie den Klang von Pyramiden für Vektordaten mögen, stimmen Sie für diese ArcGIS-Idee ab .
PolyGeo
quelle
3
Es sei denn, Sie können keine Analyse oder Auswahl auf Grundkarten-Layern IIRC durchführen.
blah238
4
Der Verdacht, dass die zweite Ebene im Inhaltsverzeichnis auf dieselbe Quelle und nicht auf eine Grundkartenebene zeigt, die normalerweise deaktiviert ist, aber bei Bedarf für die Analyse oder Auswahl angezeigt werden kann.
PolyGeo
PolyGeo - danke für die Antwort. Ich habe Baselayer ausprobiert und in der Tat ist eine wesentliche Leistungsverbesserung, wenn auf "Zoom to Layer" geklickt wird und die Datei nicht von Grund auf neu gerendert wird. Die Problemumgehung, die Sie angesichts des Kommentars von blah238 vorschlagen, würde möglicherweise bei einigen Projekten funktionieren, aber ich habe festgestellt, dass die Verwendung von Baselayer zusätzlich dadurch eingeschränkt wird, dass Sie die DBF nicht mit einer Symbologie visualisieren können. Mit dieser Einschränkung kann ich die Datei auch als Referenz generieren (keine Basisebene) und dann die "echte" Ebene einblenden, wenn dies erforderlich ist. Keine wirklich gute Lösung. Ich stimme über die Idee der "Pyramiden" ab, wie Sie vorschlagen!
Youzer
6

Es gibt viele Tipps zur Verbesserung der ArcMap-Leistung, die möglicherweise hilfreich sind. Hier sind jedoch drei Vorschläge, die ich verwendet habe.

  1. Ich stelle sicher, dass das Datenrahmen-Koordinatensystem mit meinem Shapefile und allen anderen Layern im Inhaltsverzeichnis übereinstimmt. Aber je weniger Ebenen angezeigt werden, desto besser.
  2. Ich würde meine Symbologie nur auf Basis einfacher Linien und Füllungen ohne Transparenz oder andere Komplexitäten verwenden.
  3. Wenn Sie sowohl einen Überblick als auch die Möglichkeit zum Schwenken aus nächster Nähe benötigen, sollten Sie die Lupe oder den Viewer verwenden.
John
quelle
im allgemeinen sehr gute beratung. All dies habe ich in meinen ersten Tests implementiert - es scheint, dass mehr / verschiedene Tricks erforderlich sind, um mit sehr großen Feature-Classes / Shapefiles umzugehen.
youzer
4

Sie können das Rendern verbessern, indem Sie die Layer-Anzeigeparameter so einstellen, dass der Layer nicht in großem Maßstab angezeigt wird (z. B.> 1: 10.000). Diese Option finden Sie in den Ebeneneigenschaften: Ebeneneigenschaften> Registerkarte "Allgemein"> "Keine Ebene anzeigen, wenn darüber hinaus gezoomt wird ..."

Auch der Speicherort spielt eine Rolle. Wenn der Speicherort beispielsweise auf einem alten Server mit geringer Bandbreite gespeichert wird, ist eine schlechte Leistung garantiert. Ich verarbeite routinemäßig 1 GB + Vektordaten über einen Server, was mich zu der Frage veranlasst, ob Ihre Systemspezifikationen aktualisiert werden müssen (als Referenz verwende ich 12 GB RAM, i7 der zweiten Generation, durchschnittliche Grafikkarte).

Bildbeschreibung hier eingeben

Aaron
quelle
3

Müssen Sie die Karte rendern, um Ihre Anfragen zu stellen? Was ist, wenn Sie Python-Skripte ausgeführt und auf die Daten zugegriffen haben, ohne die Karte zu zeichnen? Ich bin mir nicht sicher, wie genau Sie vorgehen, was Sie brauchen usw., aber ein Gedanke.

gm70560
quelle
3

Als eine Art Folgemaßnahme zu Aarons Antwort könnten Sie auch eine Definitionsabfrage verwenden, um die Anzahl der zur Visualisierung zurückgegebenen Ergebnisse zu begrenzen. Wenn nicht alle Funktionen für die Anzeige zu einem bestimmten Zeitpunkt benötigt werden und Sie nicht die Region wechseln, kann eine Definitionsabfrage eine praktikable Lösung sein, jedoch keine genaue Antwort auf Ihre Frage oder Ihre Bedürfnisse.

Nicksan
quelle
3

Ich höre deine Frustration. Ich arbeite routinemäßig mit so großen Shapefiles und habe im Allgemeinen keine Anzeigeprobleme. Ich stimme allen obigen Kommentaren zu und stelle insbesondere sicher, dass sich alles in derselben Projektion befindet, einschließlich des Datenrahmens. Ich gehe davon aus, dass Sie die Datei lokal kopiert haben und nicht versuchen, über das Netzwerk darauf zuzugreifen. Eine Sache, die bei Shapefiles dieser Größe zu Anzeigeproblemen führt, ist, dass es eine extreme Anzahl von Scheitelpunkten gibt, wie in einem Stream-Netzwerk. Die einzige Lösung, die ich dafür gefunden habe, ist die Erstellung eines Python-Skripts, mit dem Ebenendefinitionen im laufenden Betrieb erstellt werden können. Ich zeichne also immer nur einige auf einmal. Eine andere Sache wäre, den Grafikspeicher und die Grafikkarte Ihres Computers zu aktualisieren.

Ruth
quelle