Intro

Vamos a seguir trabajando con nuestra capa de términos municipales y añadimos dos capas más para operar con ellas y entre ellas.

  1. Las localizaciones de los núcleos de población de la Región de Murcia. Vectorial de puntos.

  2. La red fluvial de la cuenca del Segura una capa vectorial de líneas.

Cambiando la geometría de la capa por códigos o tipos

Con la función aggregate, esta vez de la librería raster, se pueden generar nuevas capas uniendo los polígonos que compartan algún atributo. Por ejemplo, podemos crear una capa de las comarcas a partir de los términos municipales, con sus superficies calculadas.

En este caso se usa el argumento by:

  1. Podemos ver como se ha modificado la capa y la tabla de atributos

    class       : SpatialPolygonsDataFrame 
    features    : 3 
    extent      : 629962.3, 663793.3, 4205918, 4242772  (xmin, xmax, ymin, ymax)
    crs         : +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs 
    variables   : 2
    names       :                      Group.1, SUPERFKM2 
    min values  : Area metropolitana de Murcia,     64.29 
    max values  :              Vega del Segura,    429.69 
                           Group.1 SUPERFKM2
    1 Area metropolitana de Murcia    231.99
    2               Cuenca de Mula     64.29
    3              Vega del Segura    429.69
  2. Y representarla, ahora ya no hay fronteras entre los términos municipales, solo entre comarcas.

Alternativamente, en ocasiones, agregamos por comarcas sin realizar ningún cálculo, sencillamente queremos una capa con solamente las comarcas, para añadir, en su caso y posteriormente, a la tabla de atributos las variables que estimemos oportunas.

class       : SpatialPolygonsDataFrame 
features    : 3 
extent      : 629962.3, 663793.3, 4205918, 4242772  (xmin, xmax, ymin, ymax)
crs         : +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs 
variables   : 1
names       :                      COMARCA 
min values  : Area metropolitana de Murcia 
max values  :              Vega del Segura 
                       COMARCA
1 Area metropolitana de Murcia
2               Cuenca de Mula
3              Vega del Segura

Responde

¿Cuál es la diferencia en el resultado de la generación de los colores asociados a las comarcas?

¿Encuentras alguna ventaja o inconveniente en cambiar el código de los dos casos con las siguientes alternativas?

  1. col = c( rank( comarcasSup$SUPERFKM2 ) )
  2. col = c( rank( rownames( comarcas@data ) ) )

Selecciones en una capa

En muchas ocasiones no queremos trabajar sobre una capa entera por que es mucho más extensa de la región de interés, los cálculos se relentizan, necesitamos más memoria, los ficheros de trabajo de trabajo son mucho más grandes. Por ejemplo no es sensato trabajar con un capa de toda Europa si únicamente nos interesan los resultados de un país.

Al enfrentar este tipo de situaciones recurrimos a procedimiento de selección con la función subset; el argumento subset de esta función es el que recoge la selección.

Volvamos a nuestra capa de terminos municipales, veamos como seleccionar:

  1. por una variable tipo código o carácter, como por ejemplo la variable COD_COMARC

  2. por una variable cuantitativa, como por ejemplo, la población.

  3. un único elemento.

Responde

Puesto que el argumento de selección subset permite usar expresiones ¿cómo seleccionarías los términos municipales de la comarca Área metropolitana de Murcia, con población mayor de 8000 habitantes en el año 2015?

Estás selecciones también se aplican a capas vectoriale de lineas o de puntos, por ejemplo, si de nuestra capa de la red fluvial solo queremos tener la línea correspondiente al Río Segura.

Responde

¿Cómo crearías una capa, cauces25, con los cauces de longitud superior a 35 km?

¿Cómo sería tu código para representar a la vez las capas cauces25, rioSegura y fluvialV para visualizar claramente los tres niveles de información?

Selección entre capas

Lo habitual es que trabajemos con varias capas de cara a obtener la información deseada, pero considerando la información espacial y no la de la tabla de atributos.

Por ejemplo nuestra capa de localidades de la Región de Murcia, solamente tiene el código de la entidad (Nucleo de Población). ¿Qué localidades están en cada término municipal? ¿Cómo conseguir una selección y obtener una nueva capa con solo las incluidas en nuestra capa terminosV?

class       : SpatialPointsDataFrame 
features    : 1070 
extent      : 559433.3, 702875.3, 4139828, 4288105  (xmin, xmax, ymin, ymax)
crs         : +proj=utm +zone=30 +ellps=GRS80 +units=m +no_defs 
variables   : 1
names       :  COD_NUCPOB 
min values  : 30001000101 
max values  : 30902000301 

