Recevoir plusieurs fichiers en Bluetooth sous XP

25 novembre 2007

Je suis un fervent utilisateur de mon téléphone portable en tant qu'appareil photo numérique. Pour transférer mes photos, j'utilise un dongle Bluetooth avec les drivers générique de Windows XP. Non seulement ce driver s'installe mal, mais aussi il est très limité lorsqu'il s'agît d'envoyer ou de recevoir des fichiers. En effet, vous ne pouvez recevoir qu'un seul fichier à la fois (Clic sur l'icône Bluetooth de la traybarre, "Recevoir un fichier").

Pour télécharger tout un répertoire, je vous conseille le logiciel gratuit OBEX Commander. Il permet de parcourir les données d'un téléphone portable via Bluetooth et de télécharger plusieurs fichiers d'un coup.

Ça ne serait pas arrivé avec un bon data-logger...

22 novembre 2007

Un conducteur américain a contesté son amende pour excès de vitesse en présentant une trace que son GPS enregistrait au moment du délit. Cette trace devait prouver qu'il ne dépassait pas la vitesse autorisée, et ainsi que le radar du policier était défectueux.

La délibération a eu lieu. La trace GPS n'a pas été considérée comme une preuve valide car les points étaient enregistrés toutes les 30 secondes, et qu'il était possible pour le conducteur de dépasser la vitesse autorisée entre deux points...

Je ne garanti pas qu'il aurait gagné son procès, mais au moins, la validité de la trace n'aurait pas été mise en cause avec un bon data-logger.

Script pour faire du reverse geocoding sur vos photos

21 novembre 2007

Avoir les coordonnées GPS dans les entêtes de vos photos, c'est chouette. Mais il faut avouer que pour faire des recherches, c'est loin d'être pratique. Il serait plus pratique de pouvoir chercher le nom de villes ou villages. Heureusement, il existe le reverse geocoding.

Le reverse geocoding ou geonaming consiste à déduire, à partir d'une coordonnée GPS, le nom du village le plus proche. Le site geonames.org propose gracieusement une API permettant d'effectuer cette tâche.

Pour me faciliter la tâche, et exécuter l'opération de reverse geocoding sur l'ensemble de mes photos, j'ai écris un petit script Perl. Ce dernier récupère les coordonnées GPS dans les entêtes EXIF des photos, puis insère la ville correspondante dans le champ city de l'entête IPTC. Ce champ n'est pas visible sous Picasa mais Picasa le prend quand même en compte lorsque vous faite une recherche.


$ecrase_city = 0; #Ecraser ville si déjà renseignée ? (0 = non, 1 = oui)
$max_dist = 3; #Distance max entre photo et village (en km)

$dir = ".";

use File::Find;
use Image::ExifTool qw(:Public);
use Geo::GeoNames;

find(\&Geoname, $dir);

sub Geoname {
/\.[jJ][pP][gG]$/ or return;
$filename = $_;
print $filename."\t";
my $exifTool = new Image::ExifTool;
$exifTool->Options(CoordFormat => '%.6f');
$success = $exifTool->ExtractInfo($filename, \%options);
if (!$success) {
print "Erreur de lecture !\n";
} else {
$city = $exifTool->GetValue('City');
if (($city ne '') && (!$ecrase_city)) {
print "Champ \"city\" plein : $city.\n";
} else {
$lat = $exifTool->GetValue('GPSLatitude');
$lng = $exifTool->GetValue('GPSLongitude');
if ($lat eq '') {
print "Pas de coordonnee GPS.\n";
} else {
$lat =~ /((\d|\.)*)\s(\w)/;
$lat = $1;
if ($3 eq 'S') {$lat = -$lat};
$lng =~ /((\d|\.)*)\s(\w)/;
$lng = $1;
if ($3 eq 'W') {$lng = -$lng};
my $geo = new Geo::GeoNames();
$result = $geo->find_nearby_postalcodes(lat => $lat, lng => $lng);
$name = $result->[0]->{'name'};
$dist = $result->[0]->{'distance'};
if ($dist > $max_dist) {
printf("$name trop loin (%.2f km).\n",$dist);
} else {
$exifTool->SetNewValue('city', $name);
$success = $exifTool->WriteInfo($filename);
if (!$success) {
print "Erreur d'enregistrement !\n";
} else {
print "$name\n";
}
}
}
}
}
}


Il nécessite :
- L'installation d'un interpréteur Perl bien sûr. Pour les utilisateurs de Windows, je vous propose ActivePerl ;
- L'installation de la librairie ExifTool ;
- L'installation de la librairie Geonames.

Pour installer ces librairies, il suffit de décompresser le contenu des répertoires "lib" des archives dans le répertoire "lib" de Perl.

Ce script a quelques défauts, liés au service geonames.org. Premièrement, le nom des lieux ne comprend pas d'accents ni de tirets. Deuxièmement, lorsque vous êtes en périphérie d'une grande ville, il est possible que le centre du village le plus proche ne soit pas la grande ville mais un petit village de banlieue. Troisièmement, geonames.org m'a déjà répondu des absurdités ("Ile-de-Sein" pour une coordonnée à côté de "Concarneau").

