6 votos

Mapeo de resultados parlamentarios (datos categóricos) por participación de polígono en QGIS

Estoy tratando de recrear el efecto de relleno en este mapa:Slovak Parliamentary Eleciton Donde cada polígono se llena con base en el porcentaje de votación de cada partido parlamentario ganado. El autor escribió "me convertí en el interior de los polígonos en los datos ráster formato y se aplica un píxel-contar técnica para crear subdivisiones de tamaño exacto." Fuente

Yo estoy esperando para hacer esto con QGIS, tengo los polígonos con el número de votos que cada partido ha conseguido en diferentes elecciones. Me los puede convertir a trama polígonos, pero no estoy seguro de cómo los colores y lograr la "raya" efecto.

También creo que este dato es "categórico" pero me corrija si hay otro término que se debe usar.

2voto

blitzkriegz Puntos 2139

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X