Premiers pas OpenLayers & OpenStreetMap
Dans le cadre d'un petit projet, je devais mettre en place une carte statique, et permettre à des clients de modifier cette image en ligne. Le but était qu'ils mettent des traits dessus signifiant à peu près la distance parcourue par des personnes.
Basique, mais surtout très moche. Je me suis dit que je pourrais proposer mieux.
Après avoir posé 2-3 questions, je suis arrivé à une solution simple et pratique :
utiliser les cartes d'OSM, les afficher avec OpenLayers, et tracer dessus un cercles représentant ladite distance.
Résultat ? bin un truc dynamique, qui marche bien, assez rapide, et surtout ne demandant aucune maintenance.
Le petit bout de code qui me permet de faire cela :
On obtient un bout de carte de chez OSM, centré sur Lausanne, avec un cercle représentant env. 67.5km. Pour le moment, c'est pas encore 100% dynamique, j'attends la validation... Mais sur le principe, c'est vraiment easy.
Bon, certes, j'ai pas fait ce truc juste du premier coup, et j'avais des collègues connaissant le système autour de moi (ils rigolaient un peu d'ailleurs) pour me filer un coup de main :).
Pour le moment, le démonstrateur statique est ici : http://demo.itnux.ch/map-example.html
Y a plus qu'à :D
++
Tengu
Basique, mais surtout très moche. Je me suis dit que je pourrais proposer mieux.
Après avoir posé 2-3 questions, je suis arrivé à une solution simple et pratique :
utiliser les cartes d'OSM, les afficher avec OpenLayers, et tracer dessus un cercles représentant ladite distance.
Résultat ? bin un truc dynamique, qui marche bien, assez rapide, et surtout ne demandant aucune maintenance.
Le petit bout de code qui me permet de faire cela :
<script type="text/javascript" src="[url]http://openlayers.org/api/OpenLayers.js[/url]"></script> <script type="text/javascript"> var map, layer; var proj_4326 = new OpenLayers.Projection("EPSG:4326"); var proj_900913 = new OpenLayers.Projection("EPSG:900913"); var steps = 90000; var distance = steps*0.75; function init() { origin = new OpenLayers.Geometry.Point(6.60, 46.56); origin.transform(proj_4326, proj_900913); map = new OpenLayers.Map('map', {displayProjection: proj_4326, controls:[new OpenLayers.Control.Navigation] } ); //map = new OpenLayers.Map('map', {displayProjection: proj_4326, controls:[] } ); layer = new OpenLayers.Layer.OSM(); map.addLayer(layer); //map.setCenter(new OpenLayers.LonLat(7.59, 46.66).transform(proj_4326, proj_900913), 7); map.setCenter(new OpenLayers.LonLat(6.60, 46.56).transform(proj_4326, proj_900913), 7); createCircle(); map.events.on({zoomend: createCircle }); } function createCircle() { map.setCenter(new OpenLayers.LonLat(6.60, 46.56).transform(proj_4326, proj_900913)); var radius = distance/map.resolution; var myStyles = new OpenLayers.StyleMap({ "default": new OpenLayers.Style({ pointRadius: radius, fillColor: "#ffcc66", fillOpacity: 0.3, strokeColor: "#ff9933", strokeWidth: 2, graphicZIndex: 1 }) }); var circus = new OpenLayers.Layer.Vector("Points", { styleMap: myStyles }); circus.addFeatures(new OpenLayers.Feature.Vector(origin)); map.addLayer(circus); } </script>
On obtient un bout de carte de chez OSM, centré sur Lausanne, avec un cercle représentant env. 67.5km. Pour le moment, c'est pas encore 100% dynamique, j'attends la validation... Mais sur le principe, c'est vraiment easy.
Bon, certes, j'ai pas fait ce truc juste du premier coup, et j'avais des collègues connaissant le système autour de moi (ils rigolaient un peu d'ailleurs) pour me filer un coup de main :).
Pour le moment, le démonstrateur statique est ici : http://demo.itnux.ch/map-example.html
Y a plus qu'à :D
++
Tengu