IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Recherche de pays par Latitude/Longitude


Sujet :

Algorithmes et structures de données

  1. #1
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut Recherche de pays par Latitude/Longitude
    Bonjour,

    D'une part, j'ai un tableau de 3 colonnes organisé comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom de pays, Latitude moyenne, Longitude moyenne
    D'autre part, j'ai une position géographique (position de la souris mais cela a peu d'importance):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Latitude exacte, Longitude exacte
    Je cherche à trouver le nom du pays sur lequel je me trouve. L'algorithme que j'imagine est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    distance mini = +infini
    pays trouve = "aucun"
    Pout tous les pays
       distance courante = SQRT( (Latitude exacte - Latitude moyenne du pays)^2 + (Longitude exacte - Longitude moyenne du pays)^2 )
       si distance < distance mini
          distance mini = distance courante
          pays trouve = nom du pays
       fin si
    Fin pour
    Je me demandais s'il n'y avait pas plus rapide comme algo car je vais souvent faire des interrogations (1 ou 2 par secondes) et que mon tableau de pays contient environ 500 entrées.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Bien le bonjour,

    Si tu n'as qu'une seule info par pays, ça ne suffira pas.
    Dès que deux pays auront des taille différentes et que interrogeras un lieu près de leur frontière, l'algo se trompera et privilégiera le pays le plus petit.
    Exemple simple, la France et la Luxembourg. La coordonnée moyenne de la Frane est bien en dessous de Paris et je te laisse imaginer où sera répertoriée Metz ou Thionville

    Pour résoudre correctement un problème d'appartenance de coordonnées, il te faut définir des polygones de coordonnées pour chaque pays.

    Cependant l'idée des coordonnées moyennes est pertinent pour orienter la recherche et obtenir un faible nombre de pays à tester. En triangulant par Delaunay ton ensemble de coordonnées moyennes, chaque interrogation de lieu te donnera un triangle et donc 3 pays à tester.

  3. #3
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Et un cas pour lequel la triangulation est encore moins pertinente : pour les pays contenus dans d'autres pays (Afrique du Sud et Lesotho), là ça ne va plus du tout

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par khayyam90 Voir le message
    Si tu n'as qu'une seule info par pays, ça ne suffira pas. Dès que deux pays auront des taille différentes et que interrogeras un lieu près de leur frontière, l'algo se trompera et privilégiera le pays le plus petit.
    Exemple simple, la France et la Luxembourg. La coordonnée moyenne de la Frane est bien en dessous de Paris et je te laisse imaginer où sera répertoriée Metz ou Thionville .
    Tout à fait d'accord

    Citation Envoyé par khayyam90 Voir le message
    Et un cas pour lequel la triangulation est encore moins pertinente : pour les pays contenus dans d'autres pays (Afrique du Sud et Lesotho), là ça ne va plus du tout
    Tout à fait d'accord aussi

    Mais pour l'instant, je n'ai que ces données.

    Avec mon algo, il y a des cas pour lesquels j'aurai des réponses "farfelues" mais je reviens à ma question, est ce qu'il y a mieux comme algo (plus rapide, plus efficient) ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par ram_0000 Voir le message
    Avec mon algo, il y a des cas pour lesquels j'aurai des réponses "farfelues" mais je reviens à ma question, est ce qu'il y a mieux comme algo (plus rapide, plus efficient) ?
    Si c'est possible dans ton cas, tu peux précalculer la carte des régions (point par point, ou par Voronoi). Ca te donne un tableau d'entier de taille Largeur x Hauteur de l'image, et chaque case du tableau te donne le n° du pays.

    Sinon, tu peux partitioner l'espace pour réduire le nombre de positions à tester (BSP-tree, kd-tree, ...)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    impossible a determiner avec uniquement ces informations...

    Meme pas une liste d'exclusion....

    Il faut au minimum pour chaque pays lat min et max, long min et max...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  7. #7
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 76
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    On peut peut-être faire ainsi.
    Une latitude se situe entre -90 et +90
    Une longitude entre -180 et +180
    Ainsi on a une bijection de la mappemonde sur le rectangle défini plus haut.
    On considère les rectangles de type [la, la+1]*[lo,lo+1]
    Certains de ces rectangles sont entièrement contenus dans un pays, d'autres non.
    On considère ensuite la zone des rectangles non-inclus dans un seul pays, et on fait un recouvrement de ces rectangles par des rectangles correspondant à des variations de 1/10 de degré en latitude et en longitude.
    A nouveau, certains des sous rectangles sont entièrement contenus dans un seul pays, et d'autres non.
    On considère ensuite les sous-rectangles des précédents du second type correspondant à des variations de 1/100 ième de degré.
    On s'arrête quand on estime que la précision est suffisante.
    Ce travail préparatoire est assez long, mais quand il est fait l'algo est immédiat et très rapide.
    Pour situer un point on regarde s'il est dans la première famille de rectangles, sinon dans la seconde etc...
    Il restera une marge d'erreur d'autant plus faible qu'on est descendu loin dans les puissances de 10.
    Ce qu'on trouve est plus important que ce qu'on cherche.
    Maths de base pour les nuls (et les autres...)

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut
    Bonjour à tous,
    le découpage en zone est effectivement la meilleure méthode.

    Mais je tenais juste à préciser 2 choses sur l'algo initial: (pour ajouter mon grain de sel )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    distance mini = +infini
    pays trouve = "aucun"
    Pout tous les pays
       distance courante = SQRT( (Latitude exacte - Latitude moyenne du pays)^2 + (Longitude exacte - Longitude moyenne du pays)^2 )
       si distance < distance mini
          distance mini = distance courante
          pays trouve = nom du pays
       fin si
    Fin pour
    1. le calcul de distance sera très incorrect surtout proche des cercles polaires (ce sont des angles, et pas des distances, il faudrait un calcul trigo)
    2. inutile de calculer la racine SQRT: pour calculer le minimum, autant directement comparer les carrés de distance: ce sera déjà moins couteux, et conduit au même résultat.

    Pour une méthode encore plus approximative, on peut se contenter de dimension carrée:
    distance=abs(delta latitude+delta longitude)

    Mais j'ajouterais au minimum la taille du pays en plus des coordonnées du milieu: je serais assez déconcerté de sélectionner la Guyane, l'équateur, le pérou, la bolivie en plusieurs points du brésil très éloignés de ces plus petits pays.

    Edit: au temps pour moi, l'équateur n'est pas frontalier avec le brésil. Cependant avec cet algo, il y a le risque de le sélectionner depuis le Brésil, alors qu'en incluant la taille, on limite le risque.

  9. #9
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par deltree Voir le message
    le découpage en zone est effectivement la meilleure méthode.
    Je vais travailler sur ce concept pour voir.
    Citation Envoyé par deltree Voir le message
    1. le calcul de distance sera très incorrect surtout proche des cercles polaires (ce sont des angles, et pas des distances, il faudrait un calcul trigo)
    D'accord avec cette remarque sachant tout de même que plus on est proche des pôles moins il y a de pays.
    Citation Envoyé par deltree Voir le message
    2. inutile de calculer la racine SQRT: pour calculer le minimum, autant directement comparer les carrés de distance: ce sera déjà moins couteux, et conduit au même résultat.
    OK pour cette simplification
    Citation Envoyé par deltree Voir le message
    Pour une méthode encore plus approximative, on peut se contenter de dimension carrée: distance=abs(delta latitude+delta longitude)
    Je vais voir si cette simplification n'introduit pas de trop grandes incertitudes.
    Citation Envoyé par deltree Voir le message
    Mais j'ajouterais au minimum la taille du pays en plus des coordonnées du milieu
    Idée très intéressante, je vais voir aussi.

    En tout cas, merci à tous pour vos remarques
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. table latitude longitude recherche rectangle
    Par Bernabé01 dans le forum DB2
    Réponses: 3
    Dernier message: 13/05/2015, 15h12
  2. recherche 1 position (latitude longitude) la + proche
    Par 83stef dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 14/05/2007, 20h52
  3. recherche de jointure par requête
    Par vacknov dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2006, 22h21
  4. [Tomcat] répertoire de recherche de fichiers par defaut du tomcat
    Par Julia82 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 26/06/2006, 17h18
  5. Conversion Latitude,Longitude en UTM pour débutant.
    Par Messie dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/04/2006, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo