Un fichier XML dynamique pour une visite virtuelle

Avec une visite virtuelle flash (et c’est quasiment vrai avec tous les formats), le fichier XML configure la visite virtuelle. Ce fichier, chargé par le lecteur flash (par exemple krpano.swf), inclut absolument tous les liens à charger et les options, de l’image à afficher (le plus important) aux boutons de navigation, en passant par la perspective, les points chauds, le son, la vidéo, et plein d’autres choses.

En général, lorsque l’on travaille sur un projet n’ayant pas lieu à évoluer une fois finalisé, le fichier XML est statique. On le programme grâce à un éditeur de texte, genre Notepad++, et une fois l’interface terminée, le client charge la visite virtuelle définitive sur son site. Le fichier XML, lisible avec un simple éditeur de texte, est enregistré en dur sur le serveur.

Avec un fichier XML statique, l’interface va pouvoir être développée de façon très approfondie, avec des sons directionnels, des hotspots, des vidéos incrustées dans les panoramas, etc.

À l’inverse, l’interface d’une visite virtuelle générée de façon dynamique va souvent être « standardisée ». L’interface sera commune à toutes les visites virtuelles sur le site en question.

Voici deux cas typiques où le fichier XML doit être généré dynamiquement :

  • les sites immobiliers intégrant un grand nombre de visite virtuelle
  • les sites de partage de visite virtuelle, comme Gigapan, 360Cities ou ViewAt. Le CMS PanoramaGalerie génère aussi les fichiers XML à la volée.

Pour générer un fichier XML de façon dynamique, on utilisera couramment du PHP, le langage le plus courant pour faire des sites internet dynamiques. Le principe est le suivant : on réalise d’abord l’interface sur un fichier statique (travail graphique), et on dynamise ce fichier XML avec des variables pour tout ce qui est destiné à évoluer (travail plus de développement).

Ci-dessous un exemple d’un ficher PHP avec une image multi-résolution à deux niveaux.

<?php header("Content-type: text/xml"); ?>
 
<krpano version="1.0.8" logkey="false" >
 
	<view hlookat	="<?php echo $view -> hlookat() ?>"
		vlookat	="< ?php echo $view -> vlookat () ?>"
		fov		="< ?php echo $view -> fov () 	?>" 
		fovmin	="< ?php echo $view -> fovmin () ?>" 
		fovmax	="< ?php echo $view -> fovmax () ?>" 
	/>
 
	<preview type="SPHERE" url="../images/<?php echo /$view -> nomimage () ; ?>/preview.jpg" />
 
	<image type="CUBE" multires="true" tilesize="512">
		<level tiledimagewidth="1024" tiledimageheight="1024">
			<left url="../images/<?php echo $view -> nomimage () ; ?>/l2_l_%v_%h.jpg"  />
			<front url="../images/<?php echo $view -> nomimage () ; ?>/l2_f_%v_%h.jpg"  />
			<right url="../images/<?php echo $view -> nomimage () ; ?>/l2_r_%v_%h.jpg"  />
			<back url="../images/<?php echo $view -> nomimage () ; ?>/l2_b_%v_%h.jpg"  />
			<up url="../images/<?php echo $view -> nomimage () ; ?>/l2_u_%v_%h.jpg"  />
			<down url="../images/<?php echo $view -> nomimage () ; ?>/l2_d_%v_%h.jpg"  />
		</level>
		<level tiledimagewidth="512" tiledimageheight="512">
			<left url="../images/<?php echo $view -> nomimage () ; ?>/l1_l_%v_%h.jpg" />
			<front url="../images/<?php echo $view -> nomimage () ; ?>/l1_f_%v_%h.jpg" />
			<right url="../images/<?php echo $view -> nomimage () ; ?>/l1_r_%v_%h.jpg" />
			<back url="../images/<?php echo $view -> nomimage () ; ?>/l1_b_%v_%h.jpg" />
			<up url="../images/<?php echo $view -> nomimage () ; ?>/l1_u_%v_%h.jpg" />
			<down url="../images/<?php echo $view -> nomimage () ; ?>/l1_d_%v_%h.jpg" />
		</level>
	</image>
 
	<?php include 'base.xml' ?>	
 
</krpano>

Il y a une autre façon de créer un fichier XML dynamiquement, c’est d’utiliser une classe PHP comme XMLWriter. Je n’ai en revanche aucune idée sur le temps de traitement mais je doute que ce soit optimal.

2 commentaires

  1. Jean-Jacques : site

    Merci beaucoup pour cette solution, j’ai pas mal cherché jusqu’à présent à faire passer des variables en JS depuis mon script php. Mais il est impossible avec FPP de faire cela pour un hotspot lecteur MP3 avec le fichier son comme variable. Avec votre méthode plus rien n’est impossible, notamment pour une utilisation avec wordpress.
    Encore mille fois merci.

    17 septembre 2011 à 17:45
  2. Guy : site

    Merci pour ce truc, juste une question.

    Quand doit être executé ce genre de script, avant de lancer le pano avec le code embedpano ?

    En fait est ce que ce code écrit un xml qui reste en mémoire, dans ce cas on met le même nom de xml dans embedpano ?

    10 décembre 2011 à 17:07