{"id":856,"date":"2019-07-08T13:54:22","date_gmt":"2019-07-08T11:54:22","guid":{"rendered":"https:\/\/geekcommunicant.com\/blog\/?p=856"},"modified":"2019-07-08T13:54:23","modified_gmt":"2019-07-08T11:54:23","slug":"carte-controle-calques-leaflet","status":"publish","type":"post","link":"https:\/\/geekcommunicant.com\/blog\/2019\/07\/08\/carte-controle-calques-leaflet\/","title":{"rendered":"Carte avec contr\u00f4le de calques avec Leaflet"},"content":{"rendered":"\n<p>Cette semaine encore, nous allons encore voir la cr\u00e9ation\nd\u2019une carte interactive avec la librairie Leaflet.<\/p>\n\n\n\n<p>La carte pr\u00e9sent\u00e9e aujourd\u2019hui utilise les groupes de calques,\nainsi que le contr\u00f4le de calques, afin de r\u00e9aliser une carte historique de la\nligne 2 du tramway d\u2019\u00cele-de-France.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Bref historique<\/h1>\n\n\n\n<p>Afin d\u2019expliquer le d\u00e9coupage des donn\u00e9es et les diff\u00e9rents\ncalques, un bref historique de la ligne doit \u00eatre fait.<\/p>\n\n\n\n<p>Jusqu\u2019en 1993, une partie des voies emprunt\u00e9es par la ligne\nactuelle \u00e9tait exploit\u00e9e par la SNCF (le tramway actuel est exploit\u00e9 par la\nRATP) sous le nom de \u00ab&nbsp;Ligne de Puteaux \u00e0 Issy-Plaine&nbsp;\u00bb.<\/p>\n\n\n\n<p>En 1997, entre en service le T2, qui empreinte le m\u00eame\nparcours, plus une extension au nord. Toutes les stations de l\u2019ancienne ligne\nsous r\u00e9utilis\u00e9es, certaines changeant de nom, et 4 nouvelles sont cr\u00e9\u00e9es.<\/p>\n\n\n\n<p>En 2006, une section du parcours est d\u00e9vi\u00e9e.<\/p>\n\n\n\n<p>En 2009, la ligne est prolong\u00e9e une premi\u00e8re fois au sud,\navec l\u2019ajout de 4 nouvelles stations.<\/p>\n\n\n\n<p>En 2012, la ligne est prolong\u00e9e une deuxi\u00e8me fois vers le\nnord, rajoutant 7 nouvelles stations.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h1 class=\"wp-block-heading\">Les donn\u00e9es<\/h1>\n\n\n\n<p>Les <a rel=\"noreferrer noopener\" aria-label=\"trac\u00e9s (opens in a new tab)\" href=\"https:\/\/opendata.stif.info\/explore\/dataset\/traces-du-reseau-ferre-idf\/information\/\" target=\"_blank\">trac\u00e9s<\/a> et les <a href=\"https:\/\/opendata.stif.info\/explore\/dataset\/emplacement-des-gares-idf\/information\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"coordonn\u00e9es des stations (opens in a new tab)\">coordonn\u00e9es des stations<\/a> proviennent du site d\u2019Open data d<a rel=\"noreferrer noopener\" aria-label=\"\u2019\u00cele-de-France Mobilit\u00e9s (opens in a new tab)\" href=\"https:\/\/opendata.stif.info\/\" target=\"_blank\">\u2019\u00cele-de-France Mobilit\u00e9s<\/a>. Pour le trac\u00e9 de la voie avant la d\u00e9viation de 2006, je l\u2019ai \u00e9dit\u00e9 moi-m\u00eame, \u00e0 l\u2019aide du site <a rel=\"noreferrer noopener\" aria-label=\"geojson.io (opens in a new tab)\" href=\"http:\/\/geojson.io\" target=\"_blank\">geojson.io<\/a>.<\/p>\n\n\n\n<p>Pour \u00e9viter la r\u00e9p\u00e9tition des trac\u00e9s, je les ai s\u00e9par\u00e9s en 5\nfichiers GeoJSON distincts&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La ligne originale<\/li><li>La premi\u00e8re extension au nord au moment de la\ncr\u00e9ation de la ligne de tramway<\/li><li>La ligne d\u00e9vi\u00e9e en 2006 (modification du trac\u00e9\nde la ligne originale)<\/li><li>Le prolongement au sud<\/li><li>Le prolongement au nord.<\/li><\/ul>\n\n\n\n<p>Concernant les stations, comme il y a eu r\u00e9utilisation des\nanciennes stations avec certaines changeant de nom, celle-ci ont \u00e9t\u00e9 r\u00e9p\u00e9t\u00e9es. \u00c0\nla fin on se retrouve avec 4 diff\u00e9rents fichiers GeoJSON&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Les arr\u00eats de la ligne originale<\/li><li>Les arr\u00eats de la ligne de tramway avant\nextension<\/li><li>Les arr\u00eats de la premi\u00e8re extension<\/li><li>Les arr\u00eats de la deuxi\u00e8me extension.<\/li><\/ul>\n\n\n\n<h1 class=\"wp-block-heading\">Mise en place de la carte de base<\/h1>\n\n\n\n<p>Le niveau de zoom et le centre de cette carte ont \u00e9t\u00e9\nd\u00e9termin\u00e9s afin de montrer l\u2019ensemble du parcours initial de la ligne.<\/p>\n\n\n\n<p>On initialise donc la map&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nvar center = &#x5B;48.847886021323966, 2.258634567260742];\nvar zoom = 12;\n\nvar map = L.map(&#039;map&#039;,{\n\tcenter: center,\n\tzoom: zoom\n});\n<\/pre><\/div>\n\n\n<p>Pour cette carte j\u2019ai d\u00e9cid\u00e9 d\u2019utiliser le fond de carte Wikimedia,\nque l\u2019on rajoute comme suit&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nL.tileLayer(&#039;https:\/\/maps.wikimedia.org\/osm-intl\/{z}\/{x}\/{y}{r}.png&#039;, {\n\tattribution: &#039;&lt;a href=&quot;https:\/\/wikimediafoundation.org\/wiki\/Maps_Terms_of_Use&quot;&gt;Wikimedia maps&lt;\/a&gt; | Map data \u00a9 &lt;a href=&quot;http:\/\/openstreetmap.org\/copyright&quot;&gt;OpenStreetMap contributors&lt;\/a&gt;&#039;,\n\tminZoom: 1,\n\tmaxZoom: 19\n}).addTo(map);\n<\/pre><\/div>\n\n\n<!--nextpage-->\n\n\n\n<h1 class=\"wp-block-heading\">Ajout des donn\u00e9es GeoJSON<\/h1>\n\n\n\n<p>Comme pour la carte pr\u00e9sent\u00e9e pr\u00e9c\u00e9demment (carte des rues\nsans m\u00e9gots) les donn\u00e9es seront charg\u00e9es en utilisant le plugin Leaflet AJAX.<\/p>\n\n\n\n<p>Pour chaque \u00e9tape de la vie de la ligne (voir les dates\ndonn\u00e9es dans la partie d\u2019historique) il y aura deux calques&nbsp;: un pour la\nligne et un pour les stations.<\/p>\n\n\n\n<p>La fonction de style des lignes, appel\u00e9e par l\u2019option \u00ab&nbsp;style&nbsp;\u00bb\ndu calque, est la suivante&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nfunction styleLine() {\n\treturn {color: &#039;#a0006e&#039;};\n}\n<\/pre><\/div>\n\n\n<p>Pour les stations, la fonction de style, appel\u00e9e par l\u2019option\n\u00ab&nbsp;pointToLayer&nbsp;\u00bb, est comme suit&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nfunction styleStops(latlng) {\n\treturn L.circleMarker(latlng,{\n\t\tfillOpacity: 1,\n\t\tfillColor: &#039;#fff&#039;,\n\t\tcolor: &#039;#000&#039;,\n\t\tweight: 2,\n\t\tradius: 6\n\t});\n}\n<\/pre><\/div>\n\n\n<p>Les calques se cr\u00e9ent alors avec le code suivant&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\n\/\/ Calque de la ligne originelle\nvar line_pip = new L.GeoJSON.AJAX(&#039;trace-puteaux_issy-plaine.geojson&#039;, {\n\tstyle: function(feature) {\n\t\treturn styleLine();\n\t}\n});\n\n\/\/ Calque des arr\u00eats originels\nvar stops_pip = new L.GeoJSON.AJAX(&#039;gares-puteaux_issy-plaine.geojson&#039;, {\n\tpointToLayer: function(feat, latlng) {\n\t\treturn styleStops(latlng);\n\t}\n});\n<\/pre><\/div>\n\n\n<p>Aux calques de stations, on rajoute \u00e9galement un tooltip,\nqui affichera le nom de la station, qui est stock\u00e9 dans la propri\u00e9t\u00e9 \u00ab&nbsp;name&nbsp;\u00bb\nde la <em>feature<\/em>, avec la m\u00e9thode \u00ab&nbsp;bindTooltip&nbsp;\u00bb&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nvar stops_pip = new L.GeoJSON.AJAX(&#039;gares-puteaux_issy-plaine.geojson&#039;, {\n\tpointToLayer: function(feat, latlng) {\n\t\treturn styleStops(latlng);\n\t}\n}).bindTooltip(function(layer) {\n\treturn layer.feature.properties.name\n});\n<\/pre><\/div>\n\n\n<p>Pour les stages de la vie de la ligne n\u00e9cessitant l\u2019utilisation du contenu de plusieurs fichiers GeoJSON, on utilise la technique de prendre des p\u2019tits bouts d\u2019trucs pour les assembler ensemble (<a href=\"https:\/\/www.youtube.com\/watch?v=zU97FbKVH_c\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"\ud83c\udfb6 (opens in a new tab)\">\ud83c\udfb6<\/a>).<\/p>\n\n\n\n<p>Cela se fait en utilisant la m\u00e9thode \u00ab&nbsp;addUrl&nbsp;\u00bb\ndes calques cr\u00e9\u00e9s&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nvar line_init = new L.GeoJSON.AJAX(&#039;trace-puteaux_issy-plaine.geojson&#039;, {\n\tstyle: function(feature) {\n\t\treturn styleLine();\n\t}\n});\n\nline_init.addUrl(&#039;trace-nord_init.geojson&#039;);\n<\/pre><\/div>\n\n\n<h1 class=\"wp-block-heading\">Cr\u00e9ation des groupes de calques<\/h1>\n\n\n\n<p>Un groupe de calques se d\u00e9clare simplement en pr\u00e9cisant dans\nun array les calques \u00e0 utiliser&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nvar pip = L.layerGroup(&#x5B;line_pip, stops_pip]);\n<\/pre><\/div>\n\n\n<p>L\u2019ordre dans l\u2019array correspond \u00e0 l\u2019ordre dans lequel les\ncalques seront rendus, donc les calques les plus \u00ab&nbsp;bas&nbsp;\u00bb sur l\u2019axe Z doivent\n\u00eatre indiqu\u00e9s en premier.<\/p>\n\n\n\n<p>On rajoute ensuite le groupe correspondant au trac\u00e9 de la ligne Puteaux \u2013 Issy-Plaine \u00e0 la carte&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\npip.addTo(map);\n<\/pre><\/div>\n\n\n<h1 class=\"wp-block-heading\">Cr\u00e9ation du contr\u00f4le des calques<\/h1>\n\n\n\n<p>La fonction de cr\u00e9ation du contr\u00f4le prend 3 objets en entr\u00e9e&nbsp;:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Un objet contenant des calques s\u00e9lectionnables par\ndes boutons radio<\/li><li>Un autre objet contenant des calques s\u00e9lectionnables\npar des cases \u00e0 cocher<\/li><li>Un objet d\u2019options.<\/li><\/ul>\n\n\n\n<p>Dans notre cas, les deux premiers objets sont vides, et le troisi\u00e8me ne contient qu\u2019un seul r\u00e9glage, indiquant que le contr\u00f4le doit toujours \u00eatre affich\u00e9 \u00ab&nbsp;d\u00e9pli\u00e9&nbsp;\u00bb :<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: jscript; gutter: false; title: ; notranslate\" title=\"\">\nvar control = L.control.layers({},{},{collapsed:false}).addTo(map);\n<\/pre><\/div>\n\n\n<p>Une fois le contr\u00f4le cr\u00e9\u00e9 et rajout\u00e9 \u00e0 la carte, on lui ajoute les diff\u00e9rents groupes de calques, en pr\u00e9cisant pour chacun le texte \u00e0 utiliser dans le contr\u00f4le&nbsp;:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ncontrol.addBaseLayer(pip, &#039;Puteaux \u2013 Issy-Plaine&#039;);\ncontrol.addBaseLayer(init, &#039;Initial&#039;);\ncontrol.addBaseLayer(dev_2006, &#039;2006&#039;);\ncontrol.addBaseLayer(extension_1, &#039;Premi\u00e8re extension&#039;);\ncontrol.addBaseLayer(extension_2, &#039;Deuxi\u00e8me extension&#039;);\n<\/pre><\/div>\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>Et voil\u00e0, maintenant vous avez une carte historique, avec\ndes tooltips&nbsp;!<\/p>\n\n\n\n<p>Comme d\u2019habitude, la version finale de cette carte est disponible sur <a href=\"https:\/\/geekcommunicant.com\/demos\/carte-interactive-leaflet-controle-calques.html\">mon site<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cette semaine encore, nous allons encore voir la cr\u00e9ation d\u2019une carte interactive avec la librairie Leaflet. La carte pr\u00e9sent\u00e9e aujourd\u2019hui utilise les groupes de calques, ainsi que le contr\u00f4le de calques, afin de r\u00e9aliser une carte historique de la ligne &hellip; <a href=\"https:\/\/geekcommunicant.com\/blog\/2019\/07\/08\/carte-controle-calques-leaflet\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[19],"tags":[14,45],"class_list":["post-856","post","type-post","status-publish","format-standard","hentry","category-javascript","tag-carte-interactive","tag-leaflet"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2IoOb-dO","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":860,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/07\/15\/carte-interactive-openlayers-controle-calques\/","url_meta":{"origin":856,"position":0},"title":"Carte interactive OpenLayers avec contr\u00f4le de calques","author":"geekc","date":"15\/07\/2019","format":false,"excerpt":"Apr\u00e8s avoir r\u00e9alis\u00e9 une carte historique de la ligne 2 du tramway d\u2019\u00cele-de-France avec Leaflet (voir le tutoriel), je me suis attaqu\u00e9 \u00e0 la cr\u00e9ation de cette m\u00eame carte avec OpenLayers. Bien que plus complet sur certains points, OpenLayers n\u2019inclus pas nativement deux fonctionnalit\u00e9s utilis\u00e9es dans la carte\u00a0: Le contr\u00f4le\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":808,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/06\/11\/carte-interactive-metro-paris-leaflet\/","url_meta":{"origin":856,"position":1},"title":"Carte interactive du m\u00e9tro de Paris avec Leaflet","author":"geekc","date":"11\/06\/2019","format":false,"excerpt":"Si on vous parle de solution pour int\u00e9grer une carte sur votre site, la premi\u00e8re qui vous vient \u00e0 l\u2019esprit est surement Google Maps. Mais il existe plusieurs solutions open-source et gratuites. Je vous ai d\u00e9j\u00e0 parl\u00e9 d\u2019OpenLayers, avec laquelle j\u2019ai d\u00e9j\u00e0 refait une carte r\u00e9alis\u00e9e pr\u00e9c\u00e9demment avec jQuery. Mais\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":832,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/06\/17\/carte-interactive-metro-paris-openlayers\/","url_meta":{"origin":856,"position":2},"title":"Carte interactive du m\u00e9tro de Paris avec OpenLayers","author":"geekc","date":"17\/06\/2019","format":false,"excerpt":"Apr\u00e8s vous avoir cr\u00e9\u00e9 une carte interactive du m\u00e9tro de Paris avec la librairie Leaflet (voir mon pr\u00e9c\u00e9dent article), j\u2019ai d\u00e9cid\u00e9 de recr\u00e9er cette carte avec l\u2019autre libraire majeure de cartographie en ligne\u00a0: OpenLayers (que j\u2019ai d\u00e9j\u00e0 utilis\u00e9e pour ma carte utilisant un fond statique). Donn\u00e9es utilis\u00e9es Les donn\u00e9es utilis\u00e9es\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":835,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/06\/24\/carte-interactive-rues-sans-megots-leaflet\/","url_meta":{"origin":856,"position":3},"title":"Carte interactive des rues sans m\u00e9gots avec Leaflet","author":"geekc","date":"24\/06\/2019","format":false,"excerpt":"Cette carte interactive des rues sans m\u00e9gots de Paris a \u00e9t\u00e9 r\u00e9alis\u00e9e suite \u00e0 la suite de la consultation de la page d\u2019actualit\u00e9s de la ville de Paris concernant cette action de propret\u00e9, qui ne contenait qu\u2019une image pour pr\u00e9senter la cartographie des diff\u00e9rentes rues concern\u00e9es par cette op\u00e9ration. Sources\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1271,"url":"https:\/\/geekcommunicant.com\/blog\/2024\/11\/11\/marqueur-personnalise-leaflet\/","url_meta":{"origin":856,"position":4},"title":"Un marqueur personnalis\u00e9 avec Leaflet","author":"geekc","date":"11\/11\/2024","format":false,"excerpt":"Lors de mon tutoriel sur la carte du m\u00e9tro de Paris avec Leaflet, j\u2019ai d\u00e9j\u00e0 personnalis\u00e9 les marqueurs de cette carte, mais comme dans le cadre du tutoriel c\u2019\u00e9tait assez secondaire, je n\u2019ai pas d\u00e9taill\u00e9 ce point. Aujourd\u2019hui est venu le temps de revenir sur la mani\u00e8re d\u2019utiliser nos propres\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":848,"url":"https:\/\/geekcommunicant.com\/blog\/2019\/07\/01\/carte-interactive-rues-sans-megots-openlayers\/","url_meta":{"origin":856,"position":5},"title":"Carte interactive des rues sans m\u00e9gots avec OpenLayers","author":"geekc","date":"01\/07\/2019","format":false,"excerpt":"Bon, je suppose que vous commencez \u00e0 avoir l\u2019habitude que je vous pr\u00e9sente la mani\u00e8re de cr\u00e9er une carte interactive \u00e0 l\u2019aide des deux librairies majeures OpenLayers et Leaflet. Apr\u00e8s avoir rapidement cr\u00e9\u00e9 la carte des rues et sections de rue concern\u00e9es par l\u2019op\u00e9ration \u00ab\u00a0Des rues sans m\u00e9gots\u00a0\u00bb avec Leaflet,\u2026","rel":"","context":"Dans &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/geekcommunicant.com\/blog\/category\/javascript\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/comments?post=856"}],"version-history":[{"count":0,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/posts\/856\/revisions"}],"wp:attachment":[{"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/media?parent=856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/categories?post=856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/geekcommunicant.com\/blog\/wp-json\/wp\/v2\/tags?post=856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}