Archivo de la categoría: openstreetmap

CatGeoQuest: aplicación para hacer tests de geografía

En esto estoy estos últimos días. Me he dado prisa para poder hacer una demo que se pueda enseñar y que ya sea jugable.

Tengo muchas ideas relacionadas con esta aplicación, puede crecer bastante. Lo que todavía no tengo claro es si le pondré una capa de back-end con bases de datos, o lo dejaré como una SPA (Single Page Application) con sólo front-end y Javascript.

He intentado sacar el máximo provecho de la librería de Openlayers y, como siempre, me ha dado algún quebradero de cabeza pero también he aprendido bastante por el camino. Ahora que ya tengo una versión jugable, el camino para continuar será más plácido y tranquilo…

rutesgps, versión 16

Aquí una nueva versión de rutesgps.joanillo.org, implementando unas pocas opciones que tenía ganas de hacer:

  • Cada excursión tiene una url que la identifica. Por ejemplo, la última ruta que he hecho: Igualada-Calaf-Manresa-Igualada: igualada-manresa-igualada
  • Un botoncito para copiar directamente el enlace de la excursión.
  • He añadido dos markers, para que quede claro dónde comienza y dónde acaba la excursión.

Referencies:

RutasGPS: implementación del buscador de rutas

Una nueva versión de rutesgps.joanillo.org. Hay dos mejoras que hace tiempo que quería implementar. Primero, que las rutas estén ordenadas alfabéticamente. Segundo, la implementación de un buscador de rutas, pues ahora ya hay bastantes y era necesario.

Esta es una app totalmente Javascript. No hay nada de BD ni PHP. Todo es Javascript y JSON, y los contenidos y los mapas se generan dinámicament.

RutasGPS, nueva versión

Se ha publicado la nueva versión de mis rutas en bici. De la v5 a la v7 hay muchos cambios significativos: cambio total del diseño, responsive, Javascript con módulos, Openlayers v6 en la parte de mapas, se ha eliminado toda la parte de PHP (ahora es una webapp).

La lista de rutas se había hecho muy larga, y por tanto ahora las rutas se agrupan por zonas geográficas, que es un desplegable. Podemos filtrar por las rutes que se han hecho, y distinguirlas de las rutas ToDo, que son las que queremos hacer próximamente, si todo va bien. Las capas de render que se han escogido son el estandard de OSM, el TOPOTRESC, la OrtoFoto del ICGC, y el estandard del ICGC.
La única funcionalidad que queda por implementar es la Búsqueda de rutas, a ver si lo puedo hacer antes de las vacaciones.

Todo el código está colgador en el github. En la foto se puede apreciar el cambio de diseño de la versión anterior a la actual. Otra mejora importante que se ha implementado es la automatización del despliegue al servidor, de manera que ahora es más fácil y está más documentado publicar los cambios en la nueva versión.

Referencias:

Recordando la KKH-Karakorum Highway

El año 1997 hicimos con Jordi la KKH-Karakorum Highway, desde Chilas (en Pakistán) hasta Kashgar (en China), pasando por el Khunjerab Pass, el punto fronterizo de casi 4700m de altura.
Ahora que estoy ordenando las rutas de montaña, y recuperando rutas antiguas, era el momento de trazar la ruta y recordar las etapas que vivimos aquel verano. Qué emociones! Acampar al lado del lago Kara-Kul… La visión desde la carretera del Nanga Parbat (8125 m). Éramos jóvenes! Qué aventuras!

Podría haberme descargado la ruta de wikiloc, pero he preferido trazar yo mismo la ruta y así ir repasando los sitios por donde se pasa. Al final fueron casi 800 Km de recorrido. En aquella época no había el GPS. Creo que esta ruta ahora mismo no se puede hacer por problemas de seguridad. Por la parte de Pakistan creo que ahora la cosa islámica está más tranquila. Por otra partem en el bando chino hay problemas por la represión constante de China sobre la población uygur, tajik, y en general en la provincia de Xinjiang.

Municipios de Catalunya (Openlayers)

Hemos cogido del IDESCAT los datos de los municipios de más de 20.000 habitantes de Cataluña (una setantena de municipios), y los hemos geolocalizado.
En esta ocasión se quería practicar la selección de capas, y lo quería hacer todo con módulos (imports) de Javascript, y el código los más limpio posible.
Se puede ver el resultado en este video.

Colección de rutas BTT

Estoy programando con OpenLayers, últimamente he hecho los proyectos de Catalunya Mágica y Quintana. Aprovechando que en OpenLayers es fácil pintar una ruta GPX, quería poner todas las rutas BTT que he ido haciendo en un mismo mapa, i así dar una idea de la actividad deportiva. Bien, no todas las rutas son de BTT, también hay de senderismo, y tampoco son todas las rutas que he hecho, pero da una idea.
El siguiente paso será poner unas capas que se puedan activar/desactivar, para seleccionar BTT/senderismo, o bien por zona geográfica.

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: