Programmation » [JS]
[JS]
Publié le 04/07/2011 @ 10:34:23,
Par TangSalut à tous,
J'ai un ami qui a un problème et je me suis dit que vous trouveriez certainement la solution :
Merci pour lui.
J'ai un ami qui a un problème et je me suis dit que vous trouveriez certainement la solution :
J'aimerais faire tourner un script en boucle sur un dossier contenant plusieurs fichiers de traces GPS à afficher sur une carte OpenStreetMap.
Voilà l'exemple avec deux fichiers :
http://eurasia.cyclic.eu/maps/traces.html
Mais au lieu d'avoir à spécifier chaque fichier .gpx dans le code source de la page, j'aimerais que chaque fichier (.gpx) soit affiché avec le script trace_gpx.
Actuellement, le code est :
Je pourrais imager l'idée par l'instruction suivante :
Une idée?
Merci d'avance!
Voilà l'exemple avec deux fichiers :
http://eurasia.cyclic.eu/maps/traces.html
Mais au lieu d'avoir à spécifier chaque fichier .gpx dans le code source de la page, j'aimerais que chaque fichier (.gpx) soit affiché avec le script trace_gpx.
Actuellement, le code est :
- <script>
- init_map('map') ;
- trace_gpx('20100719.gpx','19/07/2010','red') ;
- trace_gpx('20100721.gpx') ;
- </script>
Je pourrais imager l'idée par l'instruction suivante :
- <script>
- init_map('map') ;
- trace_gpx('*.gpx') ;
- </script>
Une idée?
Merci d'avance!
Merci pour lui.
[JS]
Publié le 04/07/2011 @ 11:46:58,
Par ClandestinoJe peux me tromper, mais par défaut JS ne sait pas accéder au filesystem hors IE (et là encore, il a besoin d'un activeX et de Scripting.FileSystemObject).
Le plus simple est de mettre tous les fichiers .gpx dans un array et de passer un petit coup de jQuery :
Le plus simple est de mettre tous les fichiers .gpx dans un array et de passer un petit coup de jQuery :
- var _gpxs = ['20100719','20105487','32564878', ... ];
- $.each(_gpxs, function(i,item) {
- trace_gpx(item + '.gpx');
- });
[JS]
Publié le 04/07/2011 @ 14:32:09,
Par TangApparemment soit ça fonctionne pas, soit mon pote modifie pas de la bonne façon.
Donc :
En fait, ça ne marche pas...
Enfin, je ne sais pas exactement ce que je dois changer... "i" reste "i"? Si je mets un chiffre à la place de "i", la carte ne s'affiche même plus. Je comprends bien que je note les noms des fichiers entre les crochets mais ça s'arrête là...
Résultat : http://eurasia.cyclic.eu/maps/traces2.html
Etant donne que ce n'est pas vraiment son truc le java, toute information détaillée est la bienvenue.
???
Dernière édition: 04/07/2011 @ 14:33:30
Donc :
En fait, ça ne marche pas...
Enfin, je ne sais pas exactement ce que je dois changer... "i" reste "i"? Si je mets un chiffre à la place de "i", la carte ne s'affiche même plus. Je comprends bien que je note les noms des fichiers entre les crochets mais ça s'arrête là...
- <script>
- init_map('map') ;
- var _gpxs = ['20100719','20100721'];
- $.each(_gpxs, function(i,item) {
- trace_gpx(item + '.gpx');
- });
- </script>
Résultat : http://eurasia.cyclic.eu/maps/traces2.html
Etant donne que ce n'est pas vraiment son truc le java, toute information détaillée est la bienvenue.
???
Dernière édition: 04/07/2011 @ 14:33:30
[JS]
Publié le 04/07/2011 @ 14:50:25,
Par ClandestinoQuestion profondément débile (je sais), mais il a pensé à inclure jQuery dans sa page ?
edit: j'ai regardé son source... Pas si débile que ça ma remarque
Faut évidemment charger jQuery avant d'y faire appel
Donc en fait, son code devrait être :
Dernière édition: 04/07/2011 @ 14:52:05
edit: j'ai regardé son source... Pas si débile que ça ma remarque
Faut évidemment charger jQuery avant d'y faire appel
Donc en fait, son code devrait être :
- <script type="text/javascript" src:"http://code.jquery.com/jquery.min.js"></script>
- <script>
- init_map('map') ;
- var _gpxs = ['20100719','20100721'];
- $.each(_gpxs, function(i,item) {
- trace_gpx(item + '.gpx');
- });
- </script>
Dernière édition: 04/07/2011 @ 14:52:05
[JS]
Publié le 04/07/2011 @ 15:07:26,
Par TangAh ben un grand grand merci pour lui.
Je lui communique...
Je lui communique...
[JS]
Publié le 04/07/2011 @ 15:09:38,
Par ClandestinoC'est src="http://code.jquery.com... et non src:"http://code.jquery.com...
[JS]
Publié le 05/07/2011 @ 13:04:46,
Par TangMerci pour la précision (qu'il avait également corrigée).
Ca fonctionne si ce n'est que c'est pas "automatique".
En fait le but est qu'il dépose les fichiers dans un dossier sur le serveur et que la carte se mette à jour d'elle-même en vérifiant (genre 1 fois par jour) s'il y a de nouveaux fichiers présents.
Si pas possible en JS, une idée en utilisant autre chose, et facilement ?
Ca fonctionne si ce n'est que c'est pas "automatique".
En fait le but est qu'il dépose les fichiers dans un dossier sur le serveur et que la carte se mette à jour d'elle-même en vérifiant (genre 1 fois par jour) s'il y a de nouveaux fichiers présents.
Si pas possible en JS, une idée en utilisant autre chose, et facilement ?
[JS]
Publié le 05/07/2011 @ 15:52:33,
Par ClandestinoUn petit bout de code PHP qui scanne le répertoire, balance le résultat dans un XML et l'envoie au JS qui le traite.
En gros dans ce cas, ça donnerait ça :
Puis le JS :
En gros dans ce cas, ça donnerait ça :
- <?php
- $path_to_gpxs = '../whatever_folder_it_is/gpxs/';
- $xml_string = <<<xml
- <?xml version="1.0" encoding="UTF-8"?>
- <item>
- </item>
- XML;
- $xml_generator = new SimpleXMLElement($xml_string);
- if ($handle = opendir($path_to_gpxs)) {
- while (false !== ($file = readdir($handle))) {
- if (is_file($path_to_gpxs.'/'.$file)) {
- $image = $xml_generator->addChild('item');
- $image->addChild('path', $path_to_gpxs.'/'.$file);
- }
- }
- closedir($handle);
- }
- header("Content-Type: text/xml");
- echo $xml_generator->asXML();
- ?>
Puis le JS :
- <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
- <script>
- init_map('map') ;
- $.ajax({
- type: "GET",
- url: "participations.xml",
- datatype: "xml",
- success: function(data) {
- $(data).find("item").each(function() {
- trace_gpx($(this).find('path').text());
- });
- }
- });
- </script>
[JS]
Publié le 05/07/2011 @ 17:19:32,
Par ovhClan> PHP peut exporter un array en json, ce serait encore plus facile et naturel pour le js
http://fr.php.net/manual/en/function.json-encode.php
http://fr.php.net/manual/en/function.json-encode.php
Je n'ai rien à voir avec www.ovh.com
[JS]
Publié le 05/07/2011 @ 17:33:02,
Par ovhTesté et approuvé :
Dernière édition: 05/07/2011 @ 21:07:14
- <?php
- define("PATH", "."); // place ici le bon chemin sans / final
- header("Content-type: application/json");
- $files = array();
- $iterator = new DirectoryIterator(PATH);
- foreach ($iterator as $fileInfo) {
- if ($fileInfo->isFile()) {
- $files[] = PATH . '/' . $fileInfo->getFilename();
- }
- }
- echo json_encode($files);
- <script type="text/javascript">
- init_map('map');
- $.ajax({
- type: "get",
- url: "test.php",
- datatype: "json",
- success: function(data){
- $(data).each(function(idx, value){
- trace_gpx(value);
- });
- }
- });
- </script>
Dernière édition: 05/07/2011 @ 21:07:14
Je n'ai rien à voir avec www.ovh.com
[JS]
Publié le 06/07/2011 @ 08:29:25,
Par TangAh ben je sens qu'il va être ravi...
Un grand merci, j'étais sûr que par ici une solution serait trouvée.
Un grand merci, j'étais sûr que par ici une solution serait trouvée.
[JS]
Publié le 06/07/2011 @ 10:23:44,
Par TangMA-GNI-FIQUE!!!!!!!!!!
Deuxième solution (1ère pas testée).
Merci merci merci!
Tu transmettras!
[JS]
Publié le 06/07/2011 @ 11:34:32,
Par ovhDe rien Mais ce ne serait pas plus simple qu'il s'inscrive sur le site ? C'est gratuit
Je n'ai rien à voir avec www.ovh.com
[JS]
Publié le 06/07/2011 @ 12:08:59,
Par TangDe rien Mais ce ne serait pas plus simple qu'il s'inscrive sur le site ? C'est gratuit
En fait ils sont sur le départ pour 14 mois et ont donc pas mal de chose à faire, donc je me suis occupé de "régler" ce point là.
[JS]
Publié le 12/07/2011 @ 09:12:48,
Par TangFinalement il a opté pour ceci (apparemment plus efficace*) :
*"[...]ça serait plus efficace d'écrire direct les appels trace_gpx dans
le traces.html (à mettre en php du coup) que de faire un appel $.ajax"
Encore merci à vous.
- <script>
- init_map('map') ;
- <?php
- if ($handle = opendir($dir)) {
- $tab = array() ;
- while (false !== ($file = readdir($handle))) {
- if ( is_file("$dir/$file") )
- $tab[] = $file ;
- }
- closedir($handle);
- }
- sort($tab) ;
- foreach ( $tab as $file ) {
- $fileName = str_replace('.gpx','',$file) ;
- echo "\t trace_gpx('$dir/$file','$fileName') ; \n" ;
- }
- ?>
- </script>
*"[...]ça serait plus efficace d'écrire direct les appels trace_gpx dans
le traces.html (à mettre en php du coup) que de faire un appel $.ajax"
Encore merci à vous.