Mi primer corte en un algoritmo (en su mayoría) pseudocódigo; bastante duro, pero espero que ilustra una idea de cómo podría acercarse a él.
Esencialmente, en que se genera la trama polígonos donde cada región electoral tiene un diferente valor entero, empezando en 1. Determinar el número de píxeles en cada región para cada una de las partes. A continuación, se itera sobre los polígonos.
Para cada polígono, índice de uso de cortarlas, para obtener el subconjunto de acuerdo a su cuadro delimitador y la de desentrañar en una dimensión. Luego iterar sobre los valores, en sustitución de+ los que forman parte del polígono con diferentes valores de acuerdo a los resultados de la elección. Luego remodelar de nuevo con el cuadro delimitador y reemplazar+ el subconjunto de nuevo en la trama original.
+En realidad, en lugar de reemplazo puedo usar matrices independientes para la entrada y la salida.
Advertencia -> este enfoque podría resultar en líneas horizontales que no se extienden completamente a través de los siguientes polígonos:
000000000001111111
111111111111111122
222222222222222222
Tenga en cuenta que usted necesitará para establecer la resolución de la trama de acuerdo a la precisión con que se desea mostrar (por ejemplo, si usted quiere ser capaz de mostrar a la más cercana por ciento, se necesita un mínimo de 100 píxeles en el más pequeño polígono).
; import vector polygons
; get num_polygons
; perform inward-oriented buffer as mentioned in the paper (?)
; compute polygon bounding boxes (bbox_coords)
; rasterize polygons (vary raster cell values by polygon: 1, 2, ... num_polygons)
; get histogram of raster polygons (i.e., num pixels in each)
; compute num pixels for each party for each raster polygon (pixel_values)
; convert raster into numpy ndarray (unlabled_polygons)
party_polygons = np.zeros((unlabled_polygons.shape), dtype=int); array to hold output
for polygon_n in num_polygons:
; get pixel_values list and bbox_coords for given polygon
; use bbox_coords & slicing to subset given polygon (subset_array)
unraveled = np.ravel(subset_array, order='C')
party_subset = np.zeros((unraveled.shape), dtype=int)
for UR, PS in zip(np.nditer(unraveled), np.nditer(party_subset)):
ind = 0
if UR == polygon_n: ; if pixel is part of current polygon
PS == pixel_values[ind] ; write party code to unravelled party_subset
ind = ind + 1 ; advance index
; otherwise pixel is other polygon, outside map, or part
of inner buffer, so leave unravelled party_subset as 0
and do not advance index
party_subset.reshape((subset_array.shape))
; element-wise addition of party_subset to full party_polygons array
(any values in party_subset not part of current polygon will be 0,
so won't affect their neighbours) use slicing (see reference)
; convert party_polygons ndarray into a raster
La adición de diferentes tamaño/forma de desplazados NumPy matrices