Pour lancer le script, copiez le code dans un fichier .txt dont vous aurez changé l'extension en .pl puis placez-le dans le répertoire de votre album photo. Enfin, lancez-le (avec ActivePerl, il suffit normalement de double-cliquer sur le fichier).

Tutorial express JOSM et OpenStreetMap

13 novembre 2007

Comme promis, un tutoriel pour prendre en main JOSM. Petit rappel : JOSM est le logiciel Java qui permet d'ajouter des données dans OpenStreetMap. Ce tutoriel présente l'ajout d'une rue. C'est un peu un HelloWorld. Pour en savoir plus, rien ne vaut l'expérimentation.

Installation
Pour exécuter JOSM, il faut d'abord avoir installé un environnement d'exécution Java 1.5. Une fois fait, téléchargez la dernière version de JOSM. Il suffit de lancer ce package jar pour lancer OpenStreetMap (un double-clic sur le fichier jar suffit généralement sous Windows).

Charger sa trace GPS
Supposons que vous ayez déjà relevé une trace GPS grâce à votre data-logger préféré. Supposons aussi que vous ayez déjà convertit cette trace en fichier GPX grâce au très efficace GPSBabel. Il vous suffit d'utiliser le bouton "Ouvrir" pour charger la trace :

Vous obtiendrez alors une fenêtre noire avec la trace dessinée :


Télécharger les rues existantes
La phase suivante consiste à télécharger les rues qui sont déjà dans la base de données d'OpenStreetMap. Cliquez sur le bouton de téléchargement :

Les paramètres par défaut suffisent, il suffit de cliquer sur Ok. Après quelques secondes, la carte est dessinée :

Pour déplacer la carte, enfoncez le bouton droit de la souris et faites glisser. Pour zoomer, utilisez la molette.

Attributs des éléments
Cliquez sur des rues grâce à l'outil de sélection :

Vous verrez que les rues sont souvent composées d'une suite de segments. Lorsqu'un élément est sélectionné, ses attributs sont listés dans une fenêtre à droite :

Vous pouvez trouver la liste des attributs officiels à cette adresse.

Ajouter une rue !
Selon l'endroit où vous êtes allé, vous aurez plus ou moins de rues déjà dessinées. Dans une grande ville, il est probable que vous soyez dans ce cas de figure :

Vous êtes passé par une rue manquante !
Il vous suffit d'utiliser les trois outils de base ; l'ajout de point :

L'ajout de point sur un segment (cliquez sur la petite flèche grise sur le bouton d'ajout de point) :

Et l'ajout de segment :


Ré-organiser les rues
Il est possible que vous ayez besoin de couper une rue en deux au niveau d'un point, de rassembler deux rues en une seule, ou d'inverser le sens d'une rue (si elle est à sens unique par exemple). Utilisez alors les outils correspondants dans le menu Tools :

Par exemple, pour couper une route, il faut sélectionner une route et un point sur cette route (Shift + clic pour ajouter un élément à la sélection courante). Puis utilisez Split way.

Spécifier des attributs
Une fois votre route dessinée, il lui faut un petit nom et un type. Sélectionnez votre route et cliquez sur le bouton Add en bas de la fenêtre d'attributs :

Pour le nom, entrez comme clef (key) "name" (sans les guillemets évidement) et comme valeur, le nom de la rue.
Pour le type, entrez la clef "highway" et pour la valeur, référez vous au tableau précédemment présenté. Généralement, vous jonglerez entre "residential", "unclassified", "secondary" et "primary". Inspirez vous des attributs des rues déjà en place !
Si la rue est à sens unique, n'oubliez pas d'ajouter une clef "oneway" avec comme valeur "yes".
Je vous conseille sérieusement de potasser la liste des attributs disponibles... c'est instructif et ça donne des idées.

Enregistrer vos changements
Jusqu'ici, vos changements étaient réalisés en local. Rien n'a été modifié sur OpenStreetMap. Si vos travaux vous conviennent, il vous faut un compte sur OpenStreetMap. Entrez votre identifiant et votre mot de passe dans les préférences de connexion de JOSM ; Edit, Preferences, puis :

Pour charger vos travaux sur les serveurs d'OpenStreetMap, il vous suffit alors de cliquer sur cet icône :

L'enregistrement est instantané, mais la carte n'est pas mise à jour immédiatement. Il est possible que vous deviez attendre quelques heures voire quelques jours pour admirer votre travail.

Aller plus loin
Voici quelques astuces indispensables.
1. Il existe un plugin nommé MapPaint qui permet d'avoir une interface un peu plus WYSIWYG.
2. Si vous trouvez que la carte est déformée (les ronds-points sont ovales), changez votre mode de projection dans les préférences. (Edit -> Preferences -> Map Settings -> Mercator au lieu de EPSG:4326)
3. Jetez un œil sur l'utilisation des calques (Layers), c'est utile lorsqu'on a plein de traces différentes.
4. Certains utilisateurs prennent des photos des panneaux (nom des rues, sens uniques, limitation de vitesse...). Il vous est possible d'importer ces photos sur JOSM. Elles sont alors placées sur la carte en fonction de la position à laquelle vous étiez au moment de la prise de vue.