Eine meiner Aufgaben bei der Arbeit ist es, Pakete in Gruppen aufzuteilen. Diese Gruppen werden von Agenten verwendet, um mit den Eigentümern zu sprechen. Ziel ist es, die Arbeit des Agenten zu vereinfachen, indem nahe beieinander liegende Pakete gruppiert und die Pakete in gleiche Anzahl aufgeteilt werden, damit die Arbeit gleichmäßig verteilt wird. Die Anzahl der Agenten kann von einem Paar bis zu 10+ schwanken.
Derzeit führe ich diese Aufgabe manuell aus, möchte aber den Prozess nach Möglichkeit automatisieren. Ich habe verschiedene ArcGIS-Tools untersucht, aber keines scheint meinen Anforderungen zu entsprechen. Ich habe ein Skript (in Python) ausprobiert, das near_analysis
Polygone verwendet und auswählt, aber es ist ziemlich zufällig und dauert ewig, um ein halbkorrektes Ergebnis zu erzielen, dessen Korrektur dann länger dauert, als wenn ich von Anfang an alles manuell gemacht hätte.
Gibt es eine zuverlässige Methode, um diese Aufgabe zu automatisieren?
Ergebnisbeispiel (hoffentlich ohne die gelbe Unterteilung):
quelle
Antworten:
Originalset:
Erstellen Sie eine Pseudokopie (CNTRL-Drag in TOC) davon und stellen Sie eine räumliche Verknüpfung eins zu viele mit dem Klon her. In diesem Fall habe ich eine Entfernung von 500 m verwendet. Ausgabetabelle:
Entfernen Sie Datensätze aus dieser Tabelle, wobei PAR_ID = PAR_ID_1 - einfach.
Durchlaufen Sie die Tabelle und entfernen Sie Datensätze, wobei (PAR_ID, PAR_ID_1) = (PAR_ID_1, PAR_ID) eines darüber liegenden Datensatzes ist. Nicht so einfach, benutze acrpy.
Berechnen Sie die Einzugsgebiete (UniqID = PAR_ID). Sie sind Knoten oder Netzwerk. Verbinden Sie sie durch Linien mithilfe einer räumlichen Verknüpfungstabelle. Dies ist ein separates Thema, das sicherlich irgendwo in diesem Forum behandelt wird.
Das folgende Skript geht davon aus, dass die Knotentabelle folgendermaßen aussieht:
Wo MUID von Paketen kam, ist P2013 ein Feld zum Zusammenfassen. In diesem Fall = 1 nur zum Zählen. [rcvnode] - Skriptausgabe zum Speichern der Gruppen-ID gleich NODEREC des ersten Knotens in der definierten Gruppe / dem definierten Cluster.
Verknüpft die Tabellenstruktur mit hervorgehobenen wichtigen Feldern
Times speichert das Link- / Kantengewicht, dh die Reisekosten von Knoten zu Knoten. In diesem Fall gleich 1, sodass die Reisekosten für alle Nachbarn gleich sind. [fi] und [ti] sind die fortlaufende Anzahl verbundener Knoten. Um diese Tabelle zu füllen, durchsuchen Sie dieses Forum nach der Zuordnung von und zu zu verknüpfenden Knoten.
Skript angepasst für meine eigene Workbench mxd. Muss geändert und mit Ihrer Benennung der Felder und Quellen fest codiert werden:
NODES LAYER FINDEN
GET LINKS LAYER
Ausgabebeispiel für 6 Gruppen:
Sie benötigen das Site-Paket NETWORKX http://networkx.github.io/documentation/development/install.html
Das Skript verwendet die erforderliche Anzahl von Clustern als Parameter (6 im obigen Beispiel). Es werden Knoten- und Verknüpfungstabellen verwendet, um ein Diagramm mit gleichem Gewicht / Abstand der Verfahrkanten zu erstellen (Zeiten = 1). Es berücksichtigt die Kombination aller Knoten mit 2 und berechnet die Summe von [P2013] in zwei Gruppen von Nachbarn. Wenn das erforderliche Verhältnis erreicht ist, z. B. (6-1) / 1 bei der ersten Iteration, wird das Ziel mit reduziertem Verhältnis, dh 4 usw., bis 1 fortgesetzt. Startpunkte sind von großer Bedeutung. Stellen Sie daher sicher, dass Ihre Endknoten oben sitzen Ihrer Knotentabelle (Sortierung?) Siehe die ersten 3 Gruppen in der Beispielausgabe. Es hilft, das Schneiden von Zweigen bei jeder nächsten Iteration zu vermeiden.
Skriptanpassung für mxd:
quelle
Sie sollten das Tool "Gruppenanalyse" verwenden, um Ihr Ziel zu erreichen. Dieses Tool ist ein großartiges Tool aus der Toolbox "Raumstatistik", auf das @phloem hingewiesen hat. Sie sollten das Tool jedoch genau abstimmen, um es an Ihre Daten und Probleme anzupassen. Ich habe ein ähnliches Szenario wie das von Ihnen veröffentlichte erstellt und die Antwort nahe an Ihr Ziel gebracht.
Hinweis: Als ich das Tool unter ArcGIS 10.2 ausführte, beschwerte es sich über das fehlende Python-Paket "six". Stellen Sie also sicher, dass Sie den ersten Link installiert haben
Schritte:
Sie Feldrechner, um diesem Feld für alle Zeilen 1 zuzuweisen. Ändern Sie einfach eine Zeile in 2.
Stellen Sie die Werkzeugparameter "Gruppenanalyse" wie folgt ein:
Versuchen Sie, den Parameter "Anzahl der Nachbarn" entsprechend Ihren Anforderungen zu ändern.
Ergebnis Schnappschüsse:
quelle
Grundsätzlich möchten Sie eine Clustering-Methode gleicher Größe, damit Sie mit diesen Schlüsselwörtern im Web suchen können. Für mich gibt es eine gute Antwort auf stats.SE mit einer Python-Implementierung in einer der Antworten. Wenn Sie mit arcpy vertraut sind, sollten Sie es mit Ihren Daten verwenden können.
Sie müssen zuerst das X und Y der Schwerpunkte Ihrer Polygone berechnen, dann können Sie diese Koordinaten in das Skript eingeben und ihre Attributtabelle mit einem .da-Cursor aktualisieren.
quelle
Hallo zusammen, ich hatte ein ähnliches Problem wie dieses zuvor, also hatte ich es einige gegeben, nie ein neues angefangen, aber nur auf der anderen Seite dachte ich
EINGANGSFORM
Ich dachte, Sie könnten ein Fischnetz auf der Eingabeform erstellen
Fischnetz mit einem Schnittpunkt Ihrer Eingabeform würde dann
Sie können dann die Fläche dieser Pakete innerhalb des neu verarbeiteten Polygons berechnen
Zu Beginn Ihres Skripts wird der Flächeneingabepolygon / n-te Betrag gleicher Größe gewünscht
Sie müssten dann die Pakete in Beziehung setzen, damit sie wissen, welche Pakete begrenzt sind.
Dann könnten Sie durch einen Zeilencursor gehen, um die Pakete zusammenzufassen
Regeln sind
* Es teilt eine Grenze zum letzten Sommer * Es wurde nicht summiert * Sobald es den als gleiche Fläche berechneten Wert überschreitet, würde es zurücktreten und dies wäre eine Gruppe * Der Prozess würde von vorne beginnen * Die letzte Gruppe könnte es sein die Summe der verbleibenden Pakete
Ich denke, die Beziehung zwischen den Paketen herzustellen, könnte die schwierige Sache sein, aber wenn dies erledigt ist, denke ich, dass es möglich sein könnte, sie zu automatisieren
quelle
Ich glaube, die Erweiterung, die Sie suchen, ist Districting. Es wird normalerweise für Wahlen verwendet, aber auch für Franchise-Gebiete gleicher Größe. (Größe bedeutet nicht unbedingt Fläche, es kann sich um eine beliebige demografische Struktur handeln.)
http://www.esri.com/software/arcgis/extensions/districting
http://help.arcgis.com/de/redistricting/pdf/Districting_for_ArcGIS_Help.pdf
quelle
Dies ist meine Lösung für Punktereignisse. Keine Garantie, dass es immer funktioniert ...
quelle
Sie müssen zuerst einen Netzwerkdatensatz mithilfe Ihrer Straßen erstellen. Ich habe diese vorgeschlagene Methode ausprobiert und hatte bisher besseres Glück, dasselbe mit der Gruppierung (Schritt 3) selbst zu tun, indem ich X-, Y-Koordinaten und k-Mittelwerte für Eingabefelder verwendete (nicht perfekt, aber schneller und näher an dem, was ich bin brauchen). Ich bin offen für andere Kommentare und Rückmeldungen.
quelle