filyb.info

mardi 15 juillet 2008

Intégrer une carte OpenStreetMap dans votre site web

Depuis que Google a mis à disposition son service Google Maps, les petits bouts de carte se sont mis à fleurir un peu partout sur la toile. Il faut indiquer un lieu ? Pas de problème, on va mettre une Google Map... Mieux ! On va mettre une OpenStreetMap !

J'ai testé plusieurs solutions pour obtenir une carte sympathique, facile à mettre en place, et avec du code valide. On commence par oublier l'onglet Export du site principal d'OpenStreetMap.

La meilleure solution que j'ai trouvé consiste à passer par Mapstraction. Il s'agit d'une bibliothèque javascript libre d'abstraction d'API. Concrètement, avec le même code, vous pouvez afficher une carte Google, Yahoo!... ou OpenStreetMap (voir la démonstration OpenStreetMap et OpenLayers – notez que OpenLayers est une bibliothèque javascript libre pour mettre en place des slippy maps).

Passons aux travaux pratiques. Voici ce que l'on aimerait obtenir :

Voir la carte sur OpenStreetMap.

Voici une carte tout à fait respectables, avec quelques POI marqués. Le seul inconvénient : les bulles des POI sont... moches.

Comment mettre cela en place ? Simple, voici le code :

    <!-- DIV xhtml de la carte. La taille peut être spécifiée soit ici,
         dans l'attribut style, soit dans les css.
    -->
    <div id="demo-map" style="width: 600px; height: 600px;"></div>
    <p><a
    href="http://openstreetmap.org/?lat=43.5945&lon=1.4496&zoom=12"
    hreflang="en" title="Site du projet OpenStreetMap">
        Voir la carte sur OpenStreetMap.
    </a></p>
    
    
    <!-- Inclusion des bibliothèques javascript OpenLayers et Mapstraction -->
    <script
        type="text/javascript"
        src="http://openlayers.org/api/OpenLayers.js"
    ></script>
    <script
        type="text/javascript"
        src="http://mapstraction.com/svn/source/mapstraction.js"
    ></script>
    
    <script type="text/javascript">
    // Initialisation de la carte.
    var mapstraction = new Mapstraction('demo-map','openlayers');
    mapstraction.addControls({
        pan: true, 
        zoom: 'small',
        map_type: true 
    });
    // Centrer la carte sur toulouse
    var toulouse = new LatLonPoint(43.60277,1.44371);
    mapstraction.setCenterAndZoom(toulouse, 12);
    
    // Ajouter des points (avec leur latitude et longitude) :
    //
    // Comment récupérer la latitude et la longitude d'un point ?
    // 1. Aller sur http://openstreetmap.org/
    // 2. Cliquer sur l'onglet "Export" (en haut)
    // 3. Dans "Format to Export", choisir "Embeddable HTML"
    // 4. Cliquez sur "Add a marker to the map"
    // 5. Cliquez sur la position souhaitée sur la carte (ne pas hésiter à
    //    zoomer !)
    // 6. La latitude et la longitude s'affichent en dessous.
    
    // Cinéma Utopia
    utopia = new Marker(new LatLonPoint(43.60394,1.44679))
    utopia.setInfoBubble('Cinéma Utopia Toulouse');
    mapstraction.addMarker(utopia);
    
    // Toulibre - Groupe d'utilisateurs de logiciels libres toulousain
    toulibre = new Marker(new LatLonPoint(43.60834,1.44461))
    toulibre.setInfoBubble('GUL Toulibre');
    mapstraction.addMarker(toulibre);
    
    // Un point au hasard
    hasard = new Marker(new LatLonPoint(43.58484,1.38883))
    hasard.setInfoBubble('Un point au hasard');
    mapstraction.addMarker(hasard);
    
    </script> 

Il y a même des jolis commentaires pour tout vous expliquer ! Notez l'astuce pratique pour récupérer les coordonnées d'un point. Pour le lien Voir la carte sur OpenStreetMap, vous pouvez simplement copier l'adresse de permalien de la vue que vous souhaitez sur le site principal d'OpenStreetMap.

Maintenant, vous n'avez plus d'excuse ! Si vous voulez mettre une carte sur votre site, copiez ce code. (Non, l'excuse OpenStreetMap est incomplet pour la zone que je veux afficher ne tient pas. Allez sur place, complétez OpenStreetMap, et retournez à votre site web.)

dimanche 21 août 2005

Déménagement

Bienvenue sur mon nouveau blog !

Comme les lecteurs de mon précédent blog le savent, ce dernier a connu des soucis de gestion au niveau de la plate-forme, et à cause d'un bête bug, je ne pouvais plus (et je ne peux toujours pas) accéder à la zone d'administration, ce qui est plutôt génant pour le propriétaire du blog. Et cela s'ajoutais aux autres désagrément d'une plate-forme de blog : serveurs surchargés, pub, impossiblité de sauvegarder sa base MySQL, etc...

C'est pourquoi j'ai cherché à héberger mon blog de façon indépendante, et pour cela j'ai trouvé serveurperso.com qui a gracieusement accepté de m'héberger ce site gratuitement et sans pub, qu'il en soit longuement remercié !

J'ai donc mit en ligne un petit site, réalisé entièrement en XHTML 1.1. Je me suis mit à ce nouveau standard, peu utilisé pour la raison qui suit : l'extension des fichiers doit être xhtml ou xml. Cela à l'avantage que les navigateurs modernes utilisent leur parser XML pour afficher la page, et donc préviennent de toutes les erreurs de syntaxe. Mais cela à l'inconvénient de ne pas pouvoir s'afficher dans des navigateurs obsolètes. IE, par exemple, ouvrira sa fenêtre Que voulez-vous faire : Ouvrir, Enregistrer, Annuler. Mais comme ce site n'est pas destiné à être vu absolument par tout le monde, j'ai mit des liens vers des navigateurs alternatifs sur ma page de redirection en XHTML 1.0 (seule page affichée par IE). De plus, le blog est du Dotclear, donc du XHTML 1.0, donc visible par IE.

Vous aurrez sûrement remarqué le nouveau thème, fait par moi même, ou plutôt les nouveaux thèmes, car il y en a deux. Ils sont accessibles en cliquant sur les liens en bas de la page. Cela fonctionne très bien pour les pages XHTML, mais le plugin DotClear censé faire pareil ne fonctionne pas bien chez moi (des retours d'autres visiteurs ?). Ces thèmes passent impécablement sous Gecko et KHTML, mais je note quelques bug sous Opéra (qu'un jour peut-être je résolverai) ainsi que certaines icones derrières les liens qui ne sont pas affichées (gestion des CSS moins bonne que Gecko/KHTML). Je n'ai même pas essayé de voir sous IE ce que cela donne (pas envie de m'imposer du travail supplémentaire)

Faute d'avoir une sauvegarde de la base de donnée de mon-blog, je vais progressivement rapatrier les anciens billets et commentaires à la main, donc ça risque de prendre un certain temps...

Comme le site est herbergé chez mon gentil hébergeur, soyez indulgent avec sa bande passante : maitrisez vos agrégateur, un rafraichissement d'une heure est largement sufisant (je n'écrit pas un billet toutes les cinq minutes).

Voilà, c'est à peu prés tout ce que je voulez dire pour cette renaissance, vous pouvez mettre à jour vos marques-pages et fils RSS... A si, n'ayant pas la possibilité de faire sur mon-blog une belle page de redirection, je ne vais pouvoir mettre la nouvelle addresse que dans les commentaires. Donc si vous voulez me faire un peu de pub, ce serai gentil...

Merci à mes lecteurs