Outils pour utilisateurs

Outils du site


nsi:tds:tag_rue

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
nsi:tds:tag_rue [2022/11/28 09:53] – créée goupillwikinsi:tds:tag_rue [2022/11/28 16:04] (Version actuelle) – [Recherche de la rue la plus proche] goupillwiki
Ligne 1: Ligne 1:
 ====== Etiqueter des photos selon des métadonnées GPS ====== ====== Etiqueter des photos selon des métadonnées GPS ======
 +
 +<WRAP todo>
 +En cours...
 +</WRAP>
  
 Dans ce TD on fournit Dans ce TD on fournit
Ligne 54: Ligne 58:
  
 Pour la longitude, le côté positif est ''%%"E"%%'' et le côté négatif est ''%%"W"%%''. Pour la longitude, le côté positif est ''%%"E"%%'' et le côté négatif est ''%%"W"%%''.
 +
 +===== Recherche de la rue la plus proche =====
 +
 +Vous disposez de deux fichiers.
 +
 +{{ :nsi:tds:graphes:paris13.nodes.csv |}} //Résumé//
 +
 +<csv :nsi:tds:graphes:paris13.nodes.csv maxlines=5></csv>
 +
 +Ce fichier donne des nœuds correspondant à des points sur la carte. Cette nœud sont identifié par un entier ''id''.
 +
 +{{ :nsi:tds:graphes:paris13.edges.csv |}} //Résumé//
 +
 +<csv :nsi:tds:graphes:paris13.edges.csv maxlines=5></csv>
 +
 +Il s'agit de routes.
 +
 +  * ''source'' et ''dest'' correspondent à ''id'' dans l'autre fichier.
 +  * Les longueurs sont données en mètres.
 +  * ''deuxsens = 1'' quand la voie est à double sens, ''0'' pour un sens unique.
 +
 +<WRAP tip>**Calcul d'une distance point segment**
 +
 +{{ :nsi:tds:distance_segment_point.png?direct&200|}}
 +
 +**Calcul de distance :** Considérants deux nœuds aux coordonnées ''A(lat1,lng1)'', ''B(lat2,lng2)'' reliés par une rue ''[AB]''. Considérons aussi le point ''M(lat, lng)''. On veut définir la distance entre ''M'' et ''[AB]''.
 +
 +Pour cela on commence par déterminer la position du point ''N'', projection de ''M'' sur ''(AB)''. Il nous faut les quantités :
 +
 +''lngAB = lngB - lngA'', ''latAB = latB - latA'', ''lngAM = lngM - lngA'' et ''latAM = latM - latA''.
 +
 +On calcule ensuite ''%%a = (lngAM*latAB - latAM*lngAB)/(latAB**2 + lngAB**2)%%''\\ ce qui permet d'obtenir ''lngN = lngM - a*latAB'' et ''latN = latM + a*lngAB''.
 +
 +Une fois que ''N'' est connu, on essaie de savoir dans quel cas on est : N1, N2 ou N3.
 +
 +On calcule donc ''t = (lngN - lngA)/lngAB if lngAB != 0 else (latN - latA)/latAB''.
 +
 +  * Si ''%%t <= 0%%'' (cas N1), la distance recherchée est ''AM'',
 +  * si ''%%0 < t < 1%%'' (cas N2), la distance recherchée est ''MN'',
 +  * si ''%%1 <= t%%'' (cas N3), la distance recherchée est ''BM''.
 +
 +Enfin, pour calculer la distance entre deux points ''F'' et ''G'', la formule est :
 +
 +$$FG = R \arccos(\sin(latitude_F) \sin(latitude_G) + \cos(longitude_F - longitude_G) \cos(latitude_F) \cos(latitude_G))$$
 +
 +</WRAP>
 +
 +
 +
 +
 +===== Système de fichier =====
 +
 +Vous devez parcourir le dossier à la recherche des fichiers ''*.jpg'' et après traitement vous devez les renommer. Voici comment faire :
 +
 +<code python>
 +import os
 +
 +# renommer :
 +os.rename('ancien_nom.jpg', 'nouveau_nom.jpg')
 +
 +# lister les fichiers *.jpg du répertoire courant
 +fichiers = [f for f in os.listdir('./') if f.endswith('.jpg')]
 +</code>
nsi/tds/tag_rue.1669625623.txt.gz · Dernière modification : de goupillwiki