¿Qué es Turf?
Turf es una librería JavaScript para realizar análisis espacial en la web. Sería algo así como el GIS de los mapas web.
Turf incluye operaciones espaciales tradicionales (buffer, TINs, isolíneas…), funciones de ayuda para crear datos en formato GeoJSON y herramientas para clasificar datos y para crear estadísticas.
Turf se puede añadir en una web completamente en el cliente para realizar todas las operaciones o ejecutarse en el servidor con Node.js. El código fuente se encuentra en GitHub.
Se puede conectar fácilmente con Leaflet y además está disponible como un plugin de Mapbox.js
Turf utiliza los datos geográficos en formato GeoJSON y en coordenadas geográficas WGS84 (longitud, latitud), es decir el EPSG:4326.
Cómo usar Turf
Como una librería JavaScript que es, podemos añadir Turf a nuestra web de la misma manera que se agrega Mapbox.js: en la sección <head> del documento. Podemos utilizar el CDN o descargar la fuentes de la librería Turf de forma local.
<html> <meta charset="utf-8" /> <head> <script src="https://api.tiles.mapbox.com/mapbox.js/v2.2.3/mapbox.js"></script> <link rel="stylesheet" href="https://api.tiles.mapbox.com/mapbox.js/v2.2.3/mapbox.css" /> <script type="text/javascript" src="https:////api.tiles.mapbox.com/mapbox.js/plugins/turf/v2.0.2/turf.min.js"></script>
Cuando añadimos Turf.js a la web, disponemos de una variable global Turf desde la que podemos ejecutar cualquiera de sus funciones.
A continuación le damos un tamaño al contenedor del mapa, un ancho, un alto y un efecto de sombreado:
<style> #map { width: 100%; height: 200px; box-shadow: 5px 5px 5px #888; } </style>
Cerramos la cabecera y vamos al cuerpo de la web, donde incluiremos nuestro script:
</head> <body> <div id='map'></div> <script> L.mapbox.accessToken = 'pk.eyJ1IjoibW9yZ2FuaGVybG9ja2VyIiwiYSI6Ii1zLU4xOWMifQ.FubD68OEerk74AYCLduMZQ';
Como ves necesitamos un token de acceso para acceder a la API de Mapbox.
Crear un punto con Turf
Un punto se basa en un objeto geográfico GeoJSON de tipo Point, en unas coordenadas x e y.
La mayoría de las funciones de Turf trabajan con objetos geográficos GeoJSON. Turf ofrece algunas funciones propias para crear geometrías y evitar el texto plano de un GeoJSON. Por ejemplo, estos dos métodos para crear un punto son funcionalmente equivalentes:
var point1 = turf.point(-66.522259, 10.469100);
var point2 = {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [-66.522259, 10.469100]
},
properties: {}
};
Las propiedades se pueden añadir opcionalmente, en nuestro caso queremos incluir un título, un color para el marcador, y un símbolo.
Para cambiar el estilo de un marcador podemos añadir un simplestyle, que es una especificación para GeoJSON. Con esta convención podemos cambiar claves y valores para añadir o cambiar el color marker-color, símbolo marker-symbol – https://www.mapbox.com/maki/ y el tamaño marker-size:
var point = turf.point([-66.522259, 10.469100], { "title": "Caracas", "marker-color": "#3bb2d0", "marker-symbol": "rocket", "marker-size": "large" });
A continuación lo añadimos al mapa:
var map = L.mapbox.map('map') .setView([10.463453, -66.508014], 5) .featureLayer.setGeoJSON(point]);
Como mapa base elegimos OpenStreetMap:
var OSM = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: '© <a href="http://osm.org/copyright">OpenStreetMap </a>' +'contributors', maxZoom: 18 }).addTo(map);
Y cerramos el script, el body y el código html:
</script> </body> </html>
Por el momento este sería el resultado:
Crear un buffer alrededor de un punto con Turf
Una de las funciones más comunes en GIS es el buffer. Un buffer devuelve una zona de influencia a una distancia especificada de un punto como un objeto geográfico de tipo polígono.
Una vez que hemos creado el punto y lo hemos capturado dentro de la variable point, vamos crear el buffer.
Un buffer necesita una capa de entrada, una distancia para el radio de influencia y la unidad de medida (‘miles’, ‘feet’, ‘kilometers’, ‘meters’, o ‘degrees’).
Añadimos este código:
var buffer = turf.buffer(point, 250, 'kilometers');
Y lo añadimos al mapa, por lo que necesitamos modificar el código anterior para incluir tanto la capa de puntos (point), como la nueva capa (buffer) que contiene la geometría con el buffer:
var map = L.mapbox.map('map') .setView([10.463453, -66.508014], 5) .featureLayer.setGeoJSON([point, buffer]);
Y este es el resultado:
Herramientas de análisis que incluye Turf
Con turf, podemos hacer casi cualquier tipo de análisis espacial. Las funciones se organizan en grupos para que sean más fáciles de encontrar. Las herramientas más importantes que tiene Turf son las siguientes:
Herramientas de medición. Permiten medir distancias, crear objetos geográficos, y calcular tamaños. Con los métodos de medición, no sólo podemos encontrar el centro exacto de la ciudad de Madrid (utilizando turf-centroid), sino que también podemos medir la distancia entre ese punto y el del ayuntamiento (turf-distance). Las herramientas de medición son:
Herramientas de datos. Nos permiten filtrar los datos a partir de propiedades o crear datos para testear. Las herramientas de datos son:
Herramientas de interpolación. Con estas herramientas es posible estimar o medir datos y visualizar el resultado. Un ejemplo de esto es la creación de líneas de contorno (o isobandas) de un conjunto de puntos que contienen información de elevación mediante el uso de turf-isobands. Las herramientas de interpolación son:
Las herramientas unión pueden determinar relaciones espaciales entre objetos espaciales. Las herramientas de unión son:
Por último, las herramientas de clasificación pueden clasificar los datos en grupos discretos. Si desea cambiar la propiedad «color» de una serie de features individuales, simplemente, «azul» o «no azul», podemos utilizar el método turf-reclass. Las herramientas de clasificación son:
Conclusión
El análisis espacial es fundamental en todas las industrias. Se utiliza en epidemiología, biología, estadística, economía, comercio y negocios, planificación urbana, la geología, petróleo y gas, y en muchas otras industrias.
Es una alternativa a utilizar un Servicio de Procesamiento Web (WPS) en el servidor. Con Turf.js, ahora podemos llevar estos análisis al navegador del usuario y mostrar los resultados de forma rápida.
Con la mejora en las conexiones de internet y de los navegadores modernos, la tecnología web mapping se está abriendo paso rápidamente. Hace unos años nos preguntábamos si las aplicaciones webmapping sustituirían a los SIG de escritorio y el geoprocesamiento es uno de los aspectos más relevantes para dar respuesta a la pregunta.
Más info, tutoriales y ejemplos
- https://www.mapbox.com/help/intro-to-turf/
- https://www.mapbox.com/help/analysis-with-turf/
- http://mappingandco.com/blog/turf-gis-en-la-web/
- Probando la librería Turf de análisis espacial (Gracias @Mappinggis)
Licenciado en Geografía. Máster en Sistemas de Información Geográfica. Consultor GIS desde el año 2004. En MappingGIS desde el año 2012 para ayudarte a impulsar tu perfil GIS y diferenciarte de la competencia. Echa un vistazo a todos nuestros cursos de SIG online.
Buenas, sabéis alguna herramienta de análisis espacial en la web tipo Turf que permita calcular rutas entre dos puntos?
Gracias.
Hola Pabloo, Te contesto con un poco de retraso… ¿conoces la API Mapbox Directions? Sirve para calcular rutas óptimas: https://www.mapbox.com/developers/api/directions/ Saludos