Ich habe eine Punkt-Feature-Class, die Bürostandorte aller Arbeitgeber in einer bestimmten Branche darstellt. Die Feature-Class verfügt über ein Attribut zum Speichern der Anzahl der Mitarbeiter in jedem Büro. Jemand hat darum gebeten, diese Daten räumlich mit der kleinstmöglichen geografischen Einheit zu verbinden - in diesem Fall mit Volkszählungsblöcken. Eine Datenschutzvereinbarung verhindert jedoch die unveröffentlichte Veröffentlichung der Daten. Stattdessen muss es unterdrückt werden, um zwei Kriterien zu erfüllen:
- Jedes Polygon muss mindestens 3 Arbeitgeber (Punkte) enthalten.
- Nicht mehr als 80% der Gesamtbeschäftigung innerhalb eines Polygons dürfen von einem einzigen Arbeitgeber ausgeübt werden.
Ich habe erfolgreich ein Skript geschrieben, das die Punkte räumlich mit Volkszählungsblöcken verbindet und dabei die Summe und die maximale Beschäftigung beibehält. Jeder, der die Unterdrückungskriterien nicht erfüllt, wird markiert. (Polygone keine Punkte enthalten , sind nicht gekennzeichnet, da es keine Daten zu unterdrücken ist.) Jeder Block I dann überprüfen Gruppe , um zu sehen , ob irgendwelche Blöcke gekennzeichnet sind darin enthalten. Blockgruppen, die nur nicht gekennzeichnete Blöcke enthalten, werden dann durch die Blöcke ersetzt. Die resultierende Feature-Class wird dann anhand der Unterdrückungskriterien überprüft, um zu überprüfen, ob die Blockgruppen die Daten angemessen unterdrückt haben.
Der gleiche Vorgang wird für Tracts wiederholt, sodass ich einen Datensatz habe, der aus Tracts (einige markiert und andere nicht), Blockgruppen und Blöcken (alle nicht markiert) besteht. Der nächste Fortschritt in der geografischen Hierarchie ist jedoch der Landkreis, der für die Person, die diese Daten anfordert, nicht von Nutzen ist.
Meine Frage lautet also: Gibt es allgemein akzeptierte Methoden, um Polygone in so viele Gruppen wie möglich zu aggregieren, damit alle einige Mindestkriterien erfüllen?
Hier sind einige Regeln, die ich auf die Aggregation anwenden möchte:
- Nach Möglichkeit sollten gekennzeichnete Gebiete nur mit anderen gekennzeichneten Gebieten aggregiert werden.
- Für die gekennzeichneten Gebiete, die nicht an andere angrenzen (oder isolierte Gruppierungen, die die Kriterien immer noch nicht erfüllen), können sie mit Gebieten verbunden werden, die bereits den Kriterien entsprechen, obwohl es möglicherweise Gebiete gibt, zwischen denen sich keine Arbeitgeber befinden müssen enthalten sein.
- Ich möchte die Bezirksgrenzen intakt halten, es sei denn, dies ist absolut unmöglich (und ich erwarte dies, indem ich die Eingabemerkmale vor der Verarbeitung in ihre jeweiligen Bezirke aufteile).
- Die Lösung muss in Python unter Verwendung von ArcGIS-Tools oder Open-Source-Python-Bibliotheken vorliegen.
Im Idealfall kann mich jemand auf ein vorhandenes Mittel zur Implementierung dieser Aggregation hinweisen. Wenn nicht, codiere ich den Algorithmus gerne selbst, obwohl eine Liste spezifischer Schritte / Tools sehr willkommen wäre. Das Problem scheint mir ein Sonderfall der Umverteilung (mit nicht zusammenhängenden Polygonen) zu sein, und zu diesem Zweck habe ich die Verwendung der Regionalisierungsalgorithmen von PySAL untersucht , obwohl mir nicht klar ist, wie ich den maximalen Prozentsatz des Arbeitgebers an der Gesamtzahl der Beschäftigten, die diese verwenden, überprüfen kann .