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

Python Discussion :

Conversion de latitudes et longitude en index en python [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 55
    Par défaut Conversion de latitudes et longitude en index en python
    Bonjour à tous,

    Je suis débutant sur Python, et je m'initie actuellement via un site

    Je bloque sur une procédure servant à convertir des latitudes & longitudes en index, pour faciliter les recherches.

    Quelqu'un peut il m'expliquer la logique de fonctionnement svp ?

    Mon problème est avec le code suivant:
    "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    class Zone:
     
        ZONES = []
        MIN_LONGITUDE_DEGREES = -180
        MAX_LONGITUDE_DEGREES = 180
        MIN_LATITUDE_DEGREES = -90
        MAX_LATITUDE_DEGREES = 90
        WIDTH_DEGREES = 1 # degrees of longitude
        HEIGHT_DEGREES = 1 # degrees of latitude
     
        def __init__(self, corner1, corner2):
            self.corner1 = corner1
            self.corner2 = corner2
            self.inhabitants = []
     
        @property
        def population(self):
            return len(self.inhabitants)
     
        def add_inhabitant(self, inhabitant):
            self.inhabitants.append(inhabitant)
     
        def contains(self, position):
            return position.longitude >= min(self.corner1.longitude, self.corner2.longitude) and \
                position.longitude < max(self.corner1.longitude, self.corner2.longitude) and \
                position.latitude >= min(self.corner1.latitude, self.corner2.latitude) and \
                position.latitude < max(self.corner1.latitude, self.corner2.latitude)
     
        @classmethod
        def find_zone_that_contains(cls, position):
            # Compute the index in the ZONES array that contains the given position
            longitude_index = int((position.longitude_degrees - cls.MIN_LONGITUDE_DEGREES)/ cls.WIDTH_DEGREES)
            latitude_index = int((position.latitude_degrees - cls.MIN_LATITUDE_DEGREES)/ cls.HEIGHT_DEGREES)
            longitude_bins = int((cls.MAX_LONGITUDE_DEGREES - cls.MIN_LONGITUDE_DEGREES) / cls.WIDTH_DEGREES) # 180-(-180) / 1
            zone_index = latitude_index * longitude_bins + longitude_index
     
            # Just checking that the index is correct
            zone = cls.ZONES[zone_index]
            assert zone.contains(position)
     
            return zone
    "
    Par avance merci de vos lumieres :-)

    Cédric

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Les longitudes et latitudes définissent une grille. Et tu numérotes chaque élément de la grille par un index comme ci dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    +------+------+------+-----+------+-----+
    |  18  |  19  |  20  |  21 | 22   |  23 |    ligne 3
    +------+------+------+-----+------+-----+
    |  12  |  13  |  14  |  15 |  16  |  17 |     ligne 2
    +------+------+------+-----+------+-----+
    |  6   |  7   |  8   |  9  |  10  |  11 |     ligne 1
    +------+------+------+-----+------+-----+
    |  0   |  1   | 2    | 3   |  4   |  5  |     ligne 0
    +------+------+------+-----+------+-----+   
     
    col0    col1      ......            col5

    Si ta grille contient c colonnes (c=6 sur l'exemple), tu vois que l'index d'une case n'est autre que : numéro_de_ligne_de_la_case * c + numéro_de_colonne_de_la_case.

    C'est ce qui est traduit dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    zone_index = latitude_index * longitude_bins + longitude_index

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2015
    Messages : 55
    Par défaut
    Merci beaucoup, c'est très clair :-)

    Bonne journée
    Cédric

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

Discussions similaires

  1. Conversion entre un "enum" et l'index (int) d'une table
    Par Chavadam dans le forum Langage
    Réponses: 4
    Dernier message: 27/07/2009, 18h20
  2. Obtenir la latitude et longitude
    Par speed034 dans le forum Langage
    Réponses: 4
    Dernier message: 17/12/2008, 09h55
  3. API Google maps latitude et longitude ?
    Par knoxville dans le forum Langage
    Réponses: 1
    Dernier message: 21/10/2008, 16h54
  4. transformer latitude et longitude en coordonnées X,Y,Z
    Par ram-0000 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 26/03/2008, 12h32

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