Mam punktową klasę obiektów reprezentującą lokalizacje biur wszystkich pracodawców w danej branży. Klasa obiektów ma atrybut do przechowywania liczby pracowników pracujących w każdym biurze. Ktoś poprosił o wykorzystanie tych danych, przestrzennie połączonych z najmniejszą możliwą jednostką geograficzną - w tym przypadku Blokami Spisu. Umowa o prywatności uniemożliwia jednak natychmiastowe ujawnienie danych. Zamiast tego należy go wyłączyć, aby spełnić dwa kryteria:
- Każdy wielokąt musi zawierać co najmniej 3 pracodawców (punkty);
- Nie więcej niż 80% całkowitego zatrudnienia w obrębie wielokąta może stanowić jeden pracodawca.
Z powodzeniem napisałem skrypt, który przestrzennie łączy punkty z Blokami Spisu, zachowując sumę i maksymalne zatrudnienie w każdym z nich. Każdy, który nie spełnia kryteriów wyłączenia, jest oznaczany. (Wieloboki niezawierające żadnych punktów nie są oznaczane, ponieważ nie ma danych do pomniejszenia). Następnie sprawdzam każdą grupę bloków, aby sprawdzić, czy zawierają w niej jakieś oznaczone bloki. Grupy bloków zawierające tylko nieoznaczone bloki są następnie zastępowane blokami. Wynikowa klasa cech jest następnie sprawdzana pod kątem kryteriów eliminacji, aby sprawdzić, czy grupy bloków odpowiednio pomijały dane.
Ten sam proces powtarza się dla traktatów, pozostawiając mi zestaw danych składający się z traktatów (niektóre oznaczone i niektóre nie), grup bloków i bloków (wszystkie nieoznaczone). Następnym postępem w hierarchii geograficznej jest jednak hrabstwo, które nie przydaje się osobie żądającej tych danych.
Moje pytanie brzmi zatem: czy istnieją powszechnie akceptowane metody agregowania wielokątów w jak największej liczbie grup, aby wszystkie spełniały minimalne kryteria?
Oto kilka reguł, które chciałbym zastosować do agregacji:
- O ile to możliwe, oflagowane obszary należy agregować tylko z innymi oznaczonymi obszarami;
- W przypadku oznaczonych traktatów, które nie sąsiadują z żadnymi innymi (lub izolowanymi grupami, które nadal nie spełniają kryteriów), można je połączyć z traktatami, które już spełniają kryteria, chociaż mogą istnieć traktaty bez pracodawców, które również będą między nimi muszą być uwzględnione.
- Chciałbym zachować nienaruszone granice hrabstwa, chyba że jest to absolutnie niemożliwe (i spodziewam się tego poprzez rozdzielenie funkcji danych wejściowych na poszczególne hrabstwa przed ich przetworzeniem).
- Rozwiązanie musi być w języku Python, przy użyciu narzędzi ArcGIS lub bibliotek Python typu open source.
Idealnie byłoby, gdyby ktoś mógł wskazać mi istniejący sposób implementacji tej agregacji. Jeśli nie, chętnie sami koduję algorytm, chociaż lista konkretnych kroków / narzędzi byłaby bardzo wdzięczna. Problem wydaje mi się szczególnym przypadkiem redystrybucji (z niesąsiadującymi wielokątami) iw tym celu przyjrzałem się algorytmom regionalizacji PySAL , chociaż nie jest dla mnie jasne, jak sprawdzić maksymalny odsetek pracodawców w stosunku do wszystkich pracowników korzystających z tych algorytmów .