Dada la frecuencia con la que vamos a requerir información de otras capas, pero sólo para nuestra área de trabajo, o parte de ella, sin una variable para realizar la selección, vamos a plantearnos las soluciones más habituales.

Selección en una capa de puntos desde una capa de polígonos

Este es, posiblemente, el caso más frecuente ¿cómo podemos crear la capa con las localidades (puntos) incluidas en nuestra área de trabajo (polígonos en teminosV)?

La solución es bastante sencilla, recurrimos a una selección por capas o por localización:

Realmente parece mágico, simplemente en el criterio de selección indicamos la capa que condiciona esta. Otro ejemplo:

Selección en una capa de líneas o poligonos desde una capa de polígonos

Este procedimiento puede extenderse a capas de líneas o polígonos, pero el resultado, no es el esperado. Si aplicamos el criterio que acabamos de ver la selección incluye a todas las entidades o registros que “coindiden” espacialmente con la capa de selección. En el caso, en que sólo queremos la parte incluida, lo que necesitaríamos es realizar un corte de los elementos de la capa selecionada en función de la que selecciona. En el ejemplo siguiente vemos una aplicación directa de este procedimiento y lo inadecuado, si sólo queremos las partes incluidas en las región definida por la capa de corte. Para estos casos debemos recurrir a operaciones, cortes, intersecciones,
tal como veremos más adelante.

Responde

¿En qué situación de un proyecto de trabajo podrían requerir el uso de este procedimiento en particular?

Operaciones con la componente espacial y la tabla de atributos

La última operación que vamos a ver en este módulo es el conteo de puntos sobre una capa de polígonos.

También se trata de una situación usual: queremos saber cuantos puntos, es decir, localizaciones de muestreo, localidades, puntos de riesgo, ubicación de equipos de emergencias, enfermos de una epidémia, … incluidos en cada uno de poligonos del área de estudio.

Para resolver fácilmente la cuestión, la función requerida es over de la librería sp.

Por ejemplo ¿cuántas localidades hay por termino municipal?

Visualmente, simplemente contamos ^__^:

Para calcular el resultado:

  1. A partir de las dos capas obtenemos una tabla con la información de la capa de términos:

        COD_NUCPOB
    4  30034D26073
    9  30011D25252
    15 30038000399
    17 30040D26154
    22 30014000101
    36 30027D25805
       ID                  NOMBRE POB2015 COD_COMARC                      COMARCA SUPERFKM2
    4  34                  Ricote    1369          3              Vega del Segura     86.64
    9  11                  Blanca    6521          3              Vega del Segura     87.29
    15 38 Torres de Cotillas, Las   21399          8 Area metropolitana de Murcia     38.78
    17 40                    Ulea     906          3              Vega del Segura     40.03
    22 14          Campos del Río    2083          4               Cuenca de Mula     47.25
    36 27        Molina de Segura   69331          8 Area metropolitana de Murcia    169.47
  2. Generamos una tabla de conteos, para cada identificador, ID, de la capa terminosV, determinando así cuantas localidades hay por cada ID —o lo que es lo mismo, por cara término municipal— y creamos un data.frame.

       Var1 Freq
    1     2    7
    2     4    2
    3     7    3
    4     9    6
    5    11    7
    6    14    5
    7    18    3
    8    25    4
    9    27   21
    10   31    4
    11   34   12
    12   38   10
    13   40    3
    14   42    2
  3. Asignamos cada valor del conteo a su termino municipal y se genera la capa nueva incluyendo esta variable: Freq.

       ID                  NOMBRE POB2015 COD_COMARC                      COMARCA SUPERFKM2 Freq
    7  18                   Ceutí   11227          3              Vega del Segura     10.27    3
    1   2                  Abarán   13179          3              Vega del Segura    114.90    7
    2   4               Albudeite    1374          4               Cuenca de Mula     17.04    2
    12 38 Torres de Cotillas, Las   21399          8 Area metropolitana de Murcia     38.78   10
    13 40                    Ulea     906          3              Vega del Segura     40.03    3
    3   7                Alguazas    9544          8 Area metropolitana de Murcia     23.74    3

    Gráficamente comprobamos los resultados mediante:

Desafío

Imagina que en tu trabajo necesitaras realizar este tipo de procedimiento con mucha frecuencia. ¿Se te ocurre como crear una función —de nombre cuentaPuntosPol— que tome como argumentos la capa de puntos y la de políngos y devuelva una nueva, de polígonos, con la variable de conteo incluida en la tabla de atributos?