З точки зору густоти населення, "міська територія", як правило, повинна задовольняти лише деяким аксіоматичним критеріям :
Її межа не повинна включати жодних точок (відносно) високої щільності порівняно з максимальною щільністю в її внутрішніх просторах.
Він повинен бути просто з'єднаний (ніяких «дірок»).
Його середня щільність населення повинна перевищувати деякий попередньо визначений поріг.
Аксіома (1) є найбільш природною: якби гранична точка мала високу щільність, ми просто перемістимо межу назовні, щоб включити цю точку в міську зону. Я хотів би припустити, що "відносний" означає максимум пропорції , наприклад, десяту чи одну соту або будь-яку іншу . Аксіома (2) дозволяє уникнути виключення парків та інших регіонів низької щільності, які природним чином зустрічаються у містах. Аксіома (3) , яка через залежність від порогу є дещо довільною, виключає невеликі компактні села.
Насправді існує хоча б ще один елемент довільності: будь-яка сітчаста карта густини населення неявно в середньому включає населення по місцевих мікрорайонах (рівний одній клітині в деяких випадках і дорівнює радіусу ядра для оцінки щільності ядра). Давайте приймемо цей неявний розмір сусідства (який можна змінити за допомогою першого запуску фокусних засобів або інших згладжувань ядра над початковою картою щільності), цей поріг сукупності та відчуття "відносно високого" в аксіомі 1 як налаштовані користувачем параметри, які керують результат.
Ці аксіоми, природно, ведуть до досить простого алгоритму : треба знаходити локальні максимуми, шукати їхні квартали, поки не буде виявлено, що межа задовольняє аксіому (1), заповнити будь-які діри для задоволення аксіоми (2), а потім екранувати всі такі області кандидат відповідно до (3). Робиться це так:
За бажанням розгладьте карту щільності.
Виконайте алгоритм «заливки» на карті, пов’язаній із щільністю (див. Нижче).
RegionGroup результат.
Видаліть отвори з багатокутників RegionGrouped.
Виконайте зональні суми густоти населення над заповненими полігонами.
Усуньте будь-які багатокутники, що мають суми (або середню густину) нижче межі популяції (щільності).
Що залишилося - це ваше рішення.
Дозвольте сказати трохи більше про крок (1), який є ключовим. Алгоритм заповнення ідентифікує "раковини" і "заповнює" їх до постійної кількості, що перевищує їх висоти. Це саме те , що Аксіома (1) просить нас зробити, за умови, що (а) ми можемо змусити «раковину» відігравати роль «локального максимуму» і (б) зробити «постійну кількість вище» відігравати роль «постійної частки . " Спосіб це зробити, заповнивши негативний логарифм щільностіа не сама щільність. (Додайте спочатку крихітну константу до щільності - скажімо, близько 0,1 людини на квадратний кілометр - перед тим, як взяти журнал, щоб будь-які клітини, що містять нулі, не спричинили проблем.) "Озера" в негативній щільності журналу визначають кандидата міські райони. У вас ще є три незалежні параметри, з якими можна грати (введення на кроках 0, 1 і 5); їх встановлення потребує певної думки про те, що ви насправді маєте на увазі під «міською територією», а також експерименти.