Archivo de la categoría: openstreetmap

Topónimo Quintana en Cataluña

Siguiendo el mismo esquema y código que hemos hecho en la Cataluña Mágica del post anterior, hemos publicado rápidamente los topónimos Quintana que hay en Cataluña.

Una Quintana o quintà hace referencia a la quinta parte que tenían que pagar los payeses en impuestos, y con el tiempo una Quintana acabó significando una masía y los campos de alrededor, es decir, lo que hoy llamamos una finca. De aquí viene el apellido Quintana, tanto en catalán como en castellano, que se escriben igual y viene directamente del latín. Mi apellido Quintana viene de la masía La Quintana de Oristà, que tuvimos la suerte de visitar hace unos años, con mis padres, hermanos, primos y familia. Los Quintana de Cabrianes vienen de esta casa de payés de Oristá. Mi bisabuelo (el abuelo de mi padre, acs) era de Cabrianes y se casó en Bagà. De aquí el apellido Quintana en Bagà, Guardiola y Berguedá. Jo soy de Barcelona, pero estas son mis raíces por parte de mi abuelo paterno.

Referencias:


Cataluña Mágica

Se ha publicado la web de la Cataluña Mágica: demonios, infierno, brujas y diablos, con información extraída de OpenStreetMap.

Hemos utiltzado OpenLayers 6.5.0 (con el paradigma de imports), y los tiles estandard de OSM y también TRESC, una capa de visualización que me gusta mucho. Los datos que se obtienen pueden ser nodos o vías, y ha habido un trabajo previo de limpiar un poco los datos, pero todo ha sido un proceso muy rápido.

Referencias:

Segmentos de ciclismo con la API de Strava

De la API de Strava me interesa sobretodo la parte de segmentos, que son trozos de rutas donde la gent se cronometra y se publican los rankings. Sin una subscripción Premium no se puede acceder a toda la información. Jugando un rato con la API de Strava he llegado a poder ver los segmentos que hay en una zona geográfica, y poder ver los puntos de este segmento, que se pueden representar en cualquier mapa.

Para acceder a la información de un segmento:

$ curl -X GET https://www.strava.com/api/v3/segments/229781 -H 'Authorization: Bearer *******************'

Y el resultado:

{"id":229781,"resource_state":3,"name":"Hawk Hill","activity_type":"Ride","distance":2684.82,"average_grade":5.8,"maximum_grade":10.9,"elevation_high":247.2,"elevation_low":92.0,"start_latlng":[37.833112,-122.483436],"end_latlng":[37.828072,-122.498139],"elevation_profile":"https://d3o5xota0a1fcr.cloudfront.net/v6/charts/KO5P7GCFLK5P5NF5GNUX3D6IVFLIEYRYD6JRBEGMXHOCPENJUQZXD5IIEJOYINQE2HX3XLZMYRTF5GHG5JLQ====","start_latitude":37.833112,"start_longitude":-122.483436,"end_latitude":37.828072,"end_longitude":-122.498139,"climb_category":1,"city":"San Francisco","state":"CA","country":"United States","private":false,"hazardous":false,"starred":false,"created_at":"2009-09-21T20:29:41Z","updated_at":"2021-03-13T09:01:33Z","total_elevation_gain":155.2,

"map":{"id":"s229781","polyline":"}g|eFnpqjVl@En@Md@HbAd@d@^h@Xx@VbARjBDh@OPQf@w@d@k@XKXDFPF\\CbGT`AV`@v@|@NTNb@?XOb@cAxAWLuE@eAFMBoAv@eBt@q@b@}@tAeAt@i@dAC`AFZj@dBA~@Yh@MbAVn@b@b@\\d@Ef@Qd@_@d@eB|@c@h@YfBI|AMpA?VF\\\\t@f@t@h@j@|@b@hCb@b@XTd@Bl@GtA?jAL`ALp@Tr@RXd@Rx@Pn@^Zh@Tx@Zf@`@FTCzDy@f@Yx@m@n@Op@VJr@","resource_state":3},

"effort_count":556805,"athlete_count":49100,"star_count":5022,"athlete_segment_stats":{"pr_elapsed_time":null,"pr_date":null,"pr_activity_id":null,"effort_count":0},"xoms":{"kom":"5:37","qom":"6:42","destination":{"href":"strava://segments/229781/leaderboard","type":"overall","name":"All-Time"}},"local_legend":{"athlete_id":54312907,"title":"Dalton Nonweiler","profile":"https://dgalywyr863hv.cloudfront.net/pictures/athletes/54312907/14907176/5/large.jpg","effort_description":"86 efforts in the last 90 days","effort_count":"86","effort_counts":{"overall":"86 efforts","female":"41 efforts"},"destination":"strava://segments/229781/local_legend?categories%5B%5D=overall"}}

Vemos que la polilinea está codificada en una cadena de texto. La podemos decodificar y obtener las coordenadas:

