Du point de vue de la densité de population, une «zone urbaine» ne devrait généralement satisfaire que quelques critères axiomatiques :
Sa limite ne doit comprendre aucun point de densité (relativement) élevée par rapport à la densité maximale à l'intérieur de celui-ci.
Il doit être simplement connecté (pas de "trous").
Sa densité de population moyenne devrait dépasser un certain seuil prédéfini.
L'axiome (1) est le plus naturel: si un point limite devait avoir une densité élevée, nous déplacerions simplement la limite vers l'extérieur pour inclure ce point dans la zone urbaine. Je voudrais suggérer que «relatif» signifie en proportion du maximum , comme un dixième ou un centième ou autre. Axiom (2) évite d'exclure les parcs et autres régions à faible densité qui se trouvent naturellement dans les villes. L'axiome (3) , qui parce qu'il dépend d'un seuil est quelque peu arbitraire, élimine les petits villages compacts.
En fait, il existe au moins un autre élément d'arbitraire: toute carte quadrillée de la densité de population fait implicitement la moyenne des populations sur les quartiers locaux (égale à une cellule dans certains cas et égale à un rayon de noyau pour les estimations de densité de noyau). Acceptons cette taille de voisinage implicite (qui peut être modifiée en exécutant d'abord des moyens focaux ou d'autres lissages de noyau sur la carte de densité d'origine), ce seuil de population et le sens de «relativement élevé» dans l'axiome 1 comme paramètres réglables par l' utilisateur qui contrôlent la résultat.
Ces axiomes conduisent naturellement à un algorithme assez simple : il faut localiser les maxima locaux, regarder dans leur voisinage jusqu'à ce qu'une limite soit trouvée pour satisfaire l'axiome (1), remplir tous les trous pour satisfaire l'axiome (2), puis filtrer toutes ces zones candidates selon (3). Cela se fait comme suit:
Facultativement, lissez la carte de densité.
Exécutez un algorithme de «remplissage» sur une carte liée à la densité (voir ci-dessous).
RegionGroup le résultat.
Supprimez les trous des polygones RegionGrouped.
Effectuez des sommes zonales de la densité de population sur les polygones remplis.
Éliminez tous les polygones dont les sommes (ou densités moyennes) sont inférieures au seuil de population (densité).
Ce qui reste est votre solution.
Permettez-moi d'en dire un peu plus sur l'étape (1), qui est la clé. Un algorithme de remplissage identifie les «puits» et les «remplit» jusqu'à une quantité constante au-dessus de leurs élévations. C'est exactement ce que nous demande Axiom (1), à condition (a) que nous puissions faire "couler" jouer le rôle de "maximum local" et (b) faire "montant constant au-dessus" jouer le rôle de " fraction constante de. " Pour ce faire, remplissez le logarithme négatif de la densitéplutôt que la densité elle-même. (Ajoutez d'abord une toute petite constante à la densité - disons, environ 0,1 personne par kilomètre carré - avant de prendre le journal, afin que les cellules contenant des zéros ne causent pas de problèmes.) Les "lacs" dans la densité de journal négative identifient le candidat zones urbaines. Vous avez encore trois paramètres indépendants avec lesquels jouer (entrée aux étapes 0, 1 et 5); les définir nécessitera une réflexion sur ce que vous entendez vraiment par «zone urbaine» ainsi qu'une certaine expérimentation.