#1 Mon 21 May 2007 16:58
- Gc
- Participant occasionnel
- Lieu: Aquitaine, Bordeaux
- Date d'inscription: 5 Sep 2005
- Messages: 40
Distance entre points dans une même table.
Bonjour
Je cherche à automatiser le calcul de distances entre un ensemble de points reliés par une relation commune
Par exemple, pour connaitre la distance parcourue par les salariés entre leur lieu d'emploi et leur lieu de résidence, j'ai donc dans une même table, pour chaque employé, le lieu d'emploi (INSEE et nom de ville) et le lieu de résidence (INSEE et nom de ville).
- Comment procéder pour calculer des distances entre un champs A et un champs B ?
- Existe-t-il une fonction spécifique ? Si oui laquelle et comment l'utiliser ?
- Dois-je duppliquer mes tables mais ensuite comment procéder ?
- ...
J'ai beau avoir effectué une recherche je n'ai pas trouvé de réponse à ce questionnement qui me semble répondre pourtant aux fonctionnalités de base d'un SIG.
Merci donc de vos aides.
Hors ligne
#2 Mon 21 May 2007 17:31
Re: Distance entre points dans une même table.
- Comment procéder pour calculer des distances entre un champs A et un champs B ?
Vous posez un peu les mauvaises questions. Une distance n'a pas vraiment de signification entre deux champs. C'est entre deux points que vous pouvez calculez une distance.
Quand vous dites automatisez, c'est par un peu de prog MapBasic, ou juste une série de manipulation MapInfo. Les deux sont possibles. Si vous avez MapBasic et quelques bases, ça ne sera pas trop difficile. Avec MapInfo seul, c'est un peu plus fastidueux, il faudra effectivement dupliquer les tables, mais c'est faisable aussi. Méthode à déterminer avant de poursuivre...
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#3 Mon 21 May 2007 18:45
Re: Distance entre points dans une même table.
Hello,
A partir du moment où vous avez des semis de points, vous pouvez utiliser ceci : Distance calculator
Il est ainsi possible de calculer des grilles entre deux tables ou au sein d'une même table.
j'ai donc dans une même table, pour chaque employé, le lieu d'emploi (INSEE et nom de ville) et le lieu de résidence (INSEE et nom de ville).
Si vous voulez que ça marche, il faut des coordonnées X/Y : essayez de demander à un ordinateur la distance de 69381 à 31555 (codes insee de lyon Ier arr. et toulouse). Que dira t il ? 37826 (69381-31555).
Normal, il n'y a pas de localisation géographique "chiffrée" associée
Hors ligne
#4 Tue 22 May 2007 08:26
- Gc
- Participant occasionnel
- Lieu: Aquitaine, Bordeaux
- Date d'inscription: 5 Sep 2005
- Messages: 40
Re: Distance entre points dans une même table.
Vous posez un peu les mauvaises questions. Une distance n'a pas vraiment de signification entre deux champs. C'est entre deux points que vous pouvez calculez une distance.
Quand vous dites automatisez, c'est par un peu de prog MapBasic, ou juste une série de manipulation MapInfo. Les deux sont possibles. Si vous avez MapBasic et quelques bases, ça ne sera pas trop difficile. Avec MapInfo seul, c'est un peu plus fastidueux, il faudra effectivement dupliquer les tables, mais c'est faisable aussi. Méthode à déterminer avant de poursuivre...
Merci de vos réponses à tous les deux ... effectivement, le calcul entre champs ... certes ...
Ne disposant pas de Mapbasic, je me réfugierais donc derrière une solution ou les tables seront duppliquées. Quelle méthode suivre alors pour effectuer ce calcul systématiquement ... et non pas "automatiquement" ?
Il semblerait exister une solution en précisant les coordonnées de chacun des points, mais comment préciser ces coordonnées dans une seul champs ? Le calcul peut-il sinon être effectué sur la base de deux champs (Coord. X et Coord Y ?) et si oui à l'aide quel(s) outil(s).
Merci pour le coup de main.
Hors ligne
#5 Tue 22 May 2007 09:26
Re: Distance entre points dans une même table.
L'outil que propose Robin pourrait convenir, mais je lis : "Return the minimal or all distances between objects." Or vous n'avez besoin que des distances spécifiés dans votre table... Ça se fait peut-être, mais dans le doute, poursuivons sur une manière un peu plus 'systématique'.
[...]
Oui, tiens, c'est le plus simple comme ça, au lieu de vouloir recréer les géométries, vous créez les coordonnées des points. Il y a surement dans un coin le calcul de distance entre deux points mais on va faire encore plus simple, car MapInfo ne peut faire de toute façon autrement : Distance = Racine((X1-X2)²+Y1-Y2)²). Il faut donc rajouter quatre champs.
La dénomination exacte pour trouver les coordonnées X et Y, je ne sais plus, mais s'il y a besoin, il y aura bien une âme charitable sur ce forum. Ça se terminer par .X et .Y, ça c'est sûr, mais l'intitulé du champ, ça doit être quelque chose du genre [Shape], [Area], [Point], [Centroid]... Bien sûr, tout cela dans l'outil 'remplir colonne'.
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#6 Tue 22 May 2007 09:37
Re: Distance entre points dans une même table.
Distance = Racine((X1-X2)²+Y1-Y2)²)
Attention c'est "à plat" (avec une projection cartésien) que cette formule est valable.
Pour des longues distances le calcul sera faussé.
Il y a la fonction Distance() aussi. Désolé le texte est en anglais mais c'est tout ce que j'ai.
Distance( ) function
Purpose : Returns the distance between two locations.
Syntax : Distance ( x1 , y1 , x2 , y2 , unit_name )
x1 and x2 are x-coordinates (e.g., longitude)
y1 and y2 are y-coordinates (e.g., latitude)
unit_name is a string representing the name of a distance unit (e.g., “km”)
Return Value : Float
Description
The Distance( ) function calculates the distance between two locations. The function returns the distance measurement in the units specified by the unit_name parameter; for example, to obtain a distance in miles, specify “mi” as the unit_name parameter.
See the Set Distance Units statement for the list of available unit names.
The x- and y-coordinate parameters must use MapBasic’s current coordinate system. By default, MapInfo Professional expects coordinates to use a longitude, latitude coordinate system. You can reset MapBasic’s coordinate system through the Set CoordSys statement. If the current coordinate system is an earth coordinate system, Distance( ) returns the greatcircle
distance between the two points. A great-circle distance is the shortest distance between two points on a sphere. (A great circle is a circle that goes around the earth, with the circle’s center at the center of the earth; a great-circle distance between two points is the distance along the great circle which connects the two points.)
For the most part, MI Pro performs a Cartesian or Spherical operation. Generally, a spherical operation is performed unless the coordinate system is nonEarth, in which case, a Cartesian operation is performed.
ExampleCode:
Dim dist, start_x, start_y, end_x, end_y As Float Open Table ”cities” Fetch First From cities start_x = CentroidX(cities.obj) start_y = CentroidY(cities.obj) Fetch Next From cities end_x = CentroidX(cities.obj) end_y = CentroidY(cities.obj) dist = Distance(start_x,start_y,end_x,end_y,”mi”)See Also
Area( ), ObjectLen( ), Set CoordSys, Set Distance Units
Voir aussi cette discussion sur ForumSIG
Hors ligne
#7 Tue 22 May 2007 09:54
Re: Distance entre points dans une même table.
Bien sûr, j'ai utilisé X et Y, c'était évident pour moi que c'était des coordonnées projetés en Lambert. Mais c'est vrai que ce n'est pas évident pour tout le monde.
Bien sûr, la distance n'est pas exacte, la projection Lambert n'est que conforme (conserve les angles), mais pour calculer des distances d'une ville à une autre, qui servira pour une étude de mouvement emploi / résidence, ce n'est pas forcément la peine de sortir l'artillerie de calcul de distance géodésique. (Il semble qu'au maximum, l'altération linéaire en France soit de 3 ppm, je pense que c'est une bonne marge d'erreur dans des applications classique de SIG, pour faire de la géodésie, c'est un autre problème).
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
#8 Sat 26 May 2007 17:41
- esgt
- Juste Inscrit !
- Date d'inscription: 26 May 2007
- Messages: 1
Re: Distance entre points dans une même table.
Bonjour,
Dans ma table de données j'ai de nombreux centres référencés et positionnés sur ma carte. J'ai également le nom d'arrêts de bus également positionnés.
J'aimerai, après avoir sélectionné un centre, avoir une requête qui sélectionnearit l'arrêt de bus le plus proche.
Je n'ai pas les coordonnées des centres et des bus dans ma base de données mais mes cartes sont géoréférencées. D'abord: est-il possible d'ajouter automatiquement 2 colonnes dans la BD avec les coordoonées X et Y des points (centres et arrêts)? Y'a-t-il une fonction qui calculerait automatiquement ces distances et renverrait la plus courte?
Merci de l'aide que vous pourriez m'apporter!
Hors ligne
#9 Sun 27 May 2007 12:32
- Maurice
- Membre
- Lieu: Montpellier
- Date d'inscription: 5 Sep 2005
- Messages: 5331
Re: Distance entre points dans une même table.
Bonjour,
Bien qu'il fasse le calcul pour tous les points d'une table (même non munie des champs X,Y des coordonnées des points) et pas sur la seule sélection, l'outil évoqué plus haut au post #3 me paraît bien correspondre...
Hors ligne