$ pip3 install polyline

$ python3
>> import polyline
>> #polyline.decode(summary_polyline)
>> polyline.decode("gxu{Fem|Kc@fAq@fAoApAMR[ZMXw@v@a@VQZi@j@sAhAk@hA_@f@oDxCiAhA_@j@a@~@{@pCC`@EFD^H`B?`@BNNZV@JGDMEqA@q@H]NOFSLo@t@eB^i@d@i@t@m@n@Yz@EHBR\\`AdDFdEJ`@RNHIVGf@ATH`At@VXDl@GJU@WY[e@YSKC_@GgA@YMKMc@eBYeBSWg@AUTSVa@|@[tAAPDb@Nr@@TCb@[bACd@BNJ^Xh@N^BNB`@Nn@DJTNZ\\Rn@?\\c@zAA^B\\JZHHh@NZDVHTRHJBNAb@I|@B\\Th@PTVf@F`@Cl@Sj@WJ{Ae@{@OKBSPOr@IvA[z@UTw@JWE_@]QUUKKCu@Hs@NMEIIi@kAOUGE]OUMGIGY?y@XiB@]E]U[SGU?c@XcA`Aw@|@i@~@WbASPK?IC_Au@q@_@SAI@g@Lo@XK?YB[MYOQSQYi@Y_@AK@CDg@X]Bg@KUMi@e@[k@GU@MHQb@a@DIFU@WIYg@u@]y@IqAP{ABq@Is@e@iB}@wAw@oBk@aAa@g@g@w@Km@Q{AYkB_AmCc@eB?]H]NWxAiBZq@JYFm@@m@C[G]OWa@k@eAu@o@k@iBkCm@k@SKc@CK@]LS@e@]]]E@GDEH@`@PZJd@CHEFI?OSMe@Uk@")

[(41.40436, 2.11683), (41.40454, 2.11647), (41.40479, 2.11611), (41.40519, 2.1157), (41.40526, 2.1156), (41.4054, 2.11546), (41.40547, 2.11533), 
...
(41.41868, 2.11667), (41.41859, 2.11653), (41.41853, 2.11634), (41.41855, 2.11629), (41.41858, 2.11625), (41.41863, 2.11625), (41.41871, 2.11635), (41.41878, 2.11654), (41.41889, 2.11676)]

Referències:

Calas de Menorca

Con motivo del #30DAYMAPCHALLENGE (Noviembre de 2020), el día 16 toca hacer un mapa de una isla. Participo enviando al Twitter un mapa de las calas de la isla de Menorca.

I en este mapa tengo dos objetivos. El primero, utilizar un ángulo para pintar los labels de las calas, de forma que los nombres estén bien orientados alrededor de la isla; y también quiero que al hacer zoom, el font size de los labels sea más grande o más pequeño.

Para encontrar todas las calas he hecho una consulta a Overpass Turbo. La cosa no ha sido fàcil, pues las calas las he buscado con el tag «natural»=»beach», pero después he visto que también es importante el tag «natural»=»bay». Además, no sólo hay que buscar por Cala, sino también por Cales y Caló

La idea inicial era hacer un posicionamient y orientación automático de los nombres de las calas. Pero no es una cosa fácil y rápida, o sea que al final lo he hecho manualmente, y el resultado se puede ver en la foto.

El mapa se ha programado con OpenLayers sobre la base de los mapes de OpenStreetMap.

Referencias:

Cap de Creus en BTT

El verano se acaba, y estos días en el Port de la Selva me he llevado la bici de montaña. He puesto todos los tracks grabados en un solo mapa, utilizando el package de OpenLayers y partiendo del ejemplo de la documentación. De esta manera puedo poner en perspectiva los caminos que he recorrido, y sobretodo ya puedo pensar en nuevos caminos y zonas para explorar el año próximo.

Iglesias románicas de Catalunya

Finalmente he acabado el proyecto de las iglesias románicas. Han sido unos meses de documentación y de trabajo constante, poco a poco, sin estresarme, enmedio del confinamiento.

Resumiendo, el trabajo que se ha hecho es:

  • generar una base de datos mysql de todas las iglesias
  • replicar toda esta información en OSM: había gdadesran cantidad de iglesias que no existen; se ha convertido muchos nodos a vías; se ha aprovechado para editar casas y granjas del entorno de las iglesias; se ha actualizado muchos tags, como por ejemplo wikidata, wikipedia, ruins, etc. Se ha respetado al máximo la información editada por otros usuarios.
  • hacer una página web, con diferentes ejemplos de mapas, entre ellos la cartografía del ICGC

Las ediciones que se han hecho en OSM son manuales, i se ha utilizado scripts python para asociar y actualizar la información de la bd con la información de OSM. Ha sido un trabajo laborioso de documentación, y muchas veces la información se ha tenido que contrastar con otras fuentes, como los mapas del ICGC.

