<?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>neogeo &#187; TileCache</title>
	<atom:link href="http://www.neogeo-online.net/blog/archives/tag/tilecache/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neogeo-online.net</link>
	<description>SIG, OpenSource et Web 2.0</description>
	<lastBuildDate>Wed, 08 Feb 2012 11:54:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mapserver et GDAL, duo magique</title>
		<link>http://www.neogeo-online.net/blog/archives/283/</link>
		<comments>http://www.neogeo-online.net/blog/archives/283/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 11:26:29 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[GeoHacks]]></category>
		<category><![CDATA[Web mapping]]></category>
		<category><![CDATA[GDAL]]></category>
		<category><![CDATA[Mapserver]]></category>
		<category><![CDATA[OSM]]></category>
		<category><![CDATA[TileCache]]></category>
		<category><![CDATA[WMS]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/?p=283</guid>
		<description><![CDATA[La dernière version de GDAL, la 1.7.1, améliore encore l&#8217;utilisation de sources de données distantes de type WMS. La documentation reste toutefois succinte et ne dévoile pas les possibilités offertes par les &#171;&#160;minidrivers&#160;&#187;. Rappelons le principe de base : il s&#8217;agit de pouvoir considérer une ressource distante (WMS, TMS) comme une source de données GDAL [...]]]></description>
			<content:encoded><![CDATA[<p>La dernière version de GDAL, la 1.7.1, améliore encore l&#8217;utilisation de sources de données distantes de type WMS. La <a href="http://www.gdal.org/frmt_wms.html" target="_blank">documentation</a> reste toutefois succinte et ne dévoile pas les possibilités offertes par les &laquo;&nbsp;minidrivers&nbsp;&raquo;. Rappelons le principe de base : il s&#8217;agit de pouvoir considérer une ressource distante (WMS, TMS) comme une source de données GDAL standard et de pouvoir la manipuler comme s&#8217;il s&#8217;agissait d&#8217;un raster en local. Ca peut déjà rendre service avec le WMS. Mais l&#8217;intérêt principal réside en sa capacité à exploiter des ressources tuilées. Qui n&#8217;a jamais été frustré de ne pas pouvoir exploiter un service WMS-C ou TMS car la projection proposée ne correspondait pas à son besoin ? Les &laquo;&nbsp;minidrivers&nbsp;&raquo; permettent de contourner cet obstacle. Comment ? Assez simplement en fait. GDAL va considérer le résultat que vous lui demandez (étendue géographique, projection&#8230;), récupérer les tuiles correspondantes, en découper le superflu,  les assembler en une seule image et reprojeter le tout dans ce que vous aurez demandé.  La configuration de l&#8217;accès au service se fait via un petit fichier XML <span style="text-decoration: line-through;">simple</span> à renseigner :</p>
<pre>&lt;GDAL_WMS&gt;
  &lt;Service name="WMS"&gt; --&gt; Description du type de service (WMS, TMS...)
    &lt;Version&gt;1.1.1&lt;/Version&gt; --&gt; Version du service
    &lt;ServerUrl&gt;http://labs.metacarta.com/wms-c/Basic.py?&lt;/ServerUrl&gt;
                    --&gt; Url d'accès au service
      &lt;Layers&gt;basic&lt;/Layers&gt; --&gt; Couches à récupérer
  &lt;/Service&gt;
  &lt;DataWindow&gt; --&gt; Configuration plus générale de la données distante
    &lt;UpperLeftX&gt;-180.0&lt;/UpperLeftX&gt; --&gt; Sur ces quatres lignes, la bbox
    &lt;UpperLeftY&gt;90.0&lt;/UpperLeftY&gt;
    &lt;LowerRightX&gt;180.0&lt;/LowerRightX&gt;
    &lt;LowerRightY&gt;-90.0&lt;/LowerRightY&gt;
    &lt;TileLevel&gt;19&lt;/TileLevel&gt; --&gt; Le nombre de niveaux dans le cache
    &lt;TileCountX&gt;2&lt;/TileCountX&gt; --&gt; Le nombre de tuiles en X à la plus
                                   faible résolution (niveau 0)
    &lt;TileCountY&gt;1&lt;/TileCountY&gt; --&gt; Le nombre de tuiles en Y à la plus
                                   faible résolution (niveau 0)
  &lt;/DataWindow&gt;
  &lt;Projection&gt;EPSG:4326&lt;/Projection&gt; --&gt; Projection de la source de données
  &lt;BlockSizeX&gt;256&lt;/BlockSizeX&gt; --&gt; Largeur des tuiles
  &lt;BlockSizeY&gt;256&lt;/BlockSizeY&gt; --&gt; Hauteur des tuiles
  &lt;BandsCount&gt;3&lt;/BandsCount&gt; --&gt; Canaux de couleur dans l'image
                                 (ici, 3 pour RGB)
&lt;/GDAL_WMS&gt;</pre>
<p>Avec ces informations, GDAL se retrouve capable de traiter la ressource distante comme une donnée locale. Mais ce n&#8217;est pas tout. MapServer pouvant utiliser un tel fichier de configuration XML comme source de données d&#8217;un LAYER, on peut connecter le service distant à un contexte MapServer particulier, et créer un service WMS non tuilé exploitant des données distantes tuilées. Pratique pour les outils SIG bureautiques par exemple, qui restent incapables d&#8217;exploiter le WMS-C !</p>
<p>La configuration d&#8217;un tel LAYER dans MapServer est assez basique :</p>
<pre>LAYER
 NAME test_wms_c
 DATA "wms_c.xml"
 METADATA
   "ows_title"    "Couche WMS-C réassemblée"
 END
 TYPE raster
 PROCESSING "OVERSAMPLE_RATIO=1" --&gt; Ne pas récupérer
                                     plus de tuiles que
                                     nécessaire (directive pour GDAL)
 PROCESSING "RESAMPLE=BILINEAR" --&gt; rééchantillonner l'image
 STATUS ON
 PROJECTION
 "init=epsg:4326"
 END
END</pre>
<p>On peut alors reprojeter la ressource initiale, ainsi que l&#8217;exploiter sur des échelles intermédiaires non prévues dans le tuilage. Attention quand-même à ne pas trop en faire, car les tuiles reprojetées et rééchantillonnées ne seront pas forcément très belles à voir. L&#8217;idéal reste quand-même de conserver au moins la projection initiale.</p>
<p>En résumé nous avons donc :</p>
<pre>  ressource distante tuilée, définie sur certaines échelles
                             et une projection spécifique
     |
     |
  GDAL : calcule les requêtes à effectuer,
         récupère les tuiles, les assemble,
         reprojette si demandé,
         découpe si nécessaire
     |
     |
  MapServer : publie la nouvelle ressource pseudo-locale
              en toute liberté (projection, échelles...) mais
              avec une qualité du rendu potentiellement
              dégradée (en fonction des transformations effectuées).</pre>
<p>Pour les obsessionnels, oui, on peut aussi mettre en cache la ressource MapServer locale. Mais pas besoin de TileCache pour cela. Les &laquo;&nbsp;minidrivers&nbsp;&raquo; intègrent un mécanisme de cache qui permet à GDAL de stocker localement les tuiles récupèrées et ainsi de pouvoir les réutiliser plus tard. Pour ce faire, il suffit de rajouter un bloc &laquo;&nbsp;cache&nbsp;&raquo; dans le fichier XML (voir la doc pour cela).</p>
<p>Mais je sens déjà la question venir chez tous les habitués des caches&#8230; Comment GDAL fait-il pour déterminer les résolutions et la grille à utiliser ? Ah, bonne question. Pour les résolutions, autant le dire tout de suite, il suppose unilatéralement que chaque niveau vaut la moitié du précédent, ou que chaque tuile se subdivise en quatre si vous préférez. C&#8217;est l&#8217;approche standard, mais si on vous demande du 25k, 20k,15k,10k,5k, ça ne va pas être possible.</p>
<p>Pour les limites de la grille, l&#8217;exemple plus haut se base sur une grille standard WGS sur le monde entier, et le TileCount permet de calculer l&#8217;emprise des tuiles du premier niveau, puis des niveaux suivants. Pour des emprises plus spécifiques, on peut aussi utiliser TileX et TileY, qui représentent des valeurs à ajouter pour gérer un décalage de la grille sans toucher à l&#8217;extent globale.</p>
<p>Les domaines d&#8217;application sont nombreux. On peut citer d&#8217;emblée :</p>
<ul>
<li>L&#8217;intégration de données tuilées dans des clients non prévus pour cela</li>
<li>La reprojection de données tuilées</li>
<li>L&#8217;utilisation de données tuilées à des zooms spécifiques non disponibles</li>
<li>L&#8217;alignement des grilles de deux ressources tuilées configurées différemment</li>
<li>L&#8217;exploitation en pur WMS de données lourdes à générer (Open Street Map par exemple)</li>
<li>Et sans doute bien d&#8217;autres problèmes d&#8217;exploitation que l&#8217;on rencontre.</li>
</ul>
<p>Ainsi, ce petit exemple illustre bien, une fois de plus, les étonnantes possiblités offertes par MapServer et GDAL quand ils sont utilisés de concert. Plus que le strict respect des normes, c&#8217;est la liberté qu&#8217;ils donnent aux utilisateurs pour résoudre leurs problèmes qui est précieuse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/283/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TileCache : attention aux MetaTiles !</title>
		<link>http://www.neogeo-online.net/blog/archives/263/</link>
		<comments>http://www.neogeo-online.net/blog/archives/263/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 11:35:26 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[GeoHacks]]></category>
		<category><![CDATA[Web mapping]]></category>
		<category><![CDATA[TileCache]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/?p=263</guid>
		<description><![CDATA[Il est bien commode lors de la génération d&#8217;un cache tuilé avec TileCache d&#8217;utiliser le mode MetaTile permettant d&#8217;envoyer des requêtes correspondant à quelques centaines de tuiles d&#8217;un coup, qui sont ensuite redécoupées par TileCache. Cette opération est effectuée par le module PIL. Malheureusement, celui-ci et son implémentation dans TileCache ont quelques défauts qui peuvent [...]]]></description>
			<content:encoded><![CDATA[<p>Il est bien commode lors de la génération d&#8217;un cache tuilé avec <a href="http://tilecache.org/" target="_blank">TileCache</a> d&#8217;utiliser le mode MetaTile permettant d&#8217;envoyer des requêtes correspondant à quelques centaines de tuiles d&#8217;un coup, qui sont ensuite redécoupées par TileCache. Cette opération est effectuée par le module PIL. Malheureusement, celui-ci et son implémentation dans TileCache ont quelques défauts qui peuvent aboutir à la dégradation des images faites en MetaTile comparativement à celles générées individuellement.</p>
<p>Le premier défaut concerne de JPEG. La valeur de compression à utiliser n&#8217;est pas précisée dans le code et <a href="http://docs.python.org/library/jpeg.html" target="_blank">PIL</a> prend donc sa valeur par défaut de 75 %. L&#8217;image finale via MetaTile est donc  différente de celle issue de la source de données. Si le serveur WMS lui-même effectue une compression de 75 %, celle effectuée par PIL est vraiment de trop pour la qualité. Ce problème se règle néanmoins facilement, en changeant le code de Layer.py,en ajoutant ces deux lignes après la ligne 406 :</p>
<blockquote><p>elif self.extension == &#8216;jpeg&#8217;:</p>
<blockquote><p>subimage.save(</p>
<blockquote><p>buffer,<br />
self.extension,<br />
quality=95,<br />
optimize=True</p></blockquote>
<p>)</p></blockquote>
</blockquote>
<p>﻿Le niveau de qualité de 95 % correspond en effet à &laquo;&nbsp;pas de compression&nbsp;&raquo;. A 100 % il  n&#8217;y a pas non plus de quantization des couleurs, et l&#8217;image est alors plus grosse que l&#8217;originale.<br />
Le deuxième problème est plus embêtant. Il s&#8217;agit du format PNG-8bits, dont les palettes ne sont pas correctement restituées par PIL quand l&#8217;image a été générée en mode QUANTIZE ON. Pas de solution pour l&#8217;instant dans TileCache, malgré des tests faits avec PythonMagick plutôt que PIL. L&#8217;idée est donc d&#8217;utiliser du PNG 24bits, et de faire la quantization en post-traitement, avec <a href="http://pngnq.sourceforge.net/">pngnq</a> par exemple et une tâche cron traitant nuitamment les fichiers créés dans la journée.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/263/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MapServer, substitution de variable et mise en cache.</title>
		<link>http://www.neogeo-online.net/blog/archives/181/</link>
		<comments>http://www.neogeo-online.net/blog/archives/181/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 14:35:26 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[News of the GeoWorld]]></category>
		<category><![CDATA[Mapserver]]></category>
		<category><![CDATA[TileCache]]></category>
		<category><![CDATA[WMS]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/?p=181</guid>
		<description><![CDATA[Vous le savez sans doute, MapServer permet de réaliser du &#171;&#160;runtime substitution&#160;&#187;, soit de la substitution dynamique de variable à l&#8217;exécution. En clair, votre requête, CGI ou WMS (ce qui revient peu ou prou au même), intègre un paramètre complémentaire dont la valeur va être interprétée au sein du fichier .map. Pour être plus clair, [...]]]></description>
			<content:encoded><![CDATA[<p>Vous le savez sans doute, MapServer permet de réaliser du <a href="http://mapserver.org/cgi/runsub.html" target="_blank">&laquo;&nbsp;runtime substitution&nbsp;&raquo;</a>, soit de la substitution dynamique de variable à l&#8217;exécution. En clair, votre requête, CGI ou WMS (ce qui revient peu ou prou au même), intègre un paramètre complémentaire dont la valeur va être interprétée au sein du fichier .map.</p>
<p>Pour être plus clair, imaginons que vous  cartographiez les trajets routiers effectués par des utilisateurs. Chaque utilisateur ne doit voir que ses propres trajets parce qu&#8217;on est pas chez Big Brother. En rajoutant un paramètre user_id à la requête envoyée à MapServer, on peut filtrer le contenu renvoyé par le fichier .map. La chaîne SQL de récupération des données devient alors :</p>
<p>DATA &laquo;&nbsp;the_geom from trajets WHERE user_id = %user_id%&nbsp;&raquo;</p>
<p>C&#8217;est tout simple donc. En intégrant entre pourcentages le même paramètre que celui envoyé dans la requête, MapServer lui substitue la valeur associée, et le contenu renvoyé est ainsi filtré. On peut aussi ajouter des expressions régulières pour valider les valeurs envoyées et éviter une bonne grosse SQL injection.</p>
<p>Tout cela est connu et très pratique. Ca tord un peu le coup à l&#8217;aspect normalisé quand c&#8217;est utilisé en WMS, mais les normes ça sert aussi à être dépassé. Néanmoins, il reste un obstacle à la mise en cache des résultats. TileCache par exemple, qui joue un rôle de proxy, ne fait suivre au serveur WMS que les attributs de la norme WMS, et génère alors une erreur car %user_id% sans rien y subsitituer n&#8217;est pas utilisable en SQL. C&#8217;est pourtant pratique de mettre aussi ce type de résultat en cache.</p>
<p>Mais il y a une solution ! <a href="http://www.aoos.org/">L&#8217;Alaska Ocean Observation System</a> publie un <a href="https://db.aoos.org/wiki/index.php/AOOS_OpenLayers#AOOS_Upgrades">patch</a> qui permet de faire suivre au travers de TileCache n&#8217;importe quel attribut complémentaire pour peu qu&#8217;il soit déclaré dans le tilecache.cfg (fichier de configuration du cache). Ils l&#8217;ont fait pour faire du WMS-T (WMS temporel, enrichi d&#8217;une variable temporelle pour récupérer des observations par exemple), et étendu à tout attribut complémentaire, ce qui mérite d&#8217;être salué.</p>
<p>Une des complications impliquée par ce genre de techique est la multiplication des arborescence, puisqu&#8217;un cache spécifique sera créé pour chaque valeur du paramètre. Avec des milliers d&#8217;utilisateurs dans mon exemple, ça peut rapidement poser problème. Mais pourquoi alors ne pas utiliser un cache mémoire (Tilecache avec MemCache), d&#8217;une taille pré-définie ? Avec quelques giga-octets, on pourra y stocker un bon nombre de tuiles, sans jamais surcharger le système. Les plus récemment créées remplaceront les plus anciennes quand le cache sera plein. Cette méthode s&#8217;adapte aussi assez bien au temps (presque) réel, puisqu&#8217;on peut paramétrer le durée de vie des données stockées par MemCache. Pour un suivi de conditions de circulation (bouchons&#8230;), on peut ainsi quand-même profiter d&#8217;un cache qui dure le temps de la validité de la donnée. Mais même 10 minutes, si de nombreux utilisateurs se connectent, c&#8217;est un considérable allégement de la charge système.</p>
<p>Petit résumé :</p>
<p>Dans OpenLayers :</p>
<pre style="padding-left: 30px;">layer = new OpenLayers.Layer.WMS("Couche dynamique en cache",
"http://serveur.com/tilecache/",
{layers: 'layer_test',format:'PNG',user_id:myUserId},
{isBaseLayer:true,visibility:true});</pre>
<p>on a donc surchargé la définition de la couche avec un paramètre user_id qui prend la valeur de la variable javascript myUserId.</p>
<p>Dans Tilecache.cfg :</p>
<p style="padding-left: 30px;">on ajoute à la définition du layer WMS : extra_params=user_id</p>
<p>Dans le MapFile :</p>
<p style="padding-left: 30px;">On intègre le paramètre à la chaîne DATA (ou FILTER, ou EXPRESSION, ou CONNECTION selon les besoins) : DATA &laquo;&nbsp;the_geom FROM trajets WHERE user_id = %user_id%&nbsp;&raquo;</p>
<p style="padding-left: 30px;">on ajoute une ligne dans le bloc METADATA de la couche pour valider le user_id:</p>
<p style="padding-left: 60px;">&#8216;user_id_validation_string&#8217; <span>&#8216;^[0-9]{1,2}$&#8217; qui impose un entier fait de deux chiffres au maximum.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/181/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Des tuiles en PHP</title>
		<link>http://www.neogeo-online.net/blog/archives/145/</link>
		<comments>http://www.neogeo-online.net/blog/archives/145/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 15:31:18 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[News of the GeoWorld]]></category>
		<category><![CDATA[TileCache]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/?p=145</guid>
		<description><![CDATA[Un nouvel outil OpenSource est disponible pour générer un tuilage d&#8217;une ressource WMS. Après TileCache, en Python, et GeoWebCache, en Java, voici PHPGeoTiles, pour les adeptes du PHP. L&#8217;originalité, outre le fait qu&#8217;il soit écrit en PHP, vient de sa capacité à stocker le tuilage dans Google App Engine, ce qui rendra vos tuiles beaucoup [...]]]></description>
			<content:encoded><![CDATA[<p>Un nouvel outil OpenSource est disponible pour générer un tuilage d&#8217;une ressource WMS. Après <a href="http://www.tilecache.org/" target="_blank">TileCache</a>, en Python, et <a href="http://geowebcache.org/trac" target="_blank">GeoWebCache</a>, en Java, voici <a href="http://www.geowebdeveloper.com/2009/01/11/phpgeotiles-for-google-app-engine-project-name-changed/" target="_blank">PHPGeoTiles</a>, pour les adeptes du PHP.</p>
<p>L&#8217;originalité, outre le fait qu&#8217;il soit écrit en PHP, vient de sa capacité à stocker le tuilage dans Google App Engine, ce qui rendra vos tuiles beaucoup plus disponibles que sur votre propre serveur puisqu&#8217;elles bénéficieront de l&#8217;infrastructure Google.</p>
<p>via <a href="http://feeds.spatiallyadjusted.com/~r/SpatiallyAdjusted/~3/508528938/" target="_blank">James Fee GIS Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/145/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mieux comprendre les tuilages</title>
		<link>http://www.neogeo-online.net/blog/archives/127/</link>
		<comments>http://www.neogeo-online.net/blog/archives/127/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 13:57:37 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[GeoHacks]]></category>
		<category><![CDATA[TileCache]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/?p=127</guid>
		<description><![CDATA[Voir c&#8217;est comprendre, ou du moins mieux comprendre. Cette page réalisée par Klokan Pietr Pridal permet de bien visualiser les grilles de tuilage utilisées en Spherical Mercator, que ce soit en TMS, Google ou QuadTree de Microsoft VirtualEarth. Chaque pyramide découpe le monde Spherical Mercator selon la même grille, seule change la manière de nommer [...]]]></description>
			<content:encoded><![CDATA[<p>Voir c&#8217;est comprendre, ou du moins mieux comprendre. <a href="http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/" target="_blank">Cette page réalisée par Klokan Pietr Pridal</a> permet de bien visualiser les grilles de tuilage utilisées en Spherical Mercator, que ce soit en TMS, Google ou QuadTree de Microsoft VirtualEarth.</p>
<p>Chaque pyramide découpe le monde Spherical Mercator selon la même grille, seule change la manière de nommer les tuiles. On remarquera donc l&#8217;inversion de l&#8217;axe des Y entre le système Google et le TMS (il faut bien faire travailler les développeurs), et le fait que seul le système quadtree puisse s&#8217;affranchir de l&#8217;information &laquo;&nbsp;niveau de zoom&nbsp;&raquo; puisqu&#8217;il l&#8217;intègre naturellement : c&#8217;est le nombre de chiffres du numéro de la dalle.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/127/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quelques tuiles pour l&#039;hiver</title>
		<link>http://www.neogeo-online.net/blog/archives/114/</link>
		<comments>http://www.neogeo-online.net/blog/archives/114/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 21:47:36 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[GeoHacks]]></category>
		<category><![CDATA[GDAL]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TileCache]]></category>
		<category><![CDATA[TMS]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/?p=114</guid>
		<description><![CDATA[L&#8217;intérêt de tuiler un jeu de données raster, c&#8217;est-à-dire de préparer des imagettes multi-échelles qui seront exploitées nativement dans une application de webmapping n&#8217;est plus à démontrer. Dans le cadre du Google Summer of Code 2008, Klokan Petr Pridal vient d&#8217;ajouter un nouveau module de ce type aux outils GDAL : gdal2tiles. Son intérêt principal [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;intérêt de tuiler un jeu de données raster, c&#8217;est-à-dire de préparer des imagettes multi-échelles qui seront exploitées nativement dans une application de webmapping n&#8217;est plus à <a title="Article sur TileCache" href="http://www.neogeo-online.net/blog/archives/84/" target="_self">démontrer</a>. Dans le cadre du <a href="http://code.google.com/soc/2008/" target="_blank">Google Summer of Code 2008</a>, Klokan Petr Pridal vient d&#8217;ajouter un nouveau module de ce type aux outils <a href="http://www.gdal.org/" target="_blank">GDAL</a> : <a href="http://www.klokan.cz/projects/gdal2tiles/" target="_blank">gdal2tiles</a>.</p>
<p>Son intérêt principal est de pouvoir exploiter directement une image existante (ECW, TIFF, MrSid, JPEG, JPEG2000 et PNG) sans passer par le relai d&#8217;un serveur WMS par exemple comme TileCache. Une arborescence est alors créée répondant aux principes du TMS (<a title="Les spécifications du TMS" href="http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification" target="_blank">Tile Mapping Service</a>). Publiée dans un répertoire web, elle est alors directement exploitable par les client TMS tels qu&#8217;OpenLayers.</p>
<p>Mais ce n&#8217;est pas tout. Klokan a également inclus des options spécifiques à la création de tuiles pour GoogleMaps (en projection sphérique Mercator donc) ou GoogleEarth (en WGS 84). Qui plus est, l&#8217;application génère automatiquement, pour peu qu&#8217;on lui demande, des fichiers html pour une mise en ligne immédiate. <a title="Exemple sous GoogleMaps" href="http://www.staremapy.cz/soc/samplemap/googlemaps.html">Simple</a> mais <a title="Exemple sous OpenLayers" href="http://www.staremapy.cz/soc/samplemap/openlayers.html" target="_blank">efficace</a>, même dans <a title="Exemple dans GoogleEarth" href="http://www.maptiler.org/example-usgs-drg-grand-canyon-gtiff/usgs-drg-grand-canyon.kml" target="_blank">GoogleEarth</a> qui exploite les <a title="Doc sur les SuperOverlays" href="http://code.google.com/apis/kml/documentation/kml_21tutorial.html#superoverlays" target="_blank">SuperOverlays</a> déjà disponible avec <a href="http://tilecache.org">TileCache</a> !</p>
<p style="text-align: left;">Mais ce n&#8217;est pas tout ! Klokan a également pensé à ceux d&#8217;entre nous qui ne sont jamais arrivés à faire une simple conversion ogr2ogr de Shapefile en MapInfo&#8230; Il prépare <a title="Le site de MapTiler" href="http://www.maptiler.org/" target="_blank">MapTiler</a>, une interface  graphique pilotant gdal2tiles pour générer ses tuiles en faisant clic clic clic ! Si c&#8217;est pas gentil ça !</p>
<p style="text-align: left;">Pour les autres, voici les quelques options glanées dans la <a title="La doc" href="http://trac.osgeo.org/gdal/wiki/UserDocs/Gdal2Tiles" target="_blank">documentation</a> :</p>
<pre class="wiki">gdal2tiles.py [-title "Title"] [-publishurl http://yourserver/dir/]
              [-nogooglemaps] [-noopenlayers] [-nokml]
              [-googlemapskey KEY] [-forcekml] [-v]
               input_file [output_dir]
-title : le titre pour les metadata xml, les pages web et le KML
-publishurl : URL de publication du répertoire contenant les tuiles
-nogooglemaps : pas de génération de page GoogleMaps
-noopenlayers : pas de génération de page OpenLayers
-nokml : pas de génération de KML
-googlemapskey : votre clé GM pour l'utilisation de la page html GoogleMaps
-forcekml : forcer la génération du KML
-v : mode verbeux.
input_file : fichier à traiter
output_dir : répertoire de création des tuiles</pre>
<p>Il faut bien noter que gdal2tiles.py est un module Python, et que GDAL doit donc avoir été compilé avec l&#8217;option &#8211;enable-python.</p>
<p>Source : gdal-dev mailing list</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/114/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>neogeo fait son show&#8230;</title>
		<link>http://www.neogeo-online.net/blog/archives/93/</link>
		<comments>http://www.neogeo-online.net/blog/archives/93/#comments</comments>
		<pubDate>Sun, 20 Apr 2008 12:31:42 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[News of the GeoWorld]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[GDAL]]></category>
		<category><![CDATA[Mapserver]]></category>
		<category><![CDATA[OGR]]></category>
		<category><![CDATA[OpenLayers]]></category>
		<category><![CDATA[TileCache]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/blog/archives/93/</guid>
		<description><![CDATA[Entre le 22 et le 25 avril, à l&#8217;occasion de la &#171;&#160;Semaine Internationale des Applications Spatiales&#171;&#160;, ou Toulouse Space Show pour les intimes, une application réalisée par Neogeo pour le compte du Grand Toulouse va être présentée au public sur le stand du Grand Toulouse. Cette application est une maquette opérationnelle de ce qui deviendra [...]]]></description>
			<content:encoded><![CDATA[<p>Entre le 22 et le 25 avril, à l&#8217;occasion de la &laquo;&nbsp;<a title="Le site officiel de l'événement" href="http://www.navigation-satellites-toulouse.com/" target="_blank">Semaine Internationale des Applications Spatiales</a>&laquo;&nbsp;, ou Toulouse Space Show pour les intimes, une application réalisée par Neogeo pour le compte du Grand Toulouse va être présentée au public sur le <a title="Le communiqué de presse du Grand Toulouse" href="http://www.navigation-satellites-toulouse.com/spip.php?article579&amp;lang=fr" target="_blank">stand du Grand Toulouse</a>. Cette application est une maquette opérationnelle de ce qui deviendra la plate-forme Toulouse Open de mutualisation et de partage de données.</p>
<p><a title="Vue de l’interface" href="http://www.neogeo-online.net/blog/wp-content/uploads/2008/04/gt.png"></a></p>
<p style="text-align: center"><a title="Vue de l’interface" href="http://www.neogeo-online.net/blog/wp-content/uploads/2008/04/gt.png"><img src="http://www.neogeo-online.net/blog/wp-content/uploads/2008/04/gt.thumbnail.png" border="0" alt="Vue de l’interface" /></a></p>
<p>Pour la réaliser, dans un délai très serré, j&#8217;ai mis en oeuvre ce que j&#8217;estime être le meilleur des technologies OpenSource : un back-office en python, s&#8217;appuyant sur le framework <a title="Le framework Django" href="http://www.djangoproject.com/" target="_blank">Django</a> couplé à une (petite) base de données PostgreSQL, un serveur WMS/WFS avec <a href="http://mapserver.gis.umn.edu/" target="_blank">MapServer,</a> une pincée de <a href="http://www.gdal.org/" target="_blank">GDAL/OGR</a> pour la manipulation des données, un serveur de cache avec <a href="http://www.tilecache.org" target="_blank">TileCache,</a> et bien sûr côté client la dernière version d&#8217;<a href="http://www.openlayer.org" target="_blank">OpenLayers</a> et quelques composants <a href="http://mootools.net/" target="_blank">MooTools</a> pour les menus. L&#8217;intérêt principal de cette architecture est le faible couplage des éléments entre eux. En utilisant des standard d&#8217;échange (WMS, XML, JSON&#8230;) chaque élément peut être remplacé facilement par un équivalent pour peu qu&#8217;il propose les mêmes entrées et sorties. Les données cartographiques sont directement exploitées dans leur format originel, en MapInfo .TAB ou en ECW, afin de faciliter les tâches de mise à jour, qui se font ainsi par simple remplacement des fichiers.</p>
<p>Au niveau fonctionnel, l&#8217;application propose visualisation, téléchargement, reprojection, changement de format sur une cinquantaine de couches de données différentes, dont une orthophotographie à 12.5 cm, le parcellaire cadastral, un Modèle Numérique d&#8217;Elévation (avec export 3D vers GoogleEarth !) le tout filtré selon le profil de l&#8217;utilisateur et les territoires qui lui sont ouverts. Quelqu&#8217;un peut ainsi avoir le droit de &laquo;&nbsp;voir&nbsp;&raquo; une couche sur l&#8217;ensemble de l&#8217;agglomération, mais ne pouvoir en télécharger qu&#8217;une partie. Les utilisateurs peuvent aussi intégrer des ressources WMS externes, ou uploader leurs propres données vers la plateforme. Après validation par l&#8217;administrateur, celles-ci deviennent alors visibles par tous.</p>
<p>Le principal défi a été de proposer quelque chose de parfaitement opérationnel en un délai très bref (moins de 30 jours). Pour le relever, le recours à Django s&#8217;est révélé être un choix particulièrement judicieux tant la rapidité de développement dans cet environnement et la stabilité du résultat sont impressionnantes. J&#8217;en ai par contre peu utilisé les templates, afin de privilégier l&#8217;évolutivité et l&#8217;autonomie du client. Ainsi la plupart des échanges se font en JSON, notamment l&#8217;initialisation de la liste des couches à intégrer dans OpenLayer.<br />
Autre gros avantages de l&#8217;utilisation de Django, c&#8217;est la constitution quasi-automatique d&#8217;un module d&#8217;administration très complet. A partir de quelques formulaires, l&#8217;administrateur peut ajouter des couches, tout en spécifiant leurs conditions d&#8217;accès (droits utilisateurs en visualisation/export), d&#8217;affichage (AGG ou PNG, tuilage ou pas, niveau de transparence par défaut&#8230;) ou encore le contenu des métadonnées (qui se basent sur template ISO-19139 minimaliste).</p>
<p>Le but à moyen terme, après avoir décontextualisé certains aspects liés aux demandes spécifiques du Grand Toulouse, est aussi de placer cette solution en OpenSource, afin de pouvoir en faire profiter le plus grand nombre.  A suivre donc. Si vous passez par Toulouse cette semaine, venez faire un tour du côté du centre des congrès Pierre Baudis, ou n&#8217;hésitez pas à me contacter directement pour toute information complémentaire.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/93/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Optimisation de TileCache</title>
		<link>http://www.neogeo-online.net/blog/archives/84/</link>
		<comments>http://www.neogeo-online.net/blog/archives/84/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 17:59:14 +0000</pubDate>
		<dc:creator>Guillaume</dc:creator>
				<category><![CDATA[GeoHacks]]></category>
		<category><![CDATA[Optimisation & performances]]></category>
		<category><![CDATA[Web mapping]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Mapserver]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TileCache]]></category>
		<category><![CDATA[WMS]]></category>

		<guid isPermaLink="false">http://www.neogeo-online.net/archives/84/</guid>
		<description><![CDATA[TileCache est un logiciel qui permet de créer un cache local d&#8217;une ressource WMS locale ou distante (du point de vue d&#8217;un serveur), afin d&#8217;en optimiser l&#8217;accès. Il est d&#8217;une simplicité déconcertante et d&#8217;une efficacité redoutable. Si l&#8217;installation et la mise en route sont faciles, il faut quand-même faire quelques réglages pour obtenir des performances [...]]]></description>
			<content:encoded><![CDATA[<p><strong> </strong><a title="Le site de tileCache" href="http://www.tilecache.org/" target="_blank"><strong>TileCache</strong></a> est un logiciel qui permet de créer un cache local d&#8217;une ressource WMS locale ou distante (du point de vue d&#8217;un serveur), afin d&#8217;en optimiser l&#8217;accès. Il est d&#8217;une simplicité déconcertante et d&#8217;une efficacité redoutable. Si l&#8217;installation et la mise en route sont faciles, il faut quand-même faire quelques réglages pour obtenir des performances optimales. Je vous propose donc un petit résumé de ces étapes, inspiré d&#8217;un <a title="Tutoriel TileCache" href="http://docs.codehaus.org/display/GEOSDOC/TileCache+Tutorial" target="_blank">tutoriel</a> en anglais et de mon expérience personnelle.</p>
<ol type="I">
<li>
<p style="margin-bottom: 0cm" align="justify"><strong>L&#8217;installation</strong></p>
</li>
</ol>
<p align="justify">Simplissime ! Récupérez une archive des sources sur le site  de tilecache (<a href="http://www.tilecache.org/">http://www.tilecache.org/</a>), et décompressez-la dans un répertoire publié sur le web (/tilecache dans ce qui suit).</p>
<p style="margin-bottom: 0cm" align="justify">Autorisez l&#8217;exécution des cgi pour ce répertoire :</p>
<p style="margin-left: 2.01cm; margin-bottom: 0cm" align="justify">&lt;Directory /usr/local/apache2/htdocs/tilecache&gt;<br />
AddHandler cgi-script .cgi<br />
Options +ExecCGI<br />
&lt;/Directory&gt;</p>
<p style="margin-bottom: 0cm" align="justify">
<p style="margin-bottom: 0cm" align="justify">Editez le fichier tilecache.cfg et spécifiez un répertoire de stockage des dalles, par exemple :</p>
<p style="margin-bottom: 0cm" align="justify">base=/usr/local/apache2/htdocs/tileFolder</p>
<p style="margin-bottom: 0cm" align="justify">(NB : ce répertoire doit exister et être accessible en écriture à l&#8217;utilisateur apache).</p>
<p style="margin-bottom: 0cm" align="justify">Vous pouvez déjà tester en chargeant la page http://nom_du_serveur/tilecache/. Vous devriez voir apparaître une interface OpenLayers avec une carte du monde. Vérifiez le contenu de votre répertoire de stockage, vous devriez y voir un sous-répertoire « basic », nom de la couche WMS chargée par défaut, contenant des sous-répertoires numérotés.</p>
<p style="margin-bottom: 0cm" align="justify">Arrivé là, vous êtes déjà en train de mettre en cache les couches WMS que vous exploitez. Le reste n&#8217;est donc plus qu&#8217;une question d&#8217;optimisation.</p>
<p style="margin-bottom: 0cm" align="justify">
<ol type="I">
<li>
<p style="margin-bottom: 0cm" align="justify"><strong>La configuration des ressources WMS.</strong></p>
</li>
</ol>
<p style="margin-bottom: 0cm" align="justify">Vous avez sans doute d&#8217;autres données à exploiter que les données proposées par défaut. Pour cela, il faut rajouter ces entrées dans le fichier tilecache.cfg, en commençant par le nom de la ressource (layername) entre crochets. A noter que le nom que vous donnez à la ressource est complètement libre, mais que c&#8217;est lui que vous devrez utiliser lors des appels à TileCache, depuis OpenLayers par exemple. Voici un exemple complet de configuration d&#8217;une ressource :</p>
<p style="margin-bottom: 0cm" align="justify"><span><span style="font-size: x-small;">[geosignal]<br />
type=WMS<br />
url=http://www.geosignal.org/cgi-bin/wmsmap<br />
bbox=-50000,1200000,1400000,2700000<br />
extent_type=loose<br />
extension=png<br />
layers=RASTER4000K,RASTER1000K,RASTER500K,RASTER250K,\<br />
RASTER100K,RASTER50K,RASTER25K,RASTER5K<br />
resolutions=2116.666666667,1058.333333333,529.166666667,\<br />
264.583333333,132.291666667,66.145833333,26.458333333,\<br />
13.229166668,6.614583334,2.645833334,1.322916667<br />
levels=11<br />
srs=EPSG:27572</span></span></p>
<p style="margin-bottom: 0cm" align="justify">La pluplart des paramètres sont facilement compréhensibles. Après la bbox cependant, on trouve un extent_type=loose. Il sert à autoriser la création de dalles en dehors de la bbox. Pratique pour éviter les dalles roses dans OpenLayers, quand l&#8217;étendue de la carte est plus grande que celle de votre ressource. L&#8217;omettre pour forcer les requêtes à se situer dans la bbox. Quant aux résolutions, c&#8217;est une manière d&#8217;exprimer les échelles. On peut les calculer assez facilement (hmmm&#8230;) : les dalles par défaut font 256&#215;256 px. Si les images issues du serveur WMS sont en 96 dpi, chaque dalle fera donc (256/96) = 2,666666667 pouces, soit 2,666666667 x 2.54 = 6,773333333 cm. Au 100000e, cela représente donc  6773,333333 mètres, ce qui ramène à  (6773,333333/256) = 26,458333333 m/pixel. La résolution pour le 100000e est donc de 26,45833333, et on peut alors facilement calculer les autres par simple péréquation.</p>
<p style="margin-bottom: 0cm" align="justify">Une autre option peut s&#8217;avérer utile, c&#8217;est metaTile=true. Elle permet d&#8217;envoyer des requêtes sur de larges extents, qui sont ensuite redécoupées en 256 x 256. C&#8217;est pratique à plus d&#8217;un titre. D&#8217;une part c&#8217;est souvent plus rapide de faire une requête que 25 (la metaTile fait 5 x 5 dalles de base par défaut), même si l&#8217;image est plus grosse. D&#8217;autre part ça diminue le problème du chevauchement des labels entre dalles contigües, puisque cet effet de bord n&#8217;apparaît plus désormais qu&#8217;en frontières des grandes tuiles, donc 5 fois moins souvent (20 faces externes au lieu de 100). Elle nécessite cependant l&#8217;installation (si ce n&#8217;est pas déjà le cas) de la librairie Image de Python (<a href="http://www.pythonware.com/products/pil/">http://www.pythonware.com/products/pil/</a>) qui fait le travail de découpe. Malheureusement, elle ne gère pas les PNG entrelacés, et cette option ne pourra donc pas fonctionner si la ressource WMS diffuse ses images dans ce format. Pour <a href="http://mapserver.gis.umn.edu/docs/faq/faqsection_view?section=Map%20Output" target="_blank">MapServer</a>, il faut ajouter un FORMATOPTION &laquo;&nbsp;INTERLACE=OFF&nbsp;&raquo; dans la définition de l&#8217;outputformat PNG.</p>
<ol type="I">
<li>
<p style="margin-bottom: 0cm" align="justify"><strong>Optimisation 	1, utiliser mod_python.</strong></p>
</li>
</ol>
<p style="margin-bottom: 0cm" align="justify">TileCache est un programme en python, configuré par défaut pour être exécuté en mode cgi, c&#8217;est-à-dire qu&#8217;Apache charge à chaque requête l&#8217;exécutable python qui traite le fichier tilecache.cgi. C&#8217;est un peu lent. Il vaut mieux charger python dans Apache avec mod_python (à activer dans la liste des modules du httpd.conf, ou à compiler et installer directement) car le fichier est alors directement interprété par l&#8217;extension python d&#8217;Apache, résidente en mémoire.</p>
<p style="margin-bottom: 0cm" align="left">Donc ajoutez à votre fichier httpd.conf :</p>
<p style="margin-bottom: 0cm" align="left">LoadModule python_module        modules/mod_python.so</p>
<p style="margin-bottom: 0cm" align="justify">Pas de tilecache.py dans votre répertoire tilecache ? Il suffit en fait de renommer le fichier tilecache.cgi en .py . Il faut par contre aussi adapter votre httpd.conf. La configuration du répertoire tilecache devient :</p>
<p style="margin-bottom: 0cm" align="justify">&lt;Directory /usr/local/apache2/htdocs/tilecache&gt;<br />
AddHandler python-program .py<br />
PythonHandler TileCache.Service<br />
PythonOption TileCacheConfig /usr/local/apache2/htdocs/tilecache/tilecache.cfg<br />
&lt;/Directory&gt;</p>
<p style="margin-bottom: 0cm" align="justify">Petite précaution : maintenant que python et tilecache.py sont résidents en mémoire, il vous faudra redémarrer Apache à chaque modification du fichier de configuration de TileCache, qui est devenu une sorte de prolongement d&#8217;Apache&#8230; Il vaut donc mieux avoir bien configuré toutes ses ressources avant cette étape.</p>
<p style="margin-bottom: 0cm" align="justify">Comparez à présent le fonctionnement de votre TileCache, les performances devraient être sensiblement supérieures.</p>
<p style="margin-bottom: 0cm" align="justify">
<ol type="I">
<li>
<p style="margin-bottom: 0cm" align="justify"><strong>Optimisation 	2, pré-remplir le cache.</strong></p>
</li>
</ol>
<p style="margin-bottom: 0cm" align="justify">L&#8217;intérêt de cette étape dépend du nombre d&#8217;échelles de vos données WMS, ainsi que de leur utilisation. Inutile de pré-générer la France au 5000e si peu d&#8217;utilisateurs s&#8217;en servent. Mais il est souvent agréable d&#8217;avoir les 2-3 premiers niveaux pré-générés. Pour ce faire, utilisez le petit programme tilecache_seed.py ainsi :</p>
<p style="margin-bottom: 0cm" align="justify">python tilecache_seed.py &#8216;url_du_serveur_WMS&#8217; nom_de_la_ressource niveau_de_depart niveau_de_fin</p>
<p style="margin-bottom: 0cm" align="justify">ce qui donne pour notre ressource définie plus haut :</p>
<p style="margin-bottom: 0cm" align="justify">python tilecache_seed.py &#8216;http://www.geosignal.org/cgi-bin/wmsmap&#8217; geosignal 0 2</p>
<p style="margin-bottom: 0cm" align="justify">Cela générera toutes les dalles pour les niveaux 0,1 et 2 de la ressource « geosignal », soit les trois premières résolutions décrites dans le fichier tilecache.cfg. Il faut bien veiller à utliser le même nom de ressource que dans le  tilecache.cfg.</p>
<p style="margin-bottom: 0cm" align="justify">Une fois la pré-génération réalisée, l&#8217;affichage sur ces premiers niveaux devrait être beaucoup plus fluide.</p>
<p style="margin-bottom: 0cm" align="justify">
<ol type="I">
<li>
<p style="margin-bottom: 0cm" align="justify"><strong>Optimisation 	3, forcer le cache client.</strong></p>
</li>
</ol>
<p style="margin-bottom: 0cm" align="justify">Vous remarquerez toutefois qu&#8217;en revenant sur un niveau de zoom déjà consulté, les images sont le plus souvent rechargées depuis le serveur. Dommage puisqu&#8217;elles sont déjà dans le cache client.     Mais celui-ci (le navigateur) ne sait pas qu&#8217;elles sont encore valides. Il faut donc l&#8217;aider à le savoir. Pour ce faire, il faut utiliser le module Apache mod_expires. Il n&#8217;est pas chargé par défaut, mais peut l&#8217;être facilement en dé-commentant ou ajoutant un LoadModule mod_expires dans le httpd.conf si vous avez un version packagée. Par contre, si vous avez compilé Apache vous-même, il faudra le recompiler avec les options &#8211;enable-headers &#8211;enable-expires. Oui, j&#8217;aurais pu le dire avant&#8230; Mais Apache est votre ami, lors d&#8217;une réinstallation, le make install n&#8217;écrase que les exécutables et préserve le fichier de configuration, les modules et le contenu de cgi-bin. Donc tout va bien.</p>
<p style="margin-bottom: 0cm" align="justify">Une fois l&#8217;installation réalisée, il faut régler la durée de mise en cache dans la configuration Apache du répertoire tilecache. Rééditez donc à nouveau le httpd.conf et ajoutez dans la section Directory concernant tilecache :</p>
<p style="margin-bottom: 0cm" align="justify">ExpiresActive on<br />
ExpiresDefault &laquo;&nbsp;access plus 6 months&nbsp;&raquo;</p>
<p style="margin-bottom: 0cm" align="justify">La durée de mise en cache peut se régler finement. Voir la documentation du module Expires pour cela. Tout dépend de la durée de vie des données sources. Si elles sont soumises à une mise à jour quotidienne, on pourra se contenter d&#8217;un ExpiresDefault &laquo;&nbsp;access plus 6 hours&nbsp;&raquo; . A noter que ceci n&#8217;a aucune incidence sur le contenu du cache serveur. Donc si les données sont mises à jour quotidiennement, il faut également purger le cache serveur tous les jours !</p>
<p style="margin-bottom: 0cm" align="justify">A l&#8217;issue de cette dernière étape, comment dire, après quelques allers-retours entre niveaux de zooms différents, l&#8217;affichage devient quasi-instantané !</p>
<ol type="I">
<li>
<p style="margin-bottom: 0cm" align="justify"><strong>Optimisation 	4, simuler plusieurs serveurs.</strong></p>
</li>
</ol>
<p style="margin-bottom: 0cm" align="justify">La plupart des navigateurs n&#8217;effectuent pas plus de deux requêtes simultanées sur un même serveur, mais peuvent par contre en effectuer beaucoup plus vers plusieurs serveurs. En déclarant auprès de votre hébergeur de nouveaux noms de domaines (data1.myserveur.com, data2.myserveur.com, data3.myserveur.com&#8230;) pointant tous vers la même IP, les navigateurs pourront alors charger les dalles beaucoup plus vite, pour peu que l&#8217;application web que vous utilisez prenne en charge ce genre de requête. Avec OpenLayers il suffit de déclarer non plus une URL, mais un tableau d&#8217;URL :</p>
<pre style="text-align: justify">wms_sigma = new OpenLayers.Layer.WMS( "TIGER",
["http://sigma4.openplans.org/tilecache-1.3/tilecache.py?",
"http://sigma3.openplans.org/tilecache-1.3/tilecache.py?",
"http://sigma2.openplans.org/tilecache-1.3/tilecache.py?",
"http://sigma1.openplans.org/tilecache-1.3/tilecache.py?"],
{layers: 'sigma' }, {numZoomLevels: 17});</pre>
<p style="margin-bottom: 0cm" align="justify">Si avec tout ça vous allez encore moins vite que GoogleMaps, il ne vous reste plus qu&#8217;à acheter un serveur avec 36 Go de RAM et charger votre cache directement dedans. Car TileCache en est également capable !</p>
<p style="margin-bottom: 0cm" align="justify"><a title="Version PDF" href="http://www.neogeo-online.net/blog/wp-content/uploads/2008/tilecache.pdf" target="_blank">Version PDF.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.neogeo-online.net/blog/archives/84/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
	</channel>
</rss>

