Ich habe eine ziemlich große Punkt-Feature-Class in einer Datei-Geodatabase (~ 4 000 000 Datensätze). Dies ist ein reguläres Punktraster mit einer Auflösung von 100 m.
Ich muss eine Art Verallgemeinerung auf dieser Ebene durchführen. Dazu erstelle ich ein neues Gitter, in dem jeder Punkt in der Mitte von 4 "alten" Punkten liegt:
* * * *
o o o
* * * *
o o o
* * * *
[*] = Punkt des ursprünglichen Gitters - [o] = Punkt des neuen Gitters
Der Attributwert jedes neuen Punktes wird basierend auf den gewichteten Werten seiner 4 Nachbarn im alten Raster berechnet. Ich schleife also alle Punkte meines neuen Gitters und für jeden von ihnen alle Punkte meines alten Gitters, um die Nachbarn zu finden (indem ich die Werte von X und Y in der Attributtabelle vergleiche). Sobald 4 Nachbarn gefunden wurden, verlassen wir die Schleife.
Hier gibt es keine methodische Komplexität, aber mein Problem ist, dass dieses Skript nach meinen ersten Tests wochenlang abgeschlossen sein wird ...
Sehen Sie eine Möglichkeit, es effizienter zu machen? Ein paar Ideen auf meinem Kopf:
- Indizieren Sie die Felder X und Y => Ich habe das getan, aber keine signifikante Leistungsänderung festgestellt
- Führen Sie eine räumliche Abfrage durch, um die Nachbarn zu finden, anstatt eine auf Attributen basierende. Würde das tatsächlich helfen? Welche räumliche Funktion in ArcGIS sollte die Aufgabe übernehmen? Ich bezweifle, dass sich beispielsweise das Puffern jedes neuen Punkts als effizienter erweisen wird
- Transformieren Sie die Feature-Class in ein NumPy-Array. Würde das helfen? Ich habe bisher nicht viel mit NumPy gearbeitet und würde nicht gerne darauf eingehen, es sei denn, jemand sagt mir, dass dies wirklich dazu beitragen könnte, die Verarbeitungszeit zu verkürzen
- Noch etwas?