No considero que el trabajo esté acabado, hay varias cosas que quiero discutir con la comunidad de OSM, pero esto tendrá que ser después del verano. Por ejemplo, aunque las iglesias en cuestión son románicas, la etiqueta building:architecture=romanesque no siempre será la más correcta. Por ejemplo, la iglesia de la Torre de Faia (Capella de Santa Magdalena), en Gisclareny, y que conozco, es una construcció más moderna que aprovechó las piedras de la antigua iglesia románica. Merece el tag building:architecture=romanesque? I es que la realidad siempre supera en complejidad a la teoría…

Referencias:

Utilizar los mapas del Institut Cartogràfic i Geològic de Catalunya (ICGC)

Últimamente estoy consultando bastante el mapa topográfico del ICGC, pues la topoimia es muy correcta, y lo utilizo para actualizar la información de OpenStreetMap (aunque los puristas dicen que esto no se puede hacer, que no se pueden consultar otras fuentes que no sea la realidad del conocimiento real). Esto me sirve mucho para el proyecto en el que estoy metido, las iglesias románicas de Catalunya (y de paso, muchas masías aisladas repartidas por el territorio).

Hasta ahora los mapas del ICGC sólo los consultaba, pero no me había planteado utilzar estos mapas topográficos (y las ortofotos) en mis mapas. Pensaba que las licencias no permitirían su uso. Pues estaba equivocado: el ICGC da la información de cómo utilizar los mapas topográficos (y las ortofotos) tanto para las librerías Openlayers como Leaflet, y proporciona el código básico para pintar los mapas. La única cosa es que el ejemplo de Openlayers que proponen es con OL3 y los enlaces a las librerías no funcionan, mejor utilizar OL4. Lo tengo explicado en la wiki.

Así pues, ya tengo otra posibilidad para pintar mis mapas.

  • Info en la wiki
  • Condiciones de uso de la geoinformación ICGC
  • Institut Cartogràfic i Geològic de Catalunya (ICGC)

La Casa de Papel: aplicación web

Este es un ejemplo que he hecho mano a mano con Pere, ahora que estamos confinados por la COVID-19 y vamos por la mitad de la 3a temporada de La Casa de Papel.

Para mi también ha servido para hacer una aplicación OpenLayers con código Node, que es la tendencia actual. Todo está explicado en la wiki y en los enlaces a los que se hace referencia.

La renderización que se ha hecho del mapa en blanco y negro es el estilo toner de Stamen. A mí particularmente me gusta mucho, y creo que hemos conseguido una buena integración con el diseño propio de la serie, que juega con los colores negro y rojo.

Enlaces:

Veguerías/regiones de Catalunya. Densidad de población

He estado programando unos scripts para fusionar fronteras (ver enlace). Ha sido un poco más difícil de lo que me pensaba, y me ha queddo un código Python bastante guarro, pero al final he logrado fusionar comarcas de Catalunya para obtener las regiones/veguerías. Ya miraré de arreglar el código cuando pueda, pues estudiar los diferentes casos es un problema de topología bastante interesante y no demasiado difícil. Pero ahora, debido al confinamiento provocado por el corona-virus y la COVID-19, este es el mejor código (y ya le he dedicado más horas de las que deseaba).

Todo esto viene porque estuve buscando el geojson de las veguerías y fui incapaz de encontrarlo. Este código también ha de servir para fusionar otros casos. Estoy pensando por ejemplo fusionar los municipios del Alt Berguedà.

Con todo esto he hecho como ejemplo la densidad de población, clasificado por veguerías/regiones.

Nota 31-03-2020: He mejorado el código y ahora ya estoy contento con el resultado final. Con la nueva versión he fusionado los municipios del Alt Berguedà.

GeoJSON: densidad de las comarcas de Cataluña

Tenía un tema pendiente con la visualización de mapas: programar aquellos mapas en que se ven las fronteras (ya sean países, regiones, comarcas, municipios), y donde podamos asignar un color o podamos clicar en cada una de las regiones.

En la API de Overpass se pueden hacer consultas de las relaciones a nivel administrativo, y normalmente se obtiene las ways que representan líneas de frontera administrativa. Esto ya va bien para pintar el contorno de un municipio, por ejemplo. Ahora bien, para sombrear toea una área necesitamos un polígono cerrado. Lo mejor es buscar una fuente de datos con formato GeoJSON de los datos que necesitamos, por ejemplo las comarcas. Buscando un poco puedes encontrar datos de todo: países, comunidades autónomas, provincias, etc. Combinando estos datos con la información que nos interesa (por ejemplo, la densidad de población por comarca), podemos hacer una aplicación como la que se muestra en la imagen.

Para hacerlo, está explicado en la wiki. Ahora que me he puesto con el GeoJSON, ahora veo que hay otro formato interesante que es el TopoJSON. Esto es un no parar!