Unter dem Gesichtspunkt der Bevölkerungsdichte sollte ein "Stadtgebiet" im Allgemeinen nur einige axiomatische Kriterien erfüllen :
Seine Grenze sollte keine Punkte mit (relativ) hoher Dichte im Vergleich zur maximalen Dichte in seinem Inneren enthalten.
Es sollte einfach angeschlossen werden (keine "Löcher").
Die durchschnittliche Bevölkerungsdichte sollte einen bestimmten Schwellenwert überschreiten.
Axiom (1) ist das natürlichste: Wenn ein Grenzpunkt eine hohe Dichte hätte, würden wir die Grenze einfach nach außen verschieben, um diesen Punkt in das Stadtgebiet aufzunehmen. Ich möchte vorschlagen, dass "relativ" als Anteil des Maximums bedeutet , wie ein Zehntel oder ein Hundertstel oder was auch immer. Axiom (2) vermeidet den Ausschluss von Parks und anderen Regionen mit geringer Dichte, die natürlich in Städten vorkommen. Axiom (3) , das, weil es von einer Schwelle abhängt, etwas willkürlich ist, eliminiert kleine kompakte Dörfer.
Tatsächlich gibt es mindestens ein weiteres Element der Willkür: Jede Gitterkarte der Bevölkerungsdichte mittelt implizit die Populationen über lokale Nachbarschaften (in einigen Fällen gleich einer Zelle und in Kernel-Dichteschätzungen gleich einem Kernelradius). Nehmen wir diese implizite Nachbarschaftsgröße (die geändert werden kann, indem zuerst Fokusmittel oder andere Kernelglättungen über die ursprüngliche Dichtekarte ausgeführt werden), diese Populationsschwelle und das Gefühl von "relativ hoch" in Axiom 1 als vom Benutzer einstellbare Parameter , die die steuern Ergebnis.
Diese Axiome führen natürlich zu einem ziemlich einfachen Algorithmus : Man muss lokale Maxima lokalisieren, in ihre Nachbarschaften schauen, bis eine Grenze gefunden wird, die das Axiom (1) erfüllt, alle Löcher ausfüllen, um das Axiom (2) zu erfüllen, und dann alle diese Kandidatenbereiche screenen gemäß (3). Dies geschieht wie folgt:
Glätten Sie optional die Dichtekarte.
Führen Sie einen "Füll" -Algorithmus für eine dichtebezogene Karte durch (siehe unten).
RegionGruppen Sie das Ergebnis.
Entfernen Sie Löcher aus den Polygonen der RegionGrouped.
Führen Sie Zonensummen der Bevölkerungsdichte über den gefüllten Polygonen durch.
Beseitigen Sie alle Polygone mit Summen (oder mittleren Dichten) unterhalb der Populationsschwelle (Dichte).
Was bleibt, ist Ihre Lösung.
Lassen Sie mich etwas mehr zu Schritt (1) sagen, der der Schlüssel ist. Ein Füllalgorithmus identifiziert "Senken" und "füllt" sie bis zu einem konstanten Betrag über ihren Höhen. Dies ist genau das , was Axiom (1) von uns verlangt, vorausgesetzt (a) wir können "sinken" die Rolle des "lokalen Maximums" spielen lassen und (b) "konstante Menge über" die Rolle des "konstanten Bruchteils von " spielen lassen . "" Der Weg, dies zu tun, besteht darin, den negativen Logarithmus der Dichte zu fülleneher als die Dichte selbst. (Fügen Sie der Dichte zuerst eine winzige Konstante hinzu - beispielsweise etwa 0,1 Personen pro Quadratkilometer -, bevor Sie das Protokoll erstellen, damit Zellen mit Nullen keine Probleme verursachen.) Die "Seen" in der negativen Protokolldichte identifizieren Kandidaten Stadtgebieten. Sie haben noch drei unabhängige Parameter zum Spielen (Eingabe in den Schritten 0, 1 und 5); Das Einstellen erfordert einige Überlegungen darüber, was Sie wirklich unter "Stadtgebiet" verstehen, sowie einige Experimente.