#1 Fri 10 February 2006 13:11
- casper
- Participant occasionnel
- Date d'inscription: 30 Nov 2005
- Messages: 21
Calcul de distance
Bonjour à tous,
J'aimerais savoir s'il est possible de calculer les distances entre chaque commune (730)et de centraliser
Ces données au sein d'une base de données ACCESS depuis MapInfo
Merci d'avance
David
Hors ligne
#2 Mon 13 February 2006 11:55
- pierre agha
- Participant actif
- Lieu: TOULOUSE
- Date d'inscription: 15 Oct 2005
- Messages: 97
Re: Calcul de distance
Il y a un outil MBX dispo à cette adresse qui pourrait vous intéresser mais c'est peut-être un peu laborieux.
http://www.directionsmag.com/files/index.php/view/268
Pour commencer, le calcul des distances entre des communes (polygones) prend en compte tous les sommets de tous les polygones. Cela risque de donner des résultats absurdes.
Dommage qu'il ne puisse pas prendre en compte les centroïdes. vous pouvez toujours créer une table qui reprend les centroïdes des communes et exécuter le mbx sur cette table.
Mais là encore, le mbx calcule la distance de chaque centroïde (devenu point) par rapport à tous les autres. Vous risquez donc d'avoir 700 enregistrements*700.
Bon courage
Hors ligne
#3 Mon 13 February 2006 15:45
- editeur
- Administrateur
- Date d'inscription: 15 Jun 2005
- Messages: 1527
Re: Calcul de distance
Pour avoir calculer quelques distanciers, je confirme il faut prévoir 730*730 enregistrements.
Mais la question est voulez-vous des distance à vol d'oiseaux ou voulez-vous une distance routière, dans ce cas là l'aller est différent du retour.
Hors ligne
#4 Tue 14 February 2006 08:29
- casper
- Participant occasionnel
- Date d'inscription: 30 Nov 2005
- Messages: 21
Re: Calcul de distance
Il s'agit de distance à vol d'oiseaux
L'outil MBX proposé par Pierre agha fonctionne très bien, il m'a effectivement créé une table 730*730.
Mais le problème est qu'il reprend les identifiants MapInfo (et non le nom des communes), si bien que j'ai du mal à savoir quel numéro correspond à quelle commune. Savez-vous comment obtenir le nom des communes dans la table générée par MapInfo (et non des chiffres)?
Merci pour vos réponses
Hors ligne
#5 Tue 14 February 2006 10:37
- Mataio
- Participant occasionnel
- Date d'inscription: 17 Oct 2005
- Messages: 39
Re: Calcul de distance
Bonjour,
L'autre solution serait de faire une table de correspondance qui associerait l'identifiant de l'objet graphique au nom de la commune qu'il représente et vous permettrait alors de mettre à jour votre nouvelle table en faisant un lien attributaire. Il faut pour cela accéder aux identifiants objets définis par MapInfo. Aprés quelques recherches, je n'ai pas trouvé de fonction permettant d'accéder à cette information. Il existe bien la fonction rowid, mais elle est une simple fonction d'incrémentation et ne permet en aucun cas d'accéder aux identifiants d'objets définis dans la table MapInfo. Je fais donc appel au GeoRezo.
Cordialement
Mataio
Hors ligne
#6 Tue 14 February 2006 13:32
- magali di salvo
- Participant actif
- Lieu: Lyon
- Date d'inscription: 21 Sep 2005
- Messages: 70
Re: Calcul de distance
bonjour,
une autre solution est de passer par une requête SQL, mais qui nécessite de dupliquer la table "commune" initiale car MapInfo ne permet pas de faire une multiplication d'une table sur elle même...
Etape 1: Ajouter à la table " commune.tab " une colonne quelconque appelée "jointure" de type entier initialisée à 0.
Cette colonne permet de faire le lien entre toutes les communes entre elles dans la clause "where" de la requête SQL de l'étape 3. S'il n'y a pas de "where", mapinfo refuse de faire la requête.
Etape 2: Dupliquer la table "commune" car mapinfo n'accepte pas les requêtes sur 2 fois la même table.
Ouvrir commune2.tab
Etape 3: Faire la requête suivante (utilisez la colonne INSEE ou NOM_COM en fonction de ce que vous voulez voir apparaitre dans le résultat de la sélection...)
Code:
Select commune.INSEE, commune2.INSEE, distance(centroidx(commune.obj), centroidy(commune.obj), centroidx(commune2.obj), centroidy(commune2.obj), "km") "distance" from commune, commune2 where commune.jointure=commune2.jointure order by distance into sel1
Etape 4: Exporter le résultat de la selection en dbf si vous voulez en faire une vraie matrice via un rapport de tableau croisé dynamique sous Excel...
S'il y a plus simple, ça m'intéresse aussi...
magali
Hors ligne
#7 Tue 14 February 2006 13:42
- Christophe
- Membre
- Lieu: Gaillac
- Date d'inscription: 23 Jun 2005
- Messages: 77
Re: Calcul de distance
Bonjour,
L' identifiant sur lequel peut se faire la jointure peut être constitué de la concaténétion du X et du Y des centroides des polygones dans la table des distances et dans la table des communes.
Ensuite la jointure pour récupérer les noms peut se faire sur ce nouvel identifiant créé. Tu obtiens donc une table des distances avec le nom de la commune de départ et le nom de la commune d' arrivée ( à vol d'oiseau ).
Bien à toi
Christophe
Hors ligne