<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zeck&#039;s Blog</title>
	<atom:link href="https://zeck.netliberte.org/feed/" rel="self" type="application/rss+xml" />
	<link>https://zeck.netliberte.org</link>
	<description></description>
	<lastBuildDate>Thu, 25 May 2023 17:37:31 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/2023/01/spacezeck-64x64-1.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Zeck&#039;s Blog</title>
	<link>https://zeck.netliberte.org</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">13064443</site>	<item>
		<title>Sortie orchidées sur Oléron (17)</title>
		<link>https://zeck.netliberte.org/2023/04/27/sortie-orchidees-sur-oleron-17/</link>
					<comments>https://zeck.netliberte.org/2023/04/27/sortie-orchidees-sur-oleron-17/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Thu, 27 Apr 2023 17:36:21 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[botanique]]></category>
		<category><![CDATA[orchidées]]></category>
		<category><![CDATA[wildorchid]]></category>
		<guid isPermaLink="false">https://zeck.netliberte.org/?p=156</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-rich is-provider-instagram wp-block-embed-instagram"><div class="wp-block-embed__wrapper">
<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/Crjfv2cNV_x/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:584px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/p/Crjfv2cNV_x/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/Crjfv2cNV_x/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Loic Vaillant (@zeckfr)</a></p></div></blockquote><script async src="//platform.instagram.com/en_US/embeds.js"></script>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2023/04/27/sortie-orchidees-sur-oleron-17/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">156</post-id>	</item>
		<item>
		<title>Petite sortie orchidophile en Essonne (91)</title>
		<link>https://zeck.netliberte.org/2023/04/23/petite-sortie-orchidophile-en-essonne-91/</link>
					<comments>https://zeck.netliberte.org/2023/04/23/petite-sortie-orchidophile-en-essonne-91/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sun, 23 Apr 2023 10:39:45 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[botanique]]></category>
		<category><![CDATA[orchidées]]></category>
		<category><![CDATA[wildorchid]]></category>
		<guid isPermaLink="false">https://zeck.netliberte.org/?p=108</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-embed is-type-rich is-provider-instagram wp-block-embed-instagram"><div class="wp-block-embed__wrapper">
<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/CrX_vJ_IzCI/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:584px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/p/CrX_vJ_IzCI/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/CrX_vJ_IzCI/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Loic Vaillant (@zeckfr)</a></p></div></blockquote><script async src="//platform.instagram.com/en_US/embeds.js"></script>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2023/04/23/petite-sortie-orchidophile-en-essonne-91/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">108</post-id>	</item>
		<item>
		<title>Ronnie James Dio</title>
		<link>https://zeck.netliberte.org/2023/01/22/ronnie-james-dio/</link>
					<comments>https://zeck.netliberte.org/2023/01/22/ronnie-james-dio/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sun, 22 Jan 2023 15:37:09 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[musique]]></category>
		<guid isPermaLink="false">https://zeck.netliberte.org/?p=81</guid>

					<description><![CDATA[Qui ne connait pas Ronnie James Dio ? Vous ? Vous êtes vraiment sûr que ça ne vous dit rien ? Black Sabbath ? Rainbow ? L&#8217;album The Butterfly Ball and the Grasshopper&#8217;s Feast de Roger Glover ? Un personnage, &#8230; <a href="https://zeck.netliberte.org/2023/01/22/ronnie-james-dio/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Qui ne connait pas Ronnie James Dio ? Vous ? Vous êtes vraiment sûr que ça ne vous dit rien ?</p>



<span id="more-81"></span>



<p class="wp-block-paragraph"><a href="http://fr.wikipedia.org/wiki/Black_Sabbath" target="_blank" rel="noreferrer noopener">Black Sabbath</a> ? <a href="http://fr.wikipedia.org/wiki/Rainbow_(groupe)" target="_blank" rel="noreferrer noopener">Rainbow</a> ? L&rsquo;album <a href="http://fr.wikipedia.org/wiki/The_Butterfly_Ball_and_the_Grasshopper%27s_Feast">The Butterfly Ball and the Grasshopper&rsquo;s Feast</a> de <a href="http://fr.wikipedia.org/wiki/Roger_Glover">Roger Glover</a> ?</p>



<p class="wp-block-paragraph">Un personnage, une voix, un signe de la main&#8230; Des souvenirs&#8230; Allez, regardez la vidéo, elle vous parlera forcément !</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Love Is All" width="584" height="438" src="https://www.youtube.com/embed/oADfmYQWmW8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<figure class="wp-block-embed is-provider-youtube wp-block-embed-youtube"><div class="wp-block-embed__wrapper">
http://www.youtube.com/watch?v=GxzXuzTODEM
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2023/01/22/ronnie-james-dio/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">81</post-id>	</item>
		<item>
		<title>Google Charts API, un exemple amusant</title>
		<link>https://zeck.netliberte.org/2023/01/21/google-charts-api-un-exemple-amusant/</link>
					<comments>https://zeck.netliberte.org/2023/01/21/google-charts-api-un-exemple-amusant/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sat, 21 Jan 2023 18:53:38 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[algo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[google]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=66</guid>

					<description><![CDATA[L&#8217;API Google Charts permet de créer des graphes facilement en forgeant une URL. Cette API peut être exploitée pour faire des choses simples, complexes ou drôles. Voyez ci-dessous !]]></description>
										<content:encoded><![CDATA[
<p style="text-align: justify;">L&rsquo;API <a href="http://code.google.com/apis/chart/" target="_blank" rel="noopener">Google Charts</a> permet de créer des graphes facilement en forgeant une URL. Cette API peut être exploitée pour faire des choses simples, complexes ou drôles. Voyez ci-dessous !</p>


<div style="width: 310px" class="wp-caption aligncenter"><a href="http://sites.google.com/site/e90e50/"><img fetchpriority="high" decoding="async" title="By Roberto Mensa" src="https://chart.googleapis.com/chart?chs=300x225&amp;cht=lxy&amp;chco=224499,3366CC&amp;chds=0,4000,0,2170,0,4000,0,2170&amp;chd=t:0,628,623,598,500,430,461,561,472,397,383,430,506,561,439,517,553,464,400,408,490,620,738,738,804,903,1040,1221,1383,1510,1587,1617,1615,1581,1497,1408,1318,1240,1358,1279,1126,1254,1223,1207,1212,1235,1268,1338,1413,1500,4000|210,210,497,744,749,793,803,800,813,871,896,911,873,858,938,936,916,1020,1208,1385,1571,1726,1821,2029,2127,2163,2166,2121,2044,1952,1862,1775,1697,1650,1643,1677,1735,1782,1625,1593,1538,1570,1376,1132,962,798,633,464,317,210,210|1550,1530,1520,1530,1550,1570,1580,1570,1550|1370,1330,1290,1250,1230,1250,1290,1330,1370&amp;chls=2|2&amp;chm=B,76A4FB,0,0,0&amp;chtt=La+Linea&amp;chts=676767,10.5" alt="By Roberto Mensa" width="300" height="225" /></a><p class="wp-caption-text">By Roberto Mensa</p></div>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2023/01/21/google-charts-api-un-exemple-amusant/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">66</post-id>	</item>
		<item>
		<title>La découverte ou l&#8217;ignorance…</title>
		<link>https://zeck.netliberte.org/2020/12/12/la-decouverte-ou-lignorance/</link>
					<comments>https://zeck.netliberte.org/2020/12/12/la-decouverte-ou-lignorance/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sat, 12 Dec 2020 13:10:54 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[musique]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=6</guid>

					<description><![CDATA[Voilà quelques années maintenant que je remettais au lendemain cet article. Suite à une discussion avec @lecairn, @caroleblancot, @StephLacassagne et @leozarbre, j&#8217;ai eu enfin envie de le finaliser&#8230; Merci à vous, chers twittos ! Ce texte, principalement connu du grand &#8230; <a href="https://zeck.netliberte.org/2020/12/12/la-decouverte-ou-lignorance/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Voilà quelques années maintenant que je remettais au lendemain cet article. Suite à une discussion avec @lecairn, @caroleblancot, @StephLacassagne et @leozarbre, j&rsquo;ai eu enfin envie de le finaliser&#8230;</p>



<p class="wp-block-paragraph">Merci à vous, chers twittos !</p>
</blockquote>



<p class="wp-block-paragraph">Ce texte, principalement connu du grand public par l&rsquo;interprétation qu&rsquo;en fait le groupe <a href="http://fr.wikipedia.org/wiki/Tri_Yann" target="_blank" rel="noreferrer noopener">Tri Yann</a> depuis 1976, est en fait extrait de l&rsquo;essai <em>Comment peut-on être breton, essai sur la démocratie française</em><sup>1</sup> publié par le journaliste <a href="http://fr.wikipedia.org/wiki/Morvan_Lebesque" target="_blank" rel="noreferrer noopener">Morvan Lebesque</a> en 1970. Les deux versions divergent un peu, je vous propose ici de les confronter.</p>



<span id="more-6"></span>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Texte de Tri Yann</strong></td><td><strong>Texte de Morvan Lebesque</strong></td></tr><tr><td>Le breton est-il ma langue maternelle ? Non, je suis né à Nantes où on ne le parle pas&#8230; Suis-je même breton? Vraiment je le crois, mais de pure race ? qu&rsquo;en sais-je et qu&rsquo;importe&#8230; Séparatiste ? Autonomiste !? Régionaliste ?.. <strong>Oui et non, &#8230; différent.</strong> Mais alors vous ne comprenez plus ! Qu&rsquo;appelons-nous être breton ? et d&rsquo;abord, pourquoi l&rsquo;être ?! Français d&rsquo;état civil, je suis nommé français, j&rsquo;assume à chaque instant ma situation de français ! Mon appartenance à la Bretagne n&rsquo;est en revanche qu&rsquo;une qualité facultative que je puis parfaitement renier ou méconnaître&#8230; Je l&rsquo;ai d&rsquo;ailleurs fait, j&rsquo;ai longtemps ignoré que j&rsquo;étais breton&#8230; Français sans problème, il me faut donc vivre la Bretagne en surplus, ou, pour mieux dire, en conscience&#8230; Si je perds cette conscience, la Bretagne cesse d&rsquo;être en moi. Si tous les bretons la perdent, elle cesse absolument d&rsquo;être&#8230; La Bretagne n&rsquo;a pas de papiers; elle n&rsquo;existe <strong>que si</strong> à chaque génération des hommes se reconnaissent bretons ! A cette heure, des enfants naissent en Bretagne&#8230; Seront-ils bretons ? Nul ne le sait. A chacun, l&rsquo;âge venu, la Découverte; ou l&rsquo;ignorance&#8230;</td><td>Le breton est-elle ma langue maternelle ? Non : je suis né à Nantes où on ne le parle pas. <strong>Est-ce que je le parle ? Rarement, et pas assez bien pour l’écrire.</strong> Suis-je même breton ? Vraiment, je le crois<strong> et m’en expliquerai</strong>. Mais de « pure race », qu’en sais-je et qu’importe ? <strong>&#8211; Vous n’êtes donc pas raciste ? &#8211; Ne m’insultez pas. </strong>&#8211; Séparatiste ? Autonomiste ? Régionaliste ? <strong>&#8211; Tout cela, rien de cela. Au-delà.</strong> &#8211; Mais alors, nous ne nous comprenons plus. Qu’appelez-vous breton ? Et d’abord, pourquoi l’être ? Question nullement absurde. Français d’état-civil, je suis nommé français, j’assume à chaque instant ma situation de Français ; mon appartenance à la Bretagne n’est en revanche qu’une qualité facultative que je puis parfaitement renier ou méconnaître. Je l’ai d’ailleurs fait. J’ai longtemps ignoré que j’étais breton.<strong> Je l’ai par moment oublié.</strong> Français sans problème, il me faut donc vivre la Bretagne en surplus ou, pour mieux dire, en conscience : si je perds cette conscience, la Bretagne cesse d’être en moi ; si tous les bretons la perdent, elle cesse absolument d’être. La Bretagne n’a pas de papier. Elle n’existe <strong>que dans la mesure où</strong>, à chaque génération, des hommes se reconnaissent bretons. A cette heure, des enfants naissent en Bretagne. Seront-ils bretons ? Nul ne le sait. A chacun, l’âge venu, la découverte ou l’ignorance.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Je n&rsquo;ai guère la prétention de vous faire une explication de texte, j&rsquo;ai toujours été très mauvais en français. Sachez seulement que ce texte trouve un écho en moi. Il a une saveur toute particulière.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Tri Yann - La Découverte ou l&#039;Ignorance" width="584" height="438" src="https://www.youtube.com/embed/WWGLGG9b2uc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">Je vous engage toutefois à mener une réflexion sur les termes « <a href="http://www.cnrtl.fr/definition/s%C3%A9paratiste" target="_blank" rel="noreferrer noopener">Séparatiste</a>« , « <a href="http://www.cnrtl.fr/definition/autonomiste" target="_blank" rel="noreferrer noopener">Autonomiste</a>« , « <a href="http://www.cnrtl.fr/definition/R%C3%A9gionaliste" target="_blank" rel="noreferrer noopener">Régionaliste</a>« . Ouvrez aussi le cadre de votre réflexion à d&rsquo;autres pays<sup>2</sup> historiques ou politiques que la Bretagne. Un exemple concret ? l&rsquo;Europe est sûrement le plus proche, le plus actuel&#8230;</p>



<p class="wp-block-paragraph"><sup>1</sup> : LEBESQUE, M. : <em>Comment peut-on être Breton ? Essai sur la Démocratie française.</em> Paris, Edition du Seuil, Collection L’Histoire Immédiate, 1970.</p>



<p class="wp-block-paragraph"><sup>2</sup> : Je ferais très certainement un article sur la définition des pays au sens breton du terme. Parce qu&rsquo;à ce terme est associé l&rsquo;histoire du Gwenn A Du, le drapeau breton !</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2020/12/12/la-decouverte-ou-lignorance/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6</post-id>	</item>
		<item>
		<title>Leaflet : création d&#8217;une Polyline</title>
		<link>https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/</link>
					<comments>https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sun, 09 Feb 2014 17:06:00 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[algo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[leaflet]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=9</guid>

					<description><![CDATA[Dans la continuité des micro-tutoriaux précédents sur Leaflet, voyons maintenant comment créer une Polyline, et s&#8217;il est possible d&#8217;en retrouver les points qui la composent. Il s&#8217;agit d&#8217;un préambule au travail sur les traces GPX de mon GPS. En effet, &#8230; <a href="https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignleft"><a href="http://leafletjs.com"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/leafletjs.com/docs/images/logo.png?w=584" alt="Leaflet" title="Leaflet"/></a></figure>
</div>


<p class="wp-block-paragraph">Dans la continuité des micro-tutoriaux précédents sur <a href="http://leafletjs.com/" target="_blank" rel="noreferrer noopener">Leaflet</a>, voyons maintenant comment créer une Polyline, et s&rsquo;il est possible d&rsquo;en retrouver les points qui la composent.</p>



<p class="wp-block-paragraph">Il s&rsquo;agit d&rsquo;un préambule au travail sur les traces GPX de mon GPS. En effet, le rendu de cette trace se fera avec une (ou plusieurs) Polyline(s).</p>



<p class="wp-block-paragraph">Articles précédents :</p>



<ul class="wp-block-list">
<li><a href="https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/">Leaflet : créer votre carte rapidement</a></li>



<li><a href="https://zeck.netliberte.org/2014/02/08/leaflet-creation-massive-de-markers/">Leaflet : création massive de markers</a></li>



<li><a href="https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/">Leaflet : gérer les layers</a></li>
</ul>



<span id="more-9"></span>



<p class="wp-block-paragraph">Une Polyline est un un ensemble de droites tracées entre les points qui la compose. La version la plus simple est évidemment une ligne entre deux points.</p>



<ul class="wp-block-list">
<li><a href="https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/#creation">Création d&rsquo;une Polyline</a></li>



<li><a href="https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/#etendre">Etendre l&rsquo;objet Polyline</a></li>



<li><a href="https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/#code">Code complet</a></li>
</ul>



<h5 class="wp-block-heading">Création d&rsquo;une Polyline</h5>



<p class="wp-block-paragraph">En se basant sur les coordonnées de quelques villes françaises, traçons une première Polyline sur notre carte.</p>



<pre class="wp-block-preformatted">var villes = [
    ["Paris", 48.856578, 2.351828],
    ["Orléans", 47.9025, 1.909],
    ["Tours", 47.393611, 0.689167],
    ["Poitiers", 46.581945, 0.336112],
    ["Bordeaux", 44.837912, -0.579541]
];</pre>



<p class="wp-block-paragraph">Transformons ce tableau d&rsquo;informations en tableau de points géographiques (un couple de coordonnées, au sens Leaflet du terme) et affichons le sur la carte :</p>



<pre class="wp-block-preformatted">function pointsArray(items) {
    var pointsArray = new Array();
    for (var i = 0; i &lt; items.length; i++) {
        var item = items[i];
        pointsArray.push(new L.LatLng(item[1],item[2]));
    }
    return pointsArray;
}

var trajet = new L.Polyline(pointsArray(villes));
map.addLayer(trajet);</pre>



<p class="wp-block-paragraph">Pour le moment, les noms des villes ne sont pas utilisés.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/polyline.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/polyline.png?resize=290%2C290&#038;ssl=1" alt="Polyline" class="wp-image-3002"/></a><figcaption class="wp-element-caption">Polyline</figcaption></figure>
</div>


<p class="wp-block-paragraph">L&rsquo;objet ainsi créé contient notre tableau de coordonnées, et nous pouvons donc placer des markers sur les villes.</p>



<pre class="wp-block-preformatted">function markersArray_fromLatLngs(items, icon) {
    var markers = new L.featureGroup();

    for (var i = 0; i &lt; items.length; i++) {
        var item = items[i];
        marker = new L.marker([item.lat,item.lng], {icon: icon});
        markers.addLayer(marker);
    }

    markers.on('mouseover', function(e){ e.layer.openPopup(); })
           .on('mouseout', function(e){ e.layer.closePopup(); });

    return markers;
}

var cities = markersArray_fromLatLngs(trajet.getLatLngs(), cityIcon);
map.addLayer(cities);</pre>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/polyline2.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/polyline2.png?resize=290%2C290&#038;ssl=1" alt="Polyline + Markers" class="wp-image-3003"/></a><figcaption class="wp-element-caption">Polyline + Markers</figcaption></figure>
</div>


<p class="wp-block-paragraph">Il aurait été possible de se baser sur la table des villes et la fonction « <em>markersArray(items, icon)</em> » utilisée dans l&rsquo;article « <a href="https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/" target="_blank" rel="noreferrer noopener"><em>Leaflet : gérer les layers</em></a>« . Ainsi, nos markers pourraient afficher une infobulle lors du survol de la souris.</p>



<p class="wp-block-paragraph">L&rsquo;idée reste d&rsquo;utiliser l&rsquo;objet Polyline et ses données, il faut donc envisager d&rsquo;étendre les propriétés de l&rsquo;objet Polyline.</p>



<h5 class="wp-block-heading">Etendre l&rsquo;objet Polyline</h5>



<p class="wp-block-paragraph">Il est question de créer un objet qui va intégrer la Polyline telle que créée précédemment et les markers qui la jalonne. Le nouvel objet intégrera les fonctions que nous avions utilisé pour lire la table des villes.</p>



<pre class="wp-block-preformatted">L.mPolyline = L.FeatureGroup.extend({
    initialize: function(items, icon) {
        this._layers = {};
        this.addLayer(new L.Polyline(this._pointsArray(items)));
        this.addLayer(this._markersArray(items, icon));             
    }, 
    _pointsArray: function(items) {
        var pointsArray = new Array();
        for (var i = 0; i &lt; items.length; i++) {
            var item = items[i];
            pointsArray.push(new L.LatLng(item[1],item[2]));
        }
        return pointsArray;
    },
    _markersArray: function(items, icon) {
        var markers = new L.featureGroup();
        for  (var i = 0; i &lt; items.length; i++) {
            var item = items[i];
            marker = new L.marker([item[1],item[2]], {icon: icon}).bindPopup(item[0]);
            markers.addLayer(marker);
        }
        markers.on('mouseover', function(e){ e.layer.openPopup(); })
                     .on('mouseout', function(e){ e.layer.closePopup(); });
        return markers;
    }
});
</pre>



<p class="wp-block-paragraph">Il suffit maintenant d&rsquo;afficher notre Polyline et ses markers ainsi :</p>



<pre class="wp-block-preformatted">var trajet = new L.mPolyline(villes, cityIcon);
map.addLayer(trajet);</pre>



<p class="wp-block-paragraph">Code complet&#8230;<br>Au final, cela donne la page suivante :</p>



<pre class="wp-block-preformatted">&lt;!doctype html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;leaflet-gpx demo&lt;/title&gt;
	&lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /&gt;
	&lt;style&gt; 
		html { height: 100% } body { height: 100%; margin: 0; padding: 0 }
		#map {  width: 600px; height: 480px;  }
	&lt;/style&gt;
	&lt;link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /&gt;
	&lt;script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"&gt;&lt;/script&gt;
	&lt;script type="text/javascript"&gt;
		var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
		var osmAttribution = 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;';
		var villes = [ 
			["Paris", 48.856578, 2.351828], 
			["Orl&amp;eacute;ans", 47.9025, 1.909], 
			["Tours", 47.393611, 0.689167], 
			["Poitiers", 46.581945, 0.336112], 
			["Bordeaux", 44.837912, -0.579541]
		]; 
		var cityIcon = L.icon({
			iconUrl: 'footprint.png',
			iconSize: [32,37],
			iconAnchor: [16,37],
			popupAnchor:  [0,-37] 
		}); 
		L.mPolyline = L.FeatureGroup.extend({
			initialize: function(items, icon) 
				{
					this._layers = {};
					this.addLayer(new L.Polyline(this._pointsArray(items)));
					this.addLayer(this._markersArray(items, icon)); 
				},
				_pointsArray: function(items) 
				{ 
					var pointsArray = new Array();
					for (var i = 0; i &lt; items.length; i++) {
						var item = items[i];
						pointsArray.push(new L.LatLng(item[1],item[2]));
					}
					return pointsArray; 
				},
				_markersArray: function(items, icon) 
				{
					var markers = new L.featureGroup();
					for  (var i = 0; i &lt; items.length; i++) {
						var item = items[i]; 
						marker = new L.marker([item[1],item[2]], {icon: icon}).bindPopup(item[0]); 
						markers.addLayer(marker); 
					} markers.on('mouseover', function(e){ e.layer.openPopup(); }).on('mouseout', function(e){ e.layer.closePopup(); });
					return markers; 
				} 
		}); 
	&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id="map"&gt;&lt;/div&gt;
	&lt;script type="text/javascript"&gt;
		var map = L.map('map').setView([48.856578, 2.351828], 18);
		L.tileLayer(osmUrl, { attribution: osmAttribution }).addTo(map);
		var trajet = new L.mPolyline(villes, cityIcon);
		console.dir(trajet);
		map.addLayer(trajet);
		map.fitBounds(trajet.getBounds());
	&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>



<!doctype html><html>
<head>
	<title>leaflet-gpx demo</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
	<style> 
		html { height: 100% } body { height: 100%; margin: 0; padding: 0 }
		#map {  width: 600px; height: 480px;  }
	</style>
	<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" />
	<script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script>
	<script type="text/javascript">
		var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
		var osmAttribution = 'Map data &copy; <a href="http://www.osm.org">OpenStreetMap</a>';
		var villes = [ 
			["Paris", 48.856578, 2.351828], 
			["Orl&eacute;ans", 47.9025, 1.909], 
			["Tours", 47.393611, 0.689167], 
			["Poitiers", 46.581945, 0.336112], 
			["Bordeaux", 44.837912, -0.579541]
		]; 
		var cityIcon = L.icon({
			iconUrl: 'footprint.png',
			iconSize: [32,37],
			iconAnchor: [16,37],
			popupAnchor:  [0,-37] 
		}); 
		L.mPolyline = L.FeatureGroup.extend({
			initialize: function(items, icon) 
				{
					this._layers = {};
					this.addLayer(new L.Polyline(this._pointsArray(items)));
					this.addLayer(this._markersArray(items, icon)); 
				},
				_pointsArray: function(items) 
				{ 
					var pointsArray = new Array();
					for (var i = 0; i < items.length; i++) {
						var item = items[i];
						pointsArray.push(new L.LatLng(item[1],item[2]));
					}
					return pointsArray; 
				},
				_markersArray: function(items, icon) 
				{
					var markers = new L.featureGroup();
					for  (var i = 0; i < items.length; i++) {
						var item = items[i]; 
						marker = new L.marker([item[1],item[2]], {icon: icon}).bindPopup(item[0]); 
						markers.addLayer(marker); 
					} markers.on('mouseover', function(e){ e.layer.openPopup(); }).on('mouseout', function(e){ e.layer.closePopup(); });
					return markers; 
				} 
		}); 
	</script>
</head>
<body>
	<div id="map"></div>
	<script type="text/javascript">
		var map = L.map('map').setView([48.856578, 2.351828], 18);
		L.tileLayer(osmUrl, { attribution: osmAttribution }).addTo(map);
		var trajet = new L.mPolyline(villes, cityIcon);
		console.dir(trajet);
		map.addLayer(trajet);
		map.fitBounds(trajet.getBounds());
	</script>
</body>
</html>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2014/02/09/leaflet-creation-dune-polyline/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">9</post-id>	</item>
		<item>
		<title>Leaflet : gérer les layers</title>
		<link>https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/</link>
					<comments>https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sat, 08 Feb 2014 16:18:42 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[algo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[leaflet]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=15</guid>

					<description><![CDATA[Après avoir créé une carte Leaflet&#160;(Leaflet, créer votre carte rapidement) et placer des markers (Leaflet : création massive de markers), voyons comment gérer les layers, soit savoir comment changer le fond de carte à la volée ou afficher/masquer les markers &#8230; <a href="https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignleft"><a href="http://leafletjs.com"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/leafletjs.com/docs/images/logo.png?w=584" alt="Leaflet" title="Leaflet"/></a></figure>
</div>


<p class="wp-block-paragraph">Après avoir créé une carte <a href="http://leafletjs.com/" target="_blank" rel="noreferrer noopener">Leaflet</a>&nbsp;(<em><a href="https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/" target="_blank" rel="noreferrer noopener">Leaflet, créer votre carte rapidement</a></em>) et placer des markers (<em><a href="https://zeck.netliberte.org/2014/02/08/leaflet-creation-massive-de-markers/" target="_blank" rel="noreferrer noopener">Leaflet : création massive de markers</a></em>), voyons comment gérer les layers, soit savoir comment changer le fond de carte à la volée ou afficher/masquer les markers qui sont présents sur la carte.</p>



<ul class="wp-block-list">
<li><a href="https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/#carte">Fonds de carte</a></li>



<li><a href="https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/#markers">Groupes de markers</a></li>



<li><a href="https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/#code">Code complet</a></li>
</ul>



<span id="more-15"></span>



<h5 class="wp-block-heading">Fonds de carte</h5>



<p class="wp-block-paragraph">Il est possible de changer de fond de carte à la volée suivant le type de représentation que l&rsquo;on souhaite. Pour des question de lisibilité, de représentation, ou simplement&#8230; pour le fun !</p>



<p class="wp-block-paragraph">Le fond de carte, c&rsquo;est l&rsquo;ensemble des &#8217;tiles&rsquo; qui sont mises à notre disposition par les fournisseurs comme Google Maps, OSM ou Cloud Made.</p>



<p class="wp-block-paragraph">On agira sur la ligne suivante :</p>



<pre class="wp-block-preformatted">L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;' }).addTo(map);</pre>



<p class="wp-block-paragraph">En créant 3 fonds de carte différents :</p>



<pre class="wp-block-preformatted">var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
var osmAttribution = 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;';
var osmTileLayer = L.tileLayer(osmUrl, { attribution: osmAttribution });

var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/841e036a3f194a30bf64e170f94c9e59/997/256/{z}/{x}/{y}.png';
var cloudmadeAttribution = 'Map data &amp;copy; 2011 OpenStreetMap contributors, Imagery &amp;copy; 2011 CloudMade';
var cloudmadeTileLayer = L.tileLayer(cloudmadeUrl, { attribution: cloudmadeAttribution });

var transportURL = 'http://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png';
var transportAttribution = '&amp;copy; &lt;a href="http://openstreetmap.org"&gt;OpenStreetMap&lt;/a&gt; Contributors &amp; &lt;a href="http://thunderforest.com/"&gt;Thunderforest&lt;/a&gt;';
var transportTileLayer = L.tileLayer(transportURL, { attribution: transportAttribution });</pre>



<p class="wp-block-paragraph">Choisissons laquelle afficher lors du chargement de la carte :</p>



<pre class="wp-block-preformatted">var map = L.map('map').setView([48.856578, 2.351828], 18);
osmTileLayer.addTo(map);</pre>



<p class="wp-block-paragraph">Plaçons nos 3 fonds de carte dans un tableau, et indiquons à Leaflet de nous les présenter dans un contrôle situé en haut à droite sur la carte :</p>



<pre class="wp-block-preformatted">var baseMaps = {
    "OSM": osmTileLayer,
    "Transport": transportTileLayer,
    "Cloud Made": cloudmadeTileLayer
};
map.addControl(new L.Control.Layers(baseMaps, {}));</pre>



<p class="wp-block-paragraph"><em>A noter qu&rsquo;il s&rsquo;agit d&rsquo;un « ou exclusif » : il n&rsquo;est pas possible de superposer ces fonds de carte, dans cette configuration.</em></p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/osm.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/osm.png?resize=290%2C290&#038;ssl=1" alt="OSM" class="wp-image-2991"/></a><figcaption class="wp-element-caption">OSM</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/transport.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/transport.png?resize=290%2C290&#038;ssl=1" alt="Transport" class="wp-image-2992"/></a><figcaption class="wp-element-caption">Transport</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/cloudmade.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/cloudmade.png?resize=290%2C290&#038;ssl=1" alt="Cloud Made" class="wp-image-2993"/></a><figcaption class="wp-element-caption">Cloud Made</figcaption></figure>
</div>


<p class="wp-block-paragraph">Il est possible de trouver une liste des fonds de carte disponibles pour Leaflet <a href="https://leanpub.com/leaflet-tips-and-tricks/read#leanpub-auto-tile-servers-that-can-be-used-with-leaflet" target="_blank" rel="noreferrer noopener">ici</a>. Sinon, il existe un plugin Leaflet qui gère cela pour vous : <a href="https://github.com/leaflet-extras/leaflet-providers" target="_blank" rel="noreferrer noopener">leaflet-providers</a>. <a></a></p>



<p class="wp-block-paragraph"><strong>Groupes de markers</strong></p>



<p class="wp-block-paragraph">A l&rsquo;image des fonds de carte, il est possible d&rsquo;utiliser un contrôler pour afficher/masquer des groupes de markers. Par contre, il est ici possible de superposer nos layers.</p>



<p class="wp-block-paragraph">Définissons deux groupes de markers différents&#8230; Ici, 3 monuments de Paris et les 7 gares principales :</p>



<pre class="wp-block-preformatted">var monuments = [
    ["Notre Dame de Paris", 48.853056, 2.349722],
    ["Mus&amp;eacute;e d'Orsay", 48.86, 2.327],
    ["Museum National d'Histoire Naturelle", 48.8422, 2.3564]
];
var gares = [
    ["Gare de Lyon", 48.8448, 2.3735],
    ["Gare d'Austerlitz", 48.8416, 2.3661],
    ["Gare de l'Est", 48.877036, 2.36],
    ["Gare de Bercy", 48.839039, 2.383081],
    ["Gare de Montparnasse", 48.841157, 2.320474],
    ["Gare du Nord", 48.8828, 2.3567],
    ["Gare Saint-Lazare", 48.8763, 2.32388]
];</pre>



<p class="wp-block-paragraph">J&rsquo;ai très légèrement factorisé le code de l&rsquo;article sur les markers &nbsp;et ajouté l&rsquo;intégration d&rsquo;un icône personnalisé :</p>



<pre class="wp-block-preformatted">function markersArray(items, icon) {
    var markers = new L.featureGroup();
    for (var i = 0; i &lt; items.length; i++) {
        var item = items[i];
        marker = new L.marker([item[1],item[2]], {icon: icon}).bindPopup(item[0]);
        markers.addLayer(marker);
    }
    markers.on('mouseover', function(e){ e.layer.openPopup(); })
           .on('mouseout', function(e){ e.layer.closePopup(); });
    return markers;
}

var trainIcon = L.icon({
    iconUrl: 'train.png',
    iconSize: [32,37],
    iconAnchor: [16,37],
    popupAnchor:  [0,-37]
});

var monumentIcon = L.icon({
    iconUrl: 'monument.png',
    iconSize: [32,37],
    iconAnchor: [16,37],
    popupAnchor:  [0,-37]
});

var Monuments = markersArray(monuments, monumentIcon);
var Gares = markersArray(gares, trainIcon);

map.addLayer(Monuments);
map.addLayer(Gares);</pre>



<p class="wp-block-paragraph">Nos deux groupes de markers sont maintenant affichés sur la carte. Associons les dans un tableau pour les ajouter au même contrôle qui gère les fonds de carte.</p>



<pre class="wp-block-preformatted">var overlayMaps = {
    'Monuments':Monuments,
    'Gares':Gares
};

map.addControl(new L.Control.Layers(baseMaps, overlayMaps));</pre>



<p class="wp-block-paragraph">Et afin d&rsquo;afficher tous les markers sur la carte, gérons maintenant la somme des deux « bounds ».</p>



<pre class="wp-block-preformatted">var bounds = Monuments.getBounds();
bounds = bounds.extend(Gares.getBounds());
map.fitBounds(bounds);</pre>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/allmarkers.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/allmarkers.png?resize=290%2C290&#038;ssl=1" alt="Tous les markers" class="wp-image-2996"/></a><figcaption class="wp-element-caption">Tous les markers</figcaption></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/gares.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/gares.png?resize=290%2C290&#038;ssl=1" alt="Les gares" class="wp-image-2997"/></a><figcaption class="wp-element-caption">Les gares</figcaption></figure>
</div>


<h5 class="wp-block-heading">Code complet</h5>



<pre class="wp-block-preformatted">&lt;!doctype html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;leaflet-gpx demo&lt;/title&gt;
        &lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /&gt;
        &lt;style&gt;
            html { height: 100% }
            body { height: 100%; margin: 0; padding: 0 }
            #map { 
                width: 800px;
                height: 480px; 
 }
        &lt;/style&gt;
         &lt;link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /&gt;
         &lt;script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"&gt;&lt;/script&gt;

         &lt;script type="text/javascript"&gt;

             var monuments = [
                ["Notre Dame de Paris", 48.853056, 2.349722],
                ["Mus&amp;eacute;e d'Orsay", 48.86, 2.327],
                ["Museum National d'Histoire Naturelle", 48.8422, 2.3564]
            ];
            var gares = [
                ["Gare de Lyon", 48.8448, 2.3735],
                ["Gare d'Austerlitz", 48.8416, 2.3661],
                ["Gare de l'Est", 48.877036, 2.36],
                ["Gare de Bercy", 48.839039, 2.383081],
                ["Gare de Montparnasse", 48.841157, 2.320474],
                ["Gare du Nord", 48.8828, 2.3567],
                ["Gare Saint-Lazare", 48.8763, 2.32388]
            ];

            function markersArray(items, icon) {
                var markers = new L.featureGroup();
                for (var i = 0; i &lt; items.length; i++) {
                    var item = items[i];
                    marker = new L.marker([item[1],item[2]], {icon: icon}).bindPopup(item[0]);
                    markers.addLayer(marker);
                }
                 markers.on('mouseover', function(e){ e.layer.openPopup(); })
                       .on('mouseout', function(e){ e.layer.closePopup(); });
                return markers;
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div id="map"&gt;&lt;/div&gt;
        &lt;script type="text/javascript"&gt;
            var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
            var osmAttribution = 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;';
            var osmTileLayer = L.tileLayer(osmUrl, { attribution: osmAttribution });

            var cloudmadeUrl = 'http://{s}.tile.cloudmade.com/841e036a3f194a30bf64e170f94c9e59/997/256/{z}/{x}/{y}.png';
            var cloudmadeAttribution = 'Map data &amp;copy; 2011 OpenStreetMap contributors, Imagery &amp;copy; 2011 CloudMade';
            var cloudmadeTileLayer = L.tileLayer(cloudmadeUrl, { attribution: cloudmadeAttribution });

            var transportURL = 'http://{s}.tile.thunderforest.com/transport/{z}/{x}/{y}.png';
            var transportAttribution = '&amp;copy; &lt;a href="http://openstreetmap.org"&gt;OpenStreetMap&lt;/a&gt; Contributors &amp; &lt;a href="http://thunderforest.com/"&gt;Thunderforest&lt;/a&gt;';
            var transportTileLayer = L.tileLayer(transportURL, { attribution: transportAttribution });

            var baseMaps = {
                "OSM": osmTileLayer,
                "Transport": transportTileLayer,
                "Cloud Made": cloudmadeTileLayer
            };

            var map = L.map('map').setView([48.856578, 2.351828], 18);
            osmTileLayer.addTo(map);

            var trainIcon = L.icon({
                iconUrl: 'train.png',
                iconSize: [32,37],
                iconAnchor: [16,37],
                popupAnchor: [0,-37]
            });

            var monumentIcon = L.icon({
                iconUrl: 'monument.png',
                iconSize: [32,37],
                iconAnchor: [16,37],
                popupAnchor: [0,-37]
            });

            var Monuments = markersArray(monuments, monumentIcon);
            var Gares = markersArray(gares, trainIcon);

            map.addLayer(Monuments);
            map.addLayer(Gares);
            var bounds = Monuments.getBounds();
            bounds = bounds.extend(Gares.getBounds());
            map.fitBounds(bounds);

            var overlayMaps = {
                'Monuments':Monuments,
                'Gares':Gares
            };

            map.addControl(new L.Control.Layers(baseMaps, overlayMaps));
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2014/02/08/leaflet-gerer-les-layers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">15</post-id>	</item>
		<item>
		<title>Leaflet : création massive de markers</title>
		<link>https://zeck.netliberte.org/2014/02/08/leaflet-creation-massive-de-markers/</link>
					<comments>https://zeck.netliberte.org/2014/02/08/leaflet-creation-massive-de-markers/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Sat, 08 Feb 2014 10:30:37 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[algo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[leaflet]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=21</guid>

					<description><![CDATA[Dans la continuité de l&#8217;article sur la création d&#8217;une carte Leaflet&#160;(Leaflet, créer votre carte rapidement), voyons maintenant comment créer massivement des markers. En effet, il est rare de créer une carte pour n&#8217;en créer qu&#8217;un seul, et si lorsqu&#8217;il y &#8230; <a href="https://zeck.netliberte.org/2014/02/08/leaflet-creation-massive-de-markers/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignleft"><a href="http://leafletjs.com"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/leafletjs.com/docs/images/logo.png?w=584" alt="Leaflet" title="Leaflet"/></a></figure>
</div>


<p class="wp-block-paragraph">Dans la continuité de l&rsquo;article sur la création d&rsquo;une carte <a href="http://leafletjs.com/" target="_blank" rel="noreferrer noopener">Leaflet</a>&nbsp;(<em><a href="https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/" target="_blank" rel="noreferrer noopener">Leaflet, créer votre carte rapidement</a></em>), voyons maintenant comment créer massivement des markers.</p>



<p class="wp-block-paragraph">En effet, il est rare de créer une carte pour n&rsquo;en créer qu&rsquo;un seul, et si lorsqu&rsquo;il y en a moins d&rsquo;une 10aine, on peut se permettre de les créer unitairement, au delà il vaut mieux travailler avec une boucle qui lit un tableau contenant les markers.</p>



<ul class="wp-block-list">
<li><a href="#creation">Création de markers en série</a></li>



<li><a href="#event">Gestion des événements individualisée</a></li>



<li><a href="#code">Code complet</a></li>
</ul>



<span id="more-21"></span>



<p class="wp-block-paragraph"><a id="creation"></a></p>



<h5 class="wp-block-heading">Création de markers en série</h5>



<p class="wp-block-paragraph">Dans la continuité de notre exemple précédent, voici un tableau de POI (Points of Interest) :</p>



<pre class="wp-block-preformatted">var myItems = [
    ["Notre Dame de Paris", 48.853056, 2.349722],
    ["Musée d'Orsay", 48.86, 2.327],
    ["Muséum National d'Histoire Naturelle", 48.8422, 2.3564]
];</pre>



<p class="wp-block-paragraph">On pourra évidemment en créer bien d&rsquo;autres&#8230;</p>



<p class="wp-block-paragraph">Voyons maintenant la boucle qui va créer les markers sur la carte :</p>



<pre class="wp-block-preformatted">for (var i = 0; i &lt; myItems.length; i++) {
    var item = myItems[i];
    marker = new L.marker([item[1],item[2]]).bindPopup(item[0]).addTo(map);
}</pre>



<p class="wp-block-paragraph">Cela fonctionne parfaitement quel que soit le nombre de markers, mais l&rsquo;ajout un par un sur la carte va rapidement créer un problème de performance. On aura tendance à modifier légèrement le code pour créer un tableau contenant les objets L.marker Leaflet pour les afficher en une seule fois.</p>



<pre class="wp-block-preformatted">var markers = new L.layerGroup();
for (var i = 0; i &lt; myItems.length; i++) {
    var item = myItems[i];
    marker = new L.marker([item[1],item[2]]).bindPopup(item[0]);
    markers.addLayer(marker);
}
map.addLayer(markers);</pre>



<p class="wp-block-paragraph">Chaque marker créé possède son infobulle qui s&rsquo;ouvre quand on clique sur le marker lui même.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/multimarkers.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/multimarkers.png?resize=290%2C290&#038;ssl=1" alt="Miltiples Markers" class="wp-image-2979"/></a></figure>
</div>


<p class="wp-block-paragraph">Si les markers créés sont en dehors de la zone de carte initialisée par la fonction setView, vous devrez dézoomer manuellement pour les voir, ou modifier votre code légèrement.</p>



<pre class="wp-block-preformatted">var markers = new L.featureGroup();
for (var i = 0; i &lt; myItems.length; i++) {
    var item = myItems[i];
    marker = new L.marker([item[1],item[2]]).bindPopup(item[0]);
    markers.addLayer(marker);
}
map.addLayer(markers);
map.fitBounds(markers.getBounds());</pre>



<p class="wp-block-paragraph"><a id="event"></a></p>



<h5 class="wp-block-heading">Gestion des événements individualisée</h5>



<p class="wp-block-paragraph">Par défaut, vos markers réagissent à l&rsquo;événement &lsquo;clic&rsquo;. Pour reprendre la gestion des événements de survol de la souris comme dans l&rsquo;article précédent, voici le code :</p>



<pre class="wp-block-preformatted">markers.on('mouseover', function(e){ e.layer.openPopup(); })
       .on('mouseout', function(e){ e.layer.closePopup(); });</pre>



<p class="wp-block-paragraph"><a id="code"></a></p>



<h5 class="wp-block-heading">Code complet</h5>



<pre class="wp-block-preformatted">&lt;!doctype html&gt;
&lt;html&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;leaflet demo&lt;/title&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html { height: 100% }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body { height: 100%; margin: 0; padding: 0 }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #map { 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width: 800px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height: 480px; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"&gt;&lt;/script&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="map"&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var map = L.map('map').setView([48.856578, 2.351828], 18);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;' }).addTo(map);

                        var myItems = [
                            ["Notre Dame de Paris", 48.853056, 2.349722],
                            ["Musée d'Orsay", 48.86, 2.327],
                            ["Museum National d'Histoire Naturelle", 48.8422, 2.3564]
            ];

                        var markers = new L.featureGroup();
            for (var i = 0; i &lt; myItems.length; i++) {
                var item = myItems[i];
                marker = new L.marker([item[1],item[2]]).bindPopup(item[0]);
                markers.addLayer(marker);
            }

            markers.on('mouseover', function(e){ e.layer.openPopup(); })
                   .on('mouseout', function(e){ e.layer.closePopup(); });
            map.addLayer(markers);
            map.fitBounds(markers.getBounds());
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/body&gt;
&lt;/html&gt;</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2014/02/08/leaflet-creation-massive-de-markers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">21</post-id>	</item>
		<item>
		<title>Leaflet : créer votre carte rapidement</title>
		<link>https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/</link>
					<comments>https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Fri, 07 Feb 2014 13:40:55 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[algo]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[leaflet]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=26</guid>

					<description><![CDATA[En recherchant comment manipuler des fichiers au format GPX avec l&#8217;API Google Maps, j&#8217;avais repéré il y a déjà des mois de cela un module qui semblait permettre de lire un GPX natif et de le placer sur une carte. &#8230; <a href="https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="alignleft"><a href="http://leafletjs.com"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/leafletjs.com/docs/images/logo.png?w=584" alt="Leaflet" title="Leaflet"/></a></figure>
</div>


<p class="wp-block-paragraph">En recherchant comment manipuler des fichiers au format <a href="http://fr.wikipedia.org/wiki/GPX_%28format_de_fichier%29" target="_blank" rel="noreferrer noopener">GPX</a> avec l&rsquo;<a href="https://developers.google.com/maps/documentation/javascript/" target="_blank" rel="noreferrer noopener">API Google Maps</a>, j&rsquo;avais repéré il y a déjà des mois de cela un module qui semblait permettre de lire un GPX natif et de le placer sur une carte. Sauf qu&rsquo;il s&rsquo;agissait d&rsquo;un plugin pour <a href="http://leafletjs.com/" target="_blank" rel="noreferrer noopener">Leaflet</a>, plutôt que pour Google Maps.</p>



<p class="wp-block-paragraph">J&rsquo;ai donc décidé de m&rsquo;intéresser à cette API, et j&rsquo;ai été ravi de la rapidité d&rsquo;implémentation. Avant de rentrer plus en détail sur mon travail avec les GPX, voici donc un morceau de code pour implémenter une carte Leaflet ! Cela se résume en quelques lignes de HTML et de Javascript.</p>



<p class="wp-block-paragraph"><em>Ce qui suit ne se veut pas être un tutoriel complet sur Leaflet, juste une amorce pour les curieux qui voudrait comparer avec Google Maps.</em></p>



<ul class="wp-block-list">
<li><a href="#fond_de_carte">Mise en place d&rsquo;un fond de carte</a></li>



<li><a href="#marker">Création d&rsquo;un premier Marker</a></li>
</ul>



<span id="more-26"></span>



<p class="wp-block-paragraph"><a id="fond_de_carte"></a></p>



<h5 class="wp-block-heading">Mise en place d&rsquo;un fond de carte</h5>



<p class="wp-block-paragraph">Pour bénéficier de l&rsquo;API javascript Leaflet (aujourd&rsquo;hui en V0.7.2), il faut commencer par intégrer l&rsquo;API elle-même, ainsi que la CSS qui l&rsquo;accompagne :</p>



<pre class="wp-block-preformatted">&lt;link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /&gt;
&lt;script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"&gt;&lt;/script&gt;</pre>



<p class="wp-block-paragraph">Vient ensuite le positionnement de la carte dans la page HTML via un div appelé « map », et son initialisation en javascript:</p>



<pre class="wp-block-preformatted">&lt;div id="map"&gt;&lt;/div&gt;
&lt;script type="text/javascript&gt;
       <em>//création d'une carte centrée sur Paris ([48.856578, 2.351828]),
       // avec un zoom de niveau '13'.</em> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var map = L.map('map').setView([48.856578, 2.351828], 13);
       <em>// Association d'un fond de carte provenant d'OSM
       // Accessoirement, ajout d'un copyright facultatif '{ attribution: ...}</em>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
              attribution: 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;' 
       }).addTo(map);
&lt;/script&gt;</pre>



<p class="wp-block-paragraph">Voilà, vous venez de créer votre première carte Leaflet !</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/leaflet.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/leaflet.png?resize=290%2C290&#038;ssl=1" alt="Leaflet" class="wp-image-2965"/></a><figcaption class="wp-element-caption">Carte Leaflet centrée sur Paris</figcaption></figure>
</div>


<p class="wp-block-paragraph">Moyennant un peu de CSS, et un code complet, voici donc la page dans sa totalité :</p>



<pre class="wp-block-preformatted">&lt;!doctype html&gt;
&lt;html&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;head&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;leaflet demo&lt;/title&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html { height: 100% }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; body { height: 100%; margin: 0; padding: 0 }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #map { 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; width: 800px;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; height: 480px; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"&gt;&lt;/script&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/head&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;body&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id="map"&gt;&lt;/div&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript"&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var map = L.map('map').setView([48.856578, 2.351828], 13);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: 'Map data &amp;copy; &lt;a href="http://www.osm.org"&gt;OpenStreetMap&lt;/a&gt;' }).addTo(map);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/body&gt;
&lt;/html&gt;</pre>



<h5 class="wp-block-heading">Création d&rsquo;un premier Marker</h5>



<p class="wp-block-paragraph">Après l&rsquo;initialisation de notre carte, créons maintenant un marker pour montrer Notre Dame de Paris :</p>



<pre class="wp-block-preformatted">var marker = L.marker([48.853056, 2.349722]).addTo(map);</pre>



<p class="wp-block-paragraph">Ajoutons y une popup qui réagit quand la souris passe sur le marker :</p>



<pre class="wp-block-preformatted">marker.bindPopup("Notre Dame de Paris");
marker.on('mouseover', function(e){ marker.openPopup(); });
marker.on('mouseout', function(e){ marker.closePopup(); })</pre>



<p class="wp-block-paragraph">Ou si vous êtes un peu plus joueur :</p>



<pre class="wp-block-preformatted">marker.bindPopup("Notre Dame de Paris")
      .on('mouseover', function(e){ marker.openPopup(); })
      .on('mouseout', function(e){ marker.closePopup(); });</pre>



<p class="wp-block-paragraph">Ce qui doit donner une carte proche de l&rsquo;image ci-dessous (zoomée) :</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/NDdP.png?ssl=1"><img data-recalc-dims="1" height="290" width="290" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/NDdP.png?resize=290%2C290&#038;ssl=1" alt="Notre Dame de Paris" class="wp-image-2970"/></a></figure>
</div>


<p class="wp-block-paragraph">Aujourd&rsquo;hui, Leaflet me paraît plus simple que Google Maps pour implémenter le fond de carte et la gestion des markers. Et si je ne maîtrise pas tout à fait le sujet, j&rsquo;ai tout de même pu intégrer le module GPX que j&rsquo;évoquais au début de l&rsquo;article et y ajouter quelques fonctionnalités qui m&rsquo;intéressaient, mais cela fera l&rsquo;objet d&rsquo;autres articles.</p>



<p class="wp-block-paragraph">Je vous laisse pousser votre propre recherche pour aller plus loin sur les bases de Leaflet en jetant un coup d&rsquo;oeil aux <a href="http://leafletjs.com/examples.html" target="_blank" rel="noreferrer noopener">tutoriaux disponibles</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2014/02/07/leaflet-creer-votre-carte-rapidement/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">26</post-id>	</item>
		<item>
		<title>La vanille de Tahiti</title>
		<link>https://zeck.netliberte.org/2012/10/08/la-vanille-de-tahiti/</link>
					<comments>https://zeck.netliberte.org/2012/10/08/la-vanille-de-tahiti/#respond</comments>
		
		<dc:creator><![CDATA[Zeck]]></dc:creator>
		<pubDate>Mon, 08 Oct 2012 08:53:16 +0000</pubDate>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[botanique]]></category>
		<category><![CDATA[orchidées]]></category>
		<category><![CDATA[rhum]]></category>
		<category><![CDATA[vanille]]></category>
		<guid isPermaLink="false">http://zeck.netliberte.org/?p=29</guid>

					<description><![CDATA[La vanille de Tahiti, ou Vanilla Tahitensis, est un cultivar&#160;de&#160;Vanilla planifolia.&#160;Mais ses qualités aromatiques particulières l’ont fait longtemps considérer comme une espèce distincte. La production de cette vanille est bien moindre que pour la vanille Bourbon, mais elle possède des &#8230; <a href="https://zeck.netliberte.org/2012/10/08/la-vanille-de-tahiti/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">La vanille de Tahiti, ou <em>Vanilla Tahitensis</em>, est un cultivar&nbsp;de&nbsp;<em>Vanilla planifolia</em>.&nbsp;Mais ses qualités aromatiques particulières l’ont fait longtemps considérer comme une espèce distincte.</p>



<p class="wp-block-paragraph">La production de cette vanille est bien moindre que pour la vanille Bourbon, mais elle possède des caractéristiques qui la rendent très intéressante.</p>


<div class="wp-block-image">
<figure class="alignleft"><a href="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/1087.jpg?ssl=1"><img data-recalc-dims="1" height="300" width="224" decoding="async" src="https://i0.wp.com/zeck.netliberte.org/wp-content/uploads/1087.jpg?resize=224%2C300&#038;ssl=1" alt="Vanille de Tahiti séchant sur un linge" class="wp-image-2696"/></a><figcaption class="wp-element-caption">Vanille de Tahiti séchant sur un linge<br>Crédits : Jérôme Picard</figcaption></figure>
</div>


<p class="wp-block-paragraph">Contrairement à la vanille traditionnelle (Vanilla planifolia), la gousse n&rsquo;explose pas pour libérer les grains lorsqu&rsquo;elle arrive à maturité. Elle peut donc atteindre sa pleine maturité avant d&rsquo;être récoltée et séchée.</p>



<p class="wp-block-paragraph">De plus, au contraire des autres espèces exploitées commercialement, la vanille de Tahiti contient de l&rsquo;héliotropine, un parfum très capiteux &nbsp;utlisé dans les cosmétiques. L&rsquo;acide para-hydrobenzoïque est aussi en très forte proportion dans cette vanille. La vanilline est par contre en quantité beaucoup plus faible.</p>



<p class="wp-block-paragraph">L&rsquo;intérêt pour la vanille de Tahiti a redoublé depuis que des chercheurs ont trouvé dans les gousses de l&rsquo;éthylvanilline, une molécule au parfum 3 à 4 fois plus intense que la vanilline. Mais la concentration reste trop faible pour concurrencer la molécule synthétique.</p>



<p class="wp-block-paragraph">&nbsp;La méthode de fécondation artificielle des gousses a été importée à Tahiti en 1850, après sa découverte en 1841 sur l&rsquo;île de la Réunion (voir l&rsquo;article sur la vanille Bourbon).</p>



<p class="wp-block-paragraph">Voir aussi :</p>



<ul class="wp-block-list">
<li><a href="https://zeck.netliberte.org/2011/08/08/la-vanille/">La vanille, qu’est-ce que c’est ?</a></li>



<li><a href="https://zeck.netliberte.org/2012/10/07/la-vanille-bourbon/">La vanille Bourbon</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://zeck.netliberte.org/2012/10/08/la-vanille-de-tahiti/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">29</post-id>	</item>
	</channel>
</rss>
