lis
28
2013

Podział naturalny Jenks w PHP – Mapa Choropleth

Podaję opis użycia algorytmu podziału naturalnego Jenks dla map Choropleth. Autorem adaptacji tego algorytmu w PHP jest David Drake.
Szukałem długo rozwiązania swojego problemu z grupowaniem wyników na zakresy/klasy. Nie znalazłem nic co by omawiało od A do Z ten temat. Myślę, że także Tobie to się przyda :) Smacznego.

Zastosowanie

Algorytm podziału naturalnego pozwala na grupowanie wyników o zbliżonych do siebie wartościach. Następnie otrzymane zgrupowane wartości nanosimy na mapę. Jedna grupa, jeden kolor. Dzięki temu otrzymujemy mapę choropletha.
Przydatne przy dzieleniu/kolorowaniu map na obszary według podanych wartości.

 

Przykład

Mamy tablicę wartości zaludnienia dla województw (liczby abstrakcyjne):

  • Świętokrzyskie => 45
  • Lubelskie => 50
  • Małopolskie => 55
  • Mazowieckie => 57
  • Kujawsko-Pomorskie => 58
  • Warmińsko-Mazurskie => 60
  • Podkarpackie => 60
  • Wielkopolskie => 61
  • Podlaskie => 61
  • Łódzkie => 61
  • Zachodniopomorskie => 62
  • Pomorskie => 64
  • Lubuskie => 66
  • Dolnośląskie => 67
  • Śląskie => 69
  • Opolskie => 82

Przepuszczamy powyższe wartości przez funkcję grupującą.

Wynik:
I grupa 45-50:

  • Świętokrzyskie => 45
  • Lubelskie => 50

II grupa 55-58:

  • Małopolskie => 55
  • Mazowieckie => 57
  • Kujawsko-Pomorskie => 58

III grupa 60-62:

  • Warmińsko-Mazurskie => 60
  • Podkarpackie => 60
  • Wielkopolskie => 61
  • Podlaskie => 61
  • Łódzkie => 61
  • Zachodniopomorskie => 62

IV grupa 64-69:

  • Pomorskie => 64
  • Lubuskie => 66
  • Dolnośląskie => 67
  • Śląskie => 69

V grupa 82:

  • Opolskie => 82

 
Po naniesieniu na mapę otrzymujemy województwa zgrupowane wg. pięciu kolorów:

 

Użycie

Będziemy używać tylko dwóch funkcji getOptimalClassInformation oraz getMapKeys zawartych w skrypcie Davida.

1. Najpierw musimy doprowadzić do otrzymania tablicy o wyglądzie:

Elementy muszą być posortowane według wartości od min do max, a klucze tablicy muszą być indeksowane co jeden.

 
2. Tablicę wrzucamy do funkcji getOptimalClassInformation.

Zwrotnie otrzymujemy tablicę zagnieżdżoną, która zawiera:

  • Tablicę z maksymalnymi granicami grup.
  • Tablicę z liczbą elementów zakwalifikowanych do każdej z grup.

Przekazywane parametry:

  • Jako pierwszy parametr podajemy naszą tablicę z posortowanymi wartościami od min do max.
  • Jako drugi parametr podajemy minimalną ilość grup jakie możemy otrzymać.
  • Jako trzeci parametr podajemy maksymalną ilość grup jakie możemy otrzymać.
  • Jeżeli chcemy otrzymać wyłącznie określoną liczbę grup, wpisujemy dwie takie same wartości dla drugiego i trzeciego parametru. W innym przypadku funkcja dobierze najbardziej odpowiednią liczbę klas/grup.

Wynik:

 
3. Używamy funkcję getMapKeys,

aby otrzymać ostateczny wynik pogrupowanych wartości w postaci zakresów.

Przekazywane parametry:

  • Jako pierwszy parametr wrzucamy tablicę wejściową, którą mieliśmy do obróbki $arrayIn.
  • Jako drugi parametr przekazujemy zerowy element wynikowej tablicy $breaks do funkcji.

 

Dodatkowe informacje:

 
Wkrótce opiszę jak wygenerować mapę choropleth w PHP przy pomocy biblioteki Imagick.
Stay tuned!

Podobne tematy

Autor wpisu: Arkadiusz Krakiewicz

Programista i właściciel sklepu jednocześnie, dzięki temu rozumie potrzeby osób prowadzących sprzedaż w internecie. Od 2006 związany z eCommerce. Zaczynał jako freelancer tworząc sklepy oraz strony www. Aktualnie zajmuje się: programowanie w PHP, Symfony 2, Android, PrestaShop, osCommerce, OpenCart, WordPress.

Dodaj komentarz

Anti-Spam

O mnie

Arkadiusz Krakiewicz
Programista aplikacji webowych dla branży eCommerce. Jednocześnie jako właściciel sklepu zna od "podszewki" potrzeby osób prowadzących sprzedaż w internecie.
W swoich rozwiązaniach stawia na funkcjonalność i wydajność aplikacji pod kątem obsługi klienta.
[X]
Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików cookies.
Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.
Więcej w Skrypty i moduły
jQuery animate scroll
jQuery – Animowany scrolling na stronie www

Na wielu stronach możemy spotkać po kliknięciu w link gładkie przesuwanie ekranu góra/dół (scrolling), będąc na tej samej stronie. Tzw....

Zamknij