Ho una classe di punti che rappresenta le sedi degli uffici di tutti i datori di lavoro in un determinato settore. La classe di funzionalità ha un attributo per la memorizzazione del numero di dipendenti che lavorano in ciascun ufficio. Qualcuno ha richiesto di utilizzare questi dati, uniti spazialmente alla più piccola unità geografica possibile - Census Blocks, in questo caso. Tuttavia, un accordo sulla privacy impedisce il rilascio dei dati così come sono. Invece, deve essere soppresso per soddisfare due criteri:
- Qualsiasi poligono deve contenere almeno 3 datori di lavoro (punti);
- Non più dell'80% dell'occupazione totale all'interno di un poligono può essere svolta da un singolo datore di lavoro.
Ho scritto con successo una sceneggiatura che unisce spazialmente i punti a Census Blocks, mantenendo la somma e il massimo impiego in ciascuno. Ciascuno che non soddisfa i criteri di soppressione è contrassegnato. (I poligoni che non contengono punti non sono contrassegnati, poiché non ci sono dati da sopprimere.) Quindi controllo ciascun gruppo di blocchi per vedere se al loro interno sono presenti blocchi contrassegnati. I gruppi di blocchi contenenti solo blocchi non contrassegnati vengono quindi sostituiti con i blocchi. La classe di caratteristiche risultante viene quindi verificata rispetto ai criteri di soppressione, per verificare se i gruppi di blocchi hanno soppresso adeguatamente i dati.
Lo stesso processo si ripete per Tracts, lasciandomi con un set di dati composto da Tracts (alcuni contrassegnati e altri non), Gruppi di blocchi e Blocchi (tutti non contrassegnati). La prossima progressione nella gerarchia geografica, tuttavia, è la contea, che non è di alcuna utilità per la persona che richiede questi dati.
La mia domanda, quindi, è questa: esistono metodi comunemente accettati per aggregare poligoni nel maggior numero possibile di gruppi, in modo che tutti soddisfino alcuni criteri minimi?
Ecco alcune regole che vorrei applicare all'aggregazione:
- Ove possibile, i Tratti segnalati devono essere aggregati solo con altri Tratti segnalati;
- Per i Tracts contrassegnati che non sono contigui con altri (o raggruppamenti isolati che non soddisfano ancora i criteri), possono essere uniti a Tracts che già soddisfano i criteri, anche se potrebbero esserci Tracts senza datori di lavoro tra loro che deve essere incluso.
- Vorrei mantenere intatti i confini della contea se non assolutamente impossibile (e prevedo di farlo separando le caratteristiche degli input nelle rispettive contee prima di elaborarle).
- La soluzione deve essere in Python, con l'uso degli strumenti ArcGIS o delle librerie Python open source.
Idealmente, qualcuno può indicarmi un mezzo esistente per implementare questa aggregazione. In caso contrario, sono felice di programmare l'algoritmo me stesso, anche se un elenco di passaggi / strumenti specifici sarebbe molto apprezzato. Il problema mi sembra un caso speciale di ridistribuzione (con poligoni non contigui) e, a tal fine, ho esaminato l'uso degli algoritmi di regionalizzazione di PySAL , anche se non mi è chiaro come controllare la percentuale massima del datore di lavoro sul totale dei dipendenti che utilizzano questi .