Cómo representar a las Islas Malvinas en R y en QGIS
Una discusión sobre las Islas Malvinas en el mapa base de OpenStreetMap y protocolos para usar la cartografía oficial del Instituto Geográfico Nacional
Motivación
Las Malvinas son argentinas. En los mapas elaborados con herramientas digitales, las Islas Malvinas son muchas veces etiquetadas con un nombre incorrecto, no consistente con nuestro reclamo histórico y vigente de soberanía sobre las islas. ¿Por qué los argentinos y argentinas generan mapas con un nombre distinto a “Islas Malvinas”? Al discutirlo con colegas, me he encontrado con personas que:
- No se habían dado cuenta del error, pero quieren y pueden solucionarlo cuando se les señala.
- No se habían dado cuenta del error, quieren solucionarlo pero no tienen suficientes conocimientos técnicos para ello.
- Justifican el error porque, dicen, sus mapas están en inglés. Pero ojo: la única traducción de “Islas Malvinas” al inglés es “Malvinas Islands”. Así lo considera Cancillería Argentina (ver por ejemplo este documento en inglés). Usar el nombre inglés o usar un binomio (Nombre argentino / Nombre inglés) implica un retroceso en nuestra reivindicación de soberanía sobre las islas.
Los mapas son una herramienta poderosa de comunicación política: nos permiten plasmar nuestra visión sobre el territorio. Considero inadmisible que las Islas Malvinas tengan un nombre incorrecto en los mapas que producimos argentinos y argentinas, así como en las publicaciones editadas en el país. Nuestro reclamo patriótico de ejercicio de soberanía sobre las islas no puede ser menoscabado por errores en las representaciones del territorio. Usar los nombres que intentan imponer quienes ilegalmente usurpan el territorio insular de la provincia de Tierra del Fuego, Antártida e Islas del Atlántico Sur es también una ofensa a nuestros caídos en los intentos por recuperar las Islas. Por estos motivos, me interesa aportar a difundir la problemática y a que más personas puedan resolver sus problemas de representación de las Islas Malvinas en la cartografía generada con herramientas digitales.
¿A quiénes está dirigido este documento?
Este documento está dirigido a todas aquellas personas que quieran hacer mapas en R o QGIS (dos entornos con software libre) y que entiendan del reclamo de Argentina de ejercicio de soberanía sobre las Islas Malvinas.
A su vez, el documento está dirigido a quienes ya conozcan el mapa base Argenmap v2 del Instituto Geográfico Nacional y quieran promover su uso en R o QGIS.
Si bien no proveo una solución explícita para Python ni para otros softwares/lenguajes libres1, invito a contribuir a quienes lo deseen: posiblemente algo de lo aquí documentado pueda ser de utilidad. Para páginas web en las que se use Leaflet, la solución documentada para R es adaptable. Por otro lado, en los softwares privativos de Sistemas de Información Geográfica muy probablemente podrá utilizarse la solución provista para QGIS, basada en XYZ tiles. El repositorio del proyecto en Github está en: https://github.com/nmorandeira/IGN_Malvinas.
Este documento provee una discusión sobre los orígenes del problema de representación de las Islas Malvinas y algunas herramientas para resolverlo. Quienes sólo tengan interés en la solución práctica, pueden saltearse el próximo apartado sobre el origen del problema e ir a la sección Protocolo para R ó Protocolo para QGIS.
1 Actualización con aporte para HTML: el 13 de agosto de 2020 José Mourglia aportó archivos tipo para páginas web (HTML Leaflet + Java + CSS). El aporte puede consultarse en el repositorio asociado.
Agradecimientos
El documento fue redactado en julio de 2020, con colaboración de Malena Libman (Geochicas OSM) que señaló por dónde iba la solución: usar como mapa base a Argenmap v2, un gran trabajo elaborado por el Instituto Geográfico Nacional (IGN) de la República Argentina.
Agradezco la contribución de José Mourglia (Subsecretaría de Sistemas y Tecnologías de Información, Ministerio de Hacienda y Finanzas, Provincia de Corrientes), quien aportó archivos tipo para desplegar el mapa base Argenmap v2 en páginas web (HTML + Java + CSS).
Agradezco también a Priscilla Minotti por los comentarios que mejoraron el script de R y por sugerirme escribirlo en RMarkdown, a Yanina Bellini por la ayuda para publicarlo en un sitio web y en general a R-Ladies (Buenos Aires, Santa Rosa y General Pico) por varios talleres y por la ayuda con Rmd y Git. Finalmente, agradezco a Santiago Mouradian, Facundo Daelli y José Hernández por los debates que mejoraron este documento.
Los orígenes del problema
Hay dos tipos de problemas en la representación de las Islas Malvinas y ambos se relacionan con el origen de los datos geográficos utilizados. Las soluciones indicadas tienen que ver con usar los datos oficiales de Argentina, elaborados y publicados por el Instituto Geográfico Nacional.
El problema de la fuente de los datos vectoriales
Los objetos geográficos con representación de tipo vectorial (o “datos vectoriales”) representan principalmente puntos, líneas ó polígonos. Si queremos elaborar un mapa temático con información de Argentina, en el que representemos con distinto color o tono alguna variable por provincia, podemos utilizar un objeto vectorial de polígonos (“provincias de Argentina”). En ese caso, hay que tener cuidado con la fuente de los datos: ¿qué pasa si está incompleta la Provincia de Tierra del Fuego, Antártida e Islas del Atlántico Sur? Quedaría incompleto el mapa de nuestro territorio.
Otro ejemplo puede ser el uso de un mapa global, con todos los países, en el que queremos asignarle a cada país un tono de acuerdo al valor de una determinada variable (un ejemplo reciente son los mapas de casos de Covid-19). ¿Qué pasa si el polígono de las Islas Malvinas no tiene como etiqueta que pertenece al país República Argentina? También quedaría incompleto el mapa de nuestro territorio.
Solución al problema de la fuente de los datos vectoriales
- El Instituto Geográfico Nacional publica la información geográfica oficial de Argentina. Se puede bajar libremente en el sitio de las Capas SIG del IGN. Nos pueden interesar por ejemplo las capas con geometría de polígono llamadas “País” (un polígono de República Argentina), “Provincia” (múltiples polígonos correspondientes a las provincias) o “Departamento” (múltiples polígonos correspondientes a los departamentos).
- En cuanto a datos globales, no están disponibles en IGN, por lo que tenemos que recurrir a otras fuentes. El ejemplo típico es bajar una capa vectorial de países y que las Islas Malvinas no estén correctamente etiquetadas. En ese caso, se puede editar la tabla de atributos de la capa vectorial y cambiar el nombre del polígono en el campo correspondiente al país y/o provincia. No es el objetivo de este documento explicar cómo editar un archivo vectorial, pero el procedimiento es relativamente sencillo y estoy a disposición para ayudar a quien tenga dificultades con este punto (en R hay varias maneras de hacerlo; en QGIS se puede revisar el apartado “Trabajar con la tabla de atributos” del Manual de Aprendizaje).
El problema de los proveedores de mapas base
Al representar datos espaciales (de tipo vectorial o ráster) es necesario usar un “mapa base”, es decir, incluir información sobre la localización geográfica (recomiendo la sección 27.3. del libro SIG de Víctor Olaya, en la que se abordan las diferencias entre cartografía temática y cartografía base). Podemos elaborar nuestro propio mapa base con información cartográfica básica: localidades, límites políticos, cursos de agua, etc. Sin embargo, en los últimos tiempos se utilizan mucho mapas base ya elaborados, que en principio no podemos modificar, aún cuando no siempre necesitamos –y muchas veces no es recomendable– tener mucho detalle.
Tanto en QGIS como en R (en las representaciones con Leaflet), solemos usar como mapas base a las capas de OpenStreetMap (OSM) o de otros proveedores. En QGIS, lo hacemos a través de XYZ tiles; en R a través de los proveedores de Leaflet. Estos mapas base se proveen en “tiles” (traducido como teselas), es decir, imágenes que se despliegan de acuerdo a la escala o nivel de zoom. Las teselas están subidas a los servidores de los proveedores y en principio no podemos modificarlas: si nos gustan las usamos; si no, no.
Hay muchos proveedores de Leaflet (ver más adelante, spoiler: ninguno de los usualmente listados dice “Islas Malvinas”), pero voy a enfocarme en OSM porque es uno de los más utilizados, muchas veces se usa por defecto, y porque tiene varias ventajas frente a otros. En contraste con otros proveedores de datos geográficos, OSM es libre: podemos descargar la información, usar en nuestras publicaciones mapas con sus datos y también aportar mapeando (¡como hacen muchas personas en nuestro país!). Sin embargo, OSM es un proyecto global y no acompaña nuestro reclamo de ejercicio de soberanía sobre las islas.
¿Cómo se ven las Islas Malvinas en los mapas de OSM (los que por defecto se suelen cargar en R - Leaflet y en QGIS)? Así.
Por defecto, OSM representa los nombres en el lenguaje del país que considera local (por ejemplo, si navegamos en el mapa de OSM podemos ver que los nombres de localidades de Brasil están en portugués y los nombres de localidades de China están en chino). En el caso de las Malvinas, al asignar las islas a los “territorios británicos de ultramar” las etiqueta con el nombre “Falkland Islands”. Aquí un detalle de la información asociada a la Relación 2185374 de OSM, correspondiente al territorio de las Islas Malvinas. Copio y comento las partes más relevantes a esta discusión:
Relación 2185374 de OSM | Comentario |
---|---|
El nombre asignado a la relación 2185374 ya es indicativo del problema. | |
Algunas etiquetas. Adivinen qué significa FK. | |
OSM dice que: la capital es Stanley (¿Puerto Argentino?), el idioma por defecto, según OSM, es inglés. ¿Son territorios disputados? Sí. Pero la bandera es de una jurisdicción supuestamente inglesa; y el nombre internacional es “Falkland Islands (Malvinas)” (según se señala más abajo, sería la convención de las Naciones Unidas, pero tampoco es la etiqueta que se muestra por defecto). | |
Esta etiqueta “name” es la más importante: es como por defecto se llama a las islas en todos los mapas que despleguemos. Acá está nuestro problema de mapeo. | |
Esta etiqueta “name:es” podría ser una solución parcial. Significa: “nombre en español”. Vamos más adelante sobre ese punto. | |
De aquí me interesa destacar la nota, porque me fue señalada por parte de la comunidad de OSM. La traducción literal de la nota es: “La política de OSM es que el ‘name’ (nombre) a ser utilizado es el hablado por los habitantes. Plural. Malvinas es el nombre en español, y es ingresado en name:es. La convención de las Naciones Unidas se muestra como ‘int_name’.”. Sin embargo, esta aclaración desconoce al menos dos cuestiones: 1) Hay un tema de reclamo de ejercicio de soberanía, no de traducción: la única traducción de Islas Malvinas al inglés es Malvinas Islands; 2) El lenguaje oficial de Argentina es el castellano o español. Por otro lado, ¿por qué OSM –que reconoce que hay un territorio en disputa– considera más conveniente usar el nombre en “name:es” y no (al menos) el nombre en “int_name” que es convención en Naciones Unidas? | |
Más información sobre las fuentes de información asociadas al objeto. Muy curioso: el objeto es parte de los “territorios británicos de ultramar”, que parecen ser territorios ocupados y colonias desperdigados por todo el mundo. |
Soluciones parciales al problema de los mapas base
Una solución parcial sería cargar en nuestros mapas la etiqueta name:es por defecto. ¿Qué implicaría? Que usaríamos el nombre en castellano, no sólo para las Islas Malvinas, sino para cualquier territorio, incluyendo Brasil y China (siguiendo el ejemplo de más arriba). No resuelve el problema de fondo sobre cómo se posiciona OSM ante el conflicto, pero sería una solución parcial. Sin embargo, esto no es tan fácil de hacer para usuarias/os finales (a quienes va dirigido este documento).
Una ventaja de que OSM sea libre es que los datos pueden ser descargados y vueltos a subir en otros servidores, como por ejemplo se ha hecho en OSM-Argentina, que pudo solucionar algunos problemas (el nombre de las islas) pero no otros (el nombre de ciudades y accidentes geográficos).
Por otro lado, el Instituto Geográfico Nacional (IGN) sí lo resuelve: en su Argenmap v2 representa correctamente la toponimia oficial de las jurisdicciones y accidentes geográficos de Argentina. Acá hay documentación de qué información representa Argenmap, básicamente “utiliza los datos oficiales publicados por el Instituto Geográfico Nacional a través de su servicio WMS hasta la escala 1:250.000 (es decir, a partir del nivel de zoom 12)”. Aquí pueden ver cómo quedan representadas las Islas Malvinas. Podemos notar que no sólo es correcto el nombre de las islas, sino también el de la “Provincia de Tierra del Fuego, Antártida e Islas del Atlántico Sur”. Y también el nombre de ríos, lagunas, cerros, montañas, etc (zoom en las islas o, por qué no, en un área que cada una/o conozca, por ejemplo en los humedales del Paraná están cargados los nombres oficiales de las lagunas). Se puede leer en detalle sobre la toponimia oficial de las Islas Malvinas.
Conclusión
La mejor solución para nuestro problema de representación de las Islas Malvinas originado por un proveedor de mapas base es usar Argenmap v2 de IGN.
Protocolos para el uso del mapa base Argenmap v2 de IGN
Ejercicio tipo
Para practicar la visualización de datos geográficos con R y QGIS, planteo un ejercicio tipo. El objetivo del ejercicio es representar las áreas protegidas de Argentina y los límites de la zona económica exclusiva (ambas capas son de IGN), con un mapa base adecuado. En particular, nos interesa representar al Área Protegida Banco Burwood II y su entorno.
Protocolo para R
Uso de un mapa base de Argenmap v2 (IGN) con Leaflet
El primer paso es obtener las capas de datos (áreas protegidas y límites de la zona económica exclusiva) del sitio oficial de IGN y descomprimirlas:
areasprotegidas <- tempfile()
download.file("http://ramsac.ign.gob.ar/operaciones_sig/shp_from_geoserver/download.php?f=c2hwOjphcmVhX3Byb3RlZ2lkYS56aXA%3D",areasprotegidas, mode="w")
unzip(areasprotegidas, exdir = "data/")
limite_ZEE <- tempfile()
download.file("http://ramsac.ign.gob.ar/operaciones_sig/shp_from_geoserver/download.php?f=c2hwOjpsaW5lYV9kZV9saW1pdGVfMDcwMTA3LnppcA%3D%3D",limite_ZEE, mode="w")
unzip(limite_ZEE, exdir = "data/")
Se trata de dos capas con representación de tipo vectorial shapefile, una con polígonos y la otra con líneas. Ahora las cargaremos en R, como objeto espacial de tipo vectorial. Si no tienen instaladas las librerías a usar en este y otros códigos, recuerden instalarlas antes de cargarlas.
library(sf)
areasprotegidas <- st_read("data/area_protegida.shp", quiet=TRUE)
limite_ZEE <- st_read("data/linea_de_limite_070107.shp", quiet=TRUE)
Vamos ahora a visualizar estas capas en un mapa, usando la librería tmap y el modo interactivo view. Primero configuramos la salida del mapa.
library(tmap)
tmap_mode("view")
Ahora elaboramos el mapa con tmap (una de las formas más usuales en R).
mapa <- tm_shape(areasprotegidas) +
tm_polygons(col="green") +
tm_shape(limite_ZEE) +
tm_lines(col="violet")
mapa
El código genera un mapa interactivo que tarda mucho en desplegarse en este sitio web, porque es muy pesada la capa de áreas protegidas (pero pueden correrlo en sus computadoras, donde no demora). Por ese motivo dejo a continuación una captura de pantalla. Los mapas de los siguientes ejemplos son más rápidos, así que podrán interactuar.
En la parte de abajo a la derecha del mapa dice que se está usando el entorno Leaflet con un determinado proveedor de mapas. Si bien el proveedor por defecto parece cambiar según la versión y/o el día, con el selector de capas (arriba a la derecha, ver captura de pantalla), se puede elegir entre tres proveedores. OSM es uno de estos proveedores: es libre pero tiene el nombre “Falkland Islands”. Los restantes dos proveedores son de ESRI y tienen sólo algunas etiquetas y a algunas escalas. Ojo: no podemos usar los mapas base de ESRI este mapa base en cualquier circunstancia porque no son libres, revisar los términos de uso de las licencias.
Vamos a generar el mismo mapa pero con sintaxis de Leaflet (sin usar tmap), en donde podemos modificar el proveedor del mapa base. Hay muchos proveedores por defecto de mapas base, que se pueden cargar en Leaflet con el comando “addProviderTiles”. Aquí podemos ver un listado y una previsualización para la zona que querramos recorrer: https://leaflet-extras.github.io/leaflet-providers/preview/. Cargamos las dos librerías necesarias:
library(leaflet)
library(htmltools)
Ejemplo con el mapa base de OpenStreetMap, que muchas veces sale por defecto al usar tmap y que es muy adecuado en otras zonas del país:
mapa_base1 <-leaflet() %>%
addProviderTiles("OpenStreetMap.Mapnik") %>%
setView(-60,-50, zoom = 5)
mapa_base1
Otro ejemplo, con el proveedor “Stamen Toner” (que al no tener mucho detalle puede ser apropiado para usar como mapa base en otras áreas del país):
mapa_base2 <-leaflet() %>%
addProviderTiles("Stamen.Toner") %>%
setView(-60,-50, zoom = 5)
mapa_base2
El problema es que NINGÚN proveedor del extenso listado de proveedores que compartí antes dice “Islas Malvinas”. Entonces hay que buscar cómo incluir el Argenmap v2 del IGN, que tan bien soluciona nuestro problema de representación. Para cargar las teselas de IGN hay que usar el comando addTiles (en vez de addProviderTiles), así como conocer el link que nos da acceso a esas teselas. Este primer código crea un objeto que llamé mapa_base_IGN, es decir, el “Mapa base de IGN” en Leaflet.
mapa_base_IGN <-leaflet() %>%
addTiles('http://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/capabaseargenmap@EPSG:3857@png/{z}/{x}/{-y}.png',
attribution = "Argenmap v2 - Instituto Geográfico Nacional") %>%
setView(-60,-50, zoom = 5)
mapa_base_IGN
Al hacer un recorrido en el mapa interactivo vemos que efectivamente Argenmap v2 de IGN resuelve el problema de representación de las Islas Malvinas. Y no sólo eso, también resuelve el nombre de la Provincia que las incluye y todas las toponimias oficiales de Argentina (ciudades, nombres de lagunas y ríos, montes, etc).
Ahora que tenemos el mapa base de IGN ya creado, vamos a crear el mapa final del ejercicio, usando el conector %>% para agregar al objeto mapa_base_IGN las capas de polígonos y líneas. En la capa de polígonos de las áreas protegidas, la configuración del parámetro label permite agregar etiquetas sobre las áreas protegidas, que se visualizan al apoyar el cursor. Este mapa puede tardar en cargar, porque es muy pesada la capa de Áreas protegidas. ¡Pero vale la pena esperar para ver el producto final!
mapa_final <-mapa_base_IGN %>%
addPolygons(data=areasprotegidas,
col = "darkgreen",
fillOpacity = 0.3,
label=~htmlEscape(areasprotegidas$fna)) %>%
addPolylines(data=limite_ZEE,
col = "violet")
mapa_final
¡Listo!
Protocolo para QGIS 3.xx
Uso de un mapa base de Argenmap v2 (IGN) con XYZ Tiles
Los ejemplos provistos a continuación son para la versión QGIS 3.14 (la última versión disponible en julio de 2020), pueden cambiar levemente en versiones anteriores 3.xx.
En primer lugar, vamos a cargar las dos capas vectoriales de interés para el ejercicio tipo. Los links de descarga de las capas SIG de IGN son:
- Áreas protegidas (polígonos)
- Límite de la zona económica exclusiva (líneas)
Bajamos las capas y las descomprimimos. Luego, debemos agregarlas al panel Capas de QGIS con alguno de estos métodos (a elección):
- Con el botón “Añadir capa vectorial”,
- Con el atajo de teclado Ctrl+Shift+V,
- Desde el menú Capa > Añadir capa > Añadir capa vectorial
- Arrastrando el archivo .shp hacia el panel de capas desde una carpeta o desde el panel Navegador.
Luego podemos cambiar la simbología de las capas de acuerdo a nuestra preferencia.
Para cargar mapas bases en QGIS 3.xx, se utilizan XYZ Tiles. Para comparar, vamos a cargar dos mapas bases, el de OpenStreepMap y el de Argenmap v2 de IGN. Hay muchos mapas bases en formato XYZ, aquí hay una guía muy útil.
En el panel “Navegador” (si no se ve, agregarlo: Ver > Paneles > Navegador), buscar XYZ Tiles. Hacer clic derecho y luego clic en “Conexión nueva”.
El primer ejemplo es para OSM. En el nombre de la conexión, escribimos un nombre a elección. En la URL pegamos: https://tile.openstreetmap.org/%7Bz%7D/%7Bx%7D/%7By%7D.png. El resto lo podemos dejar por defecto.
Luego, haciendo doble click en la capa o arrastrándola desde el panel del Navegador al panel de Capas, podemos desplegar el mapa base de OSM. Para desplegar las capas en orden, es necesario mover el mapa base debajo de los archivos vectoriales. Obtendremos algo similar a esto, con un nombre incorrecto en las Islas Malvinas:
Para cargar el mapa base Argenmap v2 de IGN, volvemos a las XYZ tiles y creamos una nueva conexión. En este caso la URL es http://wms.ign.gob.ar/geoserver/gwc/service/tms/1.0.0/capabaseargenmap@EPSG:3857@png/{z}/{x}/{-y}.png.
Ahora sí obtenemos el mapa deseado:
¡Listo!
Dejo a disposición el proyecto de este ejercicio tipo. Una visualización general de la vista del proyecto y las capas XYZ en los paneles Navegador y Capas es: