Dal punto di vista della densità di popolazione, una "area urbana" dovrebbe generalmente soddisfare solo alcuni criteri assiomatici :
Il suo confine non dovrebbe includere alcun punto di (relativamente) alta densità rispetto alla massima densità all'interno.
Dovrebbe essere semplicemente collegato (senza "buchi").
La sua densità media di popolazione dovrebbe superare alcune soglie prestabilite.
L'assioma (1) è il più naturale: se un punto limite avesse un'alta densità, sposteremmo il confine verso l'esterno per includerlo all'interno dell'area urbana. Vorrei suggerire che "relativo" significa come proporzione del massimo , come un decimo o un centesimo o altro. Axiom (2) evita di escludere parchi e altre regioni a bassa densità che si verificano naturalmente nelle città. Axiom (3) , che poiché dipende da una soglia è in qualche modo arbitrario, elimina i piccoli villaggi compatti.
In realtà, esiste almeno un altro elemento di arbitrarietà: qualsiasi mappa con griglia della densità di popolazione media implicitamente la media delle popolazioni sui quartieri locali (pari a una cella in alcuni casi e uguale a un raggio del kernel per le stime della densità del kernel). Accettiamo questa dimensione di vicinato implicita (che può essere modificata eseguendo i primi mezzi focali o altri smooths del kernel sulla mappa della densità originale), questa soglia di popolazione e il senso di "relativamente alto" nell'assioma 1 come parametri impostabili dall'utente che controllano il risultato.
Questi assiomi portano naturalmente ad un algoritmo abbastanza semplice : bisogna localizzare i massimi locali, guardare nei loro quartieri fino a quando non viene trovato un confine per soddisfare l'assioma (1), riempire tutti i buchi per soddisfare l'assioma (2), quindi schermare tutte queste aree candidate secondo (3). Questo viene fatto come segue:
Facoltativamente, leviga la mappa della densità.
Esegui un algoritmo di "riempimento" su una mappa relativa alla densità (vedi sotto).
RegionRaggruppa il risultato.
Rimuovi i buchi dai poligoni RegionGrouped.
Esegui somme zonali della densità di popolazione sui poligoni pieni.
Elimina eventuali poligoni con somme (o densità medie) al di sotto della soglia della popolazione (densità).
Ciò che rimane è la tua soluzione.
Lasciatemi dire un po 'di più sul passaggio (1), che è la chiave. Un algoritmo di riempimento identifica i "pozzi" e li "riempie" fino a un valore costante al di sopra delle loro quote. Questo è esattamente ciò che Axiom (1) ci chiede di fare, a condizione che (a) possiamo fare in modo che "sink" giochi il ruolo di "massimo locale" e (b) fare in modo che "quantità costante al di sopra" giochi il ruolo di " frazione costante di. " Il modo per farlo è riempiendo il logaritmo negativo della densitàpiuttosto che la densità stessa. (Aggiungi una minuscola costante prima alla densità - diciamo, circa 0,1 persone per chilometro quadrato - prima di prendere il tronco, in modo che eventuali celle contenenti zeri non causino problemi.) I "laghi" nella densità del tronco negativa identificano il candidato aree urbane. Hai ancora tre parametri indipendenti con cui giocare (entrando nei passaggi 0, 1 e 5); impostarli richiederà qualche riflessione su ciò che realmente intendi per "area urbana", nonché una sperimentazione.