OVH Cloud OVH Cloud

Active X Mappoint

8 réponses
Avatar
B. Neve
Bonjour,

Je sais que certains d'entre vous utilisent MapPoint 2004 dans leur
application. Après avoir longuement cherché, j'ai (enfin) trouvé un bout de
code qui permettrait de recevoir la latitude et la longitude en fonction
d'un point sélectionné sur la carte. Cela ouvre bien évidemment des grandes
perspectives pour la gestion des tournées etc etc...

Il me reste cependant un petit problème et je fais appel donc à vous.
L'idée est donc d'avoir DANS une fenêtre Windev, une carte et des toolbars
de Mappoint. Ensuite, lorsque l'on a trouvé le point pour lequel on veut
connaître la Longitude et la Latitude, on fait Shift+Clic. Cela déclenche
alors la procédure de calcul. Seulement voilà, autant la Latitude est
correcte, autant la longitude ne l'est pas. Si quelqu'un a des connaissances
de géo, il pourra peut-être trouver la solution.

Pour parvenir à faire les tests, il suffit de créer une fenêtre avec champ
active X (ObjMap) dedans. Ensuite, donner à cette Fenêtre la propriété
maximisée à l'ouverture et ajouter un barre de message

L'active X se nomme ObjMap dans l'exemple.

Voici le code que j'utilise

// Initialisation de ObjMap
ObjMap>>NewMap(2)
ObjMap>>Units=1
ObjMap>>Appearance(1)
ActiveXEvénement("bibi",ObjMap,"BeforeClick")

// Initialisation de la fenêtre
//Faire apparaître les barres d'outils
OBJDYN est un objet OLE dynamique
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(1)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(2)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
libérer OBJDYN


//Fermeture de la fenêtre
ObjMap>>ActiveMap>>Saved = OLETrue
ObjMap>>CloseMap



//Procédure globale de la fenêtre qui sera appelée lorsque l'on clique sur
la carte de l'Active X
PROCEDURE OnClick()
Mylat,mylon are currency
IF ToucheEnfoncée(teShift) THEN
Message(ObjMap>>activemap>>Pixelsize)
XX is currency
YY is currency
Res est un entier = CurseurPos ( cpClient )
SI Res <> -1 ALORS
XX=PoidsFaible(Res)-ObjMap..X
YY=PoidsFort(Res)-ObjMap..Y
FIN
Message(XX+"-"+YY)
YY-=53
XX-=2
Omap est un objet OLE dynamique
Omap = ObjMap>>ActiveMap
OLoc est un objet OLE dynamique
OLoc = Omap>>XYToLocation(XX, YY)
ObjMap>>ActiveMap>>AddPushpin(OLoc,"Warehouse")
CalcPos(Omap, OLoc, Mylat, mylon)
Message("Lat : "+Mylat+" Lon : "+mylon)
END




//Procédure qui détermine la Latitude et la Longitude à partir du point
cliqué
PROCEDURE CalcPos(OBJMM,locX,DblLat,DblLon)
locNorthPole est un objet OLE dynamique
locSantaCruz est un objet OLE dynamique
dblHalfEarth is currency
dblQuarterEarth is currency
l is currency
d is currency
locNorthPole=OBJMM>>GetLocation(90, 0)
locSantaCruz=OBJMM>>GetLocation(0, -90)
dblHalfEarth=OBJMM>>Distance(locNorthPole,OBJMM>>GetLocation(-90, 0))
//Quarter of that is the max distance a point may be away from locSantaCruz
and still be in western hemisphere
dblQuarterEarth = dblHalfEarth / 2
// Compute latitude from distance to north pole
DblLat = 90 - 180 * OBJMM>>Distance(locNorthPole, locX) / dblHalfEarth
// Compute great circle distance to locX from point on Greenwich meridian
and computed Latitude
d = OBJMM>>Distance(OBJMM>>GetLocation(DblLat, 0), locX)
//convert latitude to radian
l = (DblLat / 180) * ValPI
//Compute Longitude from great circle distance
blub is real sur 8
DblLon = 180 * ArcCos((Cos((d * 2 * ValPI) / (2 * dblHalfEarth)) - Sin(l) *
Sin(l)) / (Cos(l) * Cos(l))) / ValPI
IF OBJMM>>Distance(locSantaCruz, locX) < dblQuarterEarth THEN DblLon
= -DblLon
RETURN

Cette fonction est basée sur du code VB que j'ai trouvé ici... Je ne vois
cependant pas où j'ai commis une faute.

Pour ceux que cela intéresse, tout cela est dans une fenêtre (V9) et il n'y
a qu'à demander. Il faut bien évidemment Mappoint installé sur la machine
pour le fonctionnement. CQFD

Merci d'avance,


Benoît Nève

8 réponses

Avatar
Guillaume
Bonjour,
Je serais interessé par votre fenetre en WD 9 , j'essaye aussi de
developper avec mappoint 04 , pas forcement facile ...
Merci d'avance
Guillaume
Avatar
Dev
Bonjour,
il me semble que VB et Windev ne fonctionnent pas de la même manière.
J'avais ,pour cette raison, me semble-t'il me souvenir, contourné de la
manière suivante dans MapPoint2002 :

dblLon = :F_Arccos((:F_CosVB((vl_r_d * 2 * ValPI) / (2 *
vl_r_dblHalfEarth)) - :F_SinVB(vl_r_l) * :F_SinVB(vl_r_l)) /
(:F_CosVB(vl_r_l) * :F_CosVB(vl_r_l)))

PROCEDURE F_CosVB(x)
RENVOYER Cosinus(180*x / ValPI)

PROCEDURE F_SinVB(x)
RENVOYER Sinus( 180 * x / ValPI )

PROCEDURE F_Arccos(x est un réel)
RENVOYER ArcTang(-x / Racine(-x * x + 1)) + (2 * ArcTang(1))


--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"B. Neve" a écrit dans le message de
news:42e50d4e$0$1985$
Bonjour,

Je sais que certains d'entre vous utilisent MapPoint 2004 dans leur
application. Après avoir longuement cherché, j'ai (enfin) trouvé un bout


de
code qui permettrait de recevoir la latitude et la longitude en fonction
d'un point sélectionné sur la carte. Cela ouvre bien évidemment des


grandes
perspectives pour la gestion des tournées etc etc...

Il me reste cependant un petit problème et je fais appel donc à vous.
L'idée est donc d'avoir DANS une fenêtre Windev, une carte et des toolbars
de Mappoint. Ensuite, lorsque l'on a trouvé le point pour lequel on veut
connaître la Longitude et la Latitude, on fait Shift+Clic. Cela déclenche
alors la procédure de calcul. Seulement voilà, autant la Latitude est
correcte, autant la longitude ne l'est pas. Si quelqu'un a des


connaissances
de géo, il pourra peut-être trouver la solution.

Pour parvenir à faire les tests, il suffit de créer une fenêtre avec champ
active X (ObjMap) dedans. Ensuite, donner à cette Fenêtre la propriété
maximisée à l'ouverture et ajouter un barre de message

L'active X se nomme ObjMap dans l'exemple.

Voici le code que j'utilise

// Initialisation de ObjMap
ObjMap>>NewMap(2)
ObjMap>>Units=1
ObjMap>>Appearance(1)
ActiveXEvénement("bibi",ObjMap,"BeforeClick")

// Initialisation de la fenêtre
//Faire apparaître les barres d'outils
OBJDYN est un objet OLE dynamique
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(1)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(2)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
libérer OBJDYN


//Fermeture de la fenêtre
ObjMap>>ActiveMap>>Saved = OLETrue
ObjMap>>CloseMap



//Procédure globale de la fenêtre qui sera appelée lorsque l'on clique sur
la carte de l'Active X
PROCEDURE OnClick()
Mylat,mylon are currency
IF ToucheEnfoncée(teShift) THEN
Message(ObjMap>>activemap>>Pixelsize)
XX is currency
YY is currency
Res est un entier = CurseurPos ( cpClient )
SI Res <> -1 ALORS
XX=PoidsFaible(Res)-ObjMap..X
YY=PoidsFort(Res)-ObjMap..Y
FIN
Message(XX+"-"+YY)
YY-S
XX-=2
Omap est un objet OLE dynamique
Omap = ObjMap>>ActiveMap
OLoc est un objet OLE dynamique
OLoc = Omap>>XYToLocation(XX, YY)
ObjMap>>ActiveMap>>AddPushpin(OLoc,"Warehouse")
CalcPos(Omap, OLoc, Mylat, mylon)
Message("Lat : "+Mylat+" Lon : "+mylon)
END




//Procédure qui détermine la Latitude et la Longitude à partir du point
cliqué
PROCEDURE CalcPos(OBJMM,locX,DblLat,DblLon)
locNorthPole est un objet OLE dynamique
locSantaCruz est un objet OLE dynamique
dblHalfEarth is currency
dblQuarterEarth is currency
l is currency
d is currency
locNorthPole=OBJMM>>GetLocation(90, 0)
locSantaCruz=OBJMM>>GetLocation(0, -90)
dblHalfEarth=OBJMM>>Distance(locNorthPole,OBJMM>>GetLocation(-90, 0))
//Quarter of that is the max distance a point may be away from


locSantaCruz
and still be in western hemisphere
dblQuarterEarth = dblHalfEarth / 2
// Compute latitude from distance to north pole
DblLat = 90 - 180 * OBJMM>>Distance(locNorthPole, locX) / dblHalfEarth
// Compute great circle distance to locX from point on Greenwich meridian
and computed Latitude
d = OBJMM>>Distance(OBJMM>>GetLocation(DblLat, 0), locX)
//convert latitude to radian
l = (DblLat / 180) * ValPI
//Compute Longitude from great circle distance
blub is real sur 8
DblLon = 180 * ArcCos((Cos((d * 2 * ValPI) / (2 * dblHalfEarth)) - Sin(l)


*
Sin(l)) / (Cos(l) * Cos(l))) / ValPI
IF OBJMM>>Distance(locSantaCruz, locX) < dblQuarterEarth THEN DblLon
= -DblLon
RETURN

Cette fonction est basée sur du code VB que j'ai trouvé ici... Je ne vois
cependant pas où j'ai commis une faute.

Pour ceux que cela intéresse, tout cela est dans une fenêtre (V9) et il


n'y
a qu'à demander. Il faut bien évidemment Mappoint installé sur la machine
pour le fonctionnement. CQFD

Merci d'avance,


Benoît Nève




Avatar
B. Neve
Je m'en vais tester cela immédiatement...

Merci

"Dev" a écrit dans le message de news:
42e5e744$0$2377$
Bonjour,
il me semble que VB et Windev ne fonctionnent pas de la même manière.
J'avais ,pour cette raison, me semble-t'il me souvenir, contourné de la
manière suivante dans MapPoint2002 :

dblLon = :F_Arccos((:F_CosVB((vl_r_d * 2 * ValPI) / (2 *
vl_r_dblHalfEarth)) - :F_SinVB(vl_r_l) * :F_SinVB(vl_r_l)) /
(:F_CosVB(vl_r_l) * :F_CosVB(vl_r_l)))

PROCEDURE F_CosVB(x)
RENVOYER Cosinus(180*x / ValPI)

PROCEDURE F_SinVB(x)
RENVOYER Sinus( 180 * x / ValPI )

PROCEDURE F_Arccos(x est un réel)
RENVOYER ArcTang(-x / Racine(-x * x + 1)) + (2 * ArcTang(1))


--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"B. Neve" a écrit dans le message de
news:42e50d4e$0$1985$
Bonjour,

Je sais que certains d'entre vous utilisent MapPoint 2004 dans leur
application. Après avoir longuement cherché, j'ai (enfin) trouvé un bout


de
code qui permettrait de recevoir la latitude et la longitude en fonction
d'un point sélectionné sur la carte. Cela ouvre bien évidemment des


grandes
perspectives pour la gestion des tournées etc etc...

Il me reste cependant un petit problème et je fais appel donc à vous.
L'idée est donc d'avoir DANS une fenêtre Windev, une carte et des
toolbars
de Mappoint. Ensuite, lorsque l'on a trouvé le point pour lequel on veut
connaître la Longitude et la Latitude, on fait Shift+Clic. Cela déclenche
alors la procédure de calcul. Seulement voilà, autant la Latitude est
correcte, autant la longitude ne l'est pas. Si quelqu'un a des


connaissances
de géo, il pourra peut-être trouver la solution.

Pour parvenir à faire les tests, il suffit de créer une fenêtre avec
champ
active X (ObjMap) dedans. Ensuite, donner à cette Fenêtre la propriété
maximisée à l'ouverture et ajouter un barre de message

L'active X se nomme ObjMap dans l'exemple.

Voici le code que j'utilise

// Initialisation de ObjMap
ObjMap>>NewMap(2)
ObjMap>>Units=1
ObjMap>>Appearance(1)
ActiveXEvénement("bibi",ObjMap,"BeforeClick")

// Initialisation de la fenêtre
//Faire apparaître les barres d'outils
OBJDYN est un objet OLE dynamique
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(1)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(2)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
libérer OBJDYN


//Fermeture de la fenêtre
ObjMap>>ActiveMap>>Saved = OLETrue
ObjMap>>CloseMap



//Procédure globale de la fenêtre qui sera appelée lorsque l'on clique
sur
la carte de l'Active X
PROCEDURE OnClick()
Mylat,mylon are currency
IF ToucheEnfoncée(teShift) THEN
Message(ObjMap>>activemap>>Pixelsize)
XX is currency
YY is currency
Res est un entier = CurseurPos ( cpClient )
SI Res <> -1 ALORS
XX=PoidsFaible(Res)-ObjMap..X
YY=PoidsFort(Res)-ObjMap..Y
FIN
Message(XX+"-"+YY)
YY-S
XX-=2
Omap est un objet OLE dynamique
Omap = ObjMap>>ActiveMap
OLoc est un objet OLE dynamique
OLoc = Omap>>XYToLocation(XX, YY)
ObjMap>>ActiveMap>>AddPushpin(OLoc,"Warehouse")
CalcPos(Omap, OLoc, Mylat, mylon)
Message("Lat : "+Mylat+" Lon : "+mylon)
END




//Procédure qui détermine la Latitude et la Longitude à partir du point
cliqué
PROCEDURE CalcPos(OBJMM,locX,DblLat,DblLon)
locNorthPole est un objet OLE dynamique
locSantaCruz est un objet OLE dynamique
dblHalfEarth is currency
dblQuarterEarth is currency
l is currency
d is currency
locNorthPole=OBJMM>>GetLocation(90, 0)
locSantaCruz=OBJMM>>GetLocation(0, -90)
dblHalfEarth=OBJMM>>Distance(locNorthPole,OBJMM>>GetLocation(-90, 0))
//Quarter of that is the max distance a point may be away from


locSantaCruz
and still be in western hemisphere
dblQuarterEarth = dblHalfEarth / 2
// Compute latitude from distance to north pole
DblLat = 90 - 180 * OBJMM>>Distance(locNorthPole, locX) / dblHalfEarth
// Compute great circle distance to locX from point on Greenwich meridian
and computed Latitude
d = OBJMM>>Distance(OBJMM>>GetLocation(DblLat, 0), locX)
//convert latitude to radian
l = (DblLat / 180) * ValPI
//Compute Longitude from great circle distance
blub is real sur 8
DblLon = 180 * ArcCos((Cos((d * 2 * ValPI) / (2 * dblHalfEarth)) - Sin(l)


*
Sin(l)) / (Cos(l) * Cos(l))) / ValPI
IF OBJMM>>Distance(locSantaCruz, locX) < dblQuarterEarth THEN DblLon
= -DblLon
RETURN

Cette fonction est basée sur du code VB que j'ai trouvé ici... Je ne vois
cependant pas où j'ai commis une faute.

Pour ceux que cela intéresse, tout cela est dans une fenêtre (V9) et il


n'y
a qu'à demander. Il faut bien évidemment Mappoint installé sur la machine
pour le fonctionnement. CQFD

Merci d'avance,


Benoît Nève








Avatar
B. Neve
Absolument parfait...

Un grand merci, à charge de revanche.

Benoit

"Dev" a écrit dans le message de news:
42e5e744$0$2377$
Bonjour,
il me semble que VB et Windev ne fonctionnent pas de la même manière.
J'avais ,pour cette raison, me semble-t'il me souvenir, contourné de la
manière suivante dans MapPoint2002 :

dblLon = :F_Arccos((:F_CosVB((vl_r_d * 2 * ValPI) / (2 *
vl_r_dblHalfEarth)) - :F_SinVB(vl_r_l) * :F_SinVB(vl_r_l)) /
(:F_CosVB(vl_r_l) * :F_CosVB(vl_r_l)))

PROCEDURE F_CosVB(x)
RENVOYER Cosinus(180*x / ValPI)

PROCEDURE F_SinVB(x)
RENVOYER Sinus( 180 * x / ValPI )

PROCEDURE F_Arccos(x est un réel)
RENVOYER ArcTang(-x / Racine(-x * x + 1)) + (2 * ArcTang(1))


--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"B. Neve" a écrit dans le message de
news:42e50d4e$0$1985$
Bonjour,

Je sais que certains d'entre vous utilisent MapPoint 2004 dans leur
application. Après avoir longuement cherché, j'ai (enfin) trouvé un bout


de
code qui permettrait de recevoir la latitude et la longitude en fonction
d'un point sélectionné sur la carte. Cela ouvre bien évidemment des


grandes
perspectives pour la gestion des tournées etc etc...

Il me reste cependant un petit problème et je fais appel donc à vous.
L'idée est donc d'avoir DANS une fenêtre Windev, une carte et des
toolbars
de Mappoint. Ensuite, lorsque l'on a trouvé le point pour lequel on veut
connaître la Longitude et la Latitude, on fait Shift+Clic. Cela déclenche
alors la procédure de calcul. Seulement voilà, autant la Latitude est
correcte, autant la longitude ne l'est pas. Si quelqu'un a des


connaissances
de géo, il pourra peut-être trouver la solution.

Pour parvenir à faire les tests, il suffit de créer une fenêtre avec
champ
active X (ObjMap) dedans. Ensuite, donner à cette Fenêtre la propriété
maximisée à l'ouverture et ajouter un barre de message

L'active X se nomme ObjMap dans l'exemple.

Voici le code que j'utilise

// Initialisation de ObjMap
ObjMap>>NewMap(2)
ObjMap>>Units=1
ObjMap>>Appearance(1)
ActiveXEvénement("bibi",ObjMap,"BeforeClick")

// Initialisation de la fenêtre
//Faire apparaître les barres d'outils
OBJDYN est un objet OLE dynamique
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(1)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
OBJDYN=ObjMap>>Toolbars>>ITEM(2)
OBJDYN>>Visible=OLETrue
MultitâcheRepeint()
libérer OBJDYN


//Fermeture de la fenêtre
ObjMap>>ActiveMap>>Saved = OLETrue
ObjMap>>CloseMap



//Procédure globale de la fenêtre qui sera appelée lorsque l'on clique
sur
la carte de l'Active X
PROCEDURE OnClick()
Mylat,mylon are currency
IF ToucheEnfoncée(teShift) THEN
Message(ObjMap>>activemap>>Pixelsize)
XX is currency
YY is currency
Res est un entier = CurseurPos ( cpClient )
SI Res <> -1 ALORS
XX=PoidsFaible(Res)-ObjMap..X
YY=PoidsFort(Res)-ObjMap..Y
FIN
Message(XX+"-"+YY)
YY-S
XX-=2
Omap est un objet OLE dynamique
Omap = ObjMap>>ActiveMap
OLoc est un objet OLE dynamique
OLoc = Omap>>XYToLocation(XX, YY)
ObjMap>>ActiveMap>>AddPushpin(OLoc,"Warehouse")
CalcPos(Omap, OLoc, Mylat, mylon)
Message("Lat : "+Mylat+" Lon : "+mylon)
END




//Procédure qui détermine la Latitude et la Longitude à partir du point
cliqué
PROCEDURE CalcPos(OBJMM,locX,DblLat,DblLon)
locNorthPole est un objet OLE dynamique
locSantaCruz est un objet OLE dynamique
dblHalfEarth is currency
dblQuarterEarth is currency
l is currency
d is currency
locNorthPole=OBJMM>>GetLocation(90, 0)
locSantaCruz=OBJMM>>GetLocation(0, -90)
dblHalfEarth=OBJMM>>Distance(locNorthPole,OBJMM>>GetLocation(-90, 0))
//Quarter of that is the max distance a point may be away from


locSantaCruz
and still be in western hemisphere
dblQuarterEarth = dblHalfEarth / 2
// Compute latitude from distance to north pole
DblLat = 90 - 180 * OBJMM>>Distance(locNorthPole, locX) / dblHalfEarth
// Compute great circle distance to locX from point on Greenwich meridian
and computed Latitude
d = OBJMM>>Distance(OBJMM>>GetLocation(DblLat, 0), locX)
//convert latitude to radian
l = (DblLat / 180) * ValPI
//Compute Longitude from great circle distance
blub is real sur 8
DblLon = 180 * ArcCos((Cos((d * 2 * ValPI) / (2 * dblHalfEarth)) - Sin(l)


*
Sin(l)) / (Cos(l) * Cos(l))) / ValPI
IF OBJMM>>Distance(locSantaCruz, locX) < dblQuarterEarth THEN DblLon
= -DblLon
RETURN

Cette fonction est basée sur du code VB que j'ai trouvé ici... Je ne vois
cependant pas où j'ai commis une faute.

Pour ceux que cela intéresse, tout cela est dans une fenêtre (V9) et il


n'y
a qu'à demander. Il faut bien évidemment Mappoint installé sur la machine
pour le fonctionnement. CQFD

Merci d'avance,


Benoît Nève








Avatar
Dev
Bonjour,
j'ai posté une suggestion sur wdforge :
http://www.wdforge.org/modules/newbb/viewtopic.php?topic_id%59&forum=6

si ca te dit, contacte moi en privé ...

--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"B. Neve" a écrit dans le message de
news:42e648e9$0$30458$
Absolument parfait...

Un grand merci, à charge de revanche.

Benoit

"Dev" a écrit dans le message de news:
42e5e744$0$2377$
> Bonjour,
> il me semble que VB et Windev ne fonctionnent pas de la même manière.
> J'avais ,pour cette raison, me semble-t'il me souvenir, contourné de la
> manière suivante dans MapPoint2002 :
>
> dblLon = :F_Arccos((:F_CosVB((vl_r_d * 2 * ValPI) / (2 *
> vl_r_dblHalfEarth)) - :F_SinVB(vl_r_l) * :F_SinVB(vl_r_l)) /
> (:F_CosVB(vl_r_l) * :F_CosVB(vl_r_l)))
>
> PROCEDURE F_CosVB(x)
> RENVOYER Cosinus(180*x / ValPI)
>
> PROCEDURE F_SinVB(x)
> RENVOYER Sinus( 180 * x / ValPI )
>
> PROCEDURE F_Arccos(x est un réel)
> RENVOYER ArcTang(-x / Racine(-x * x + 1)) + (2 * ArcTang(1))
>
>
> --
> Cordialement
> Christophe Charron
>
> Service Développement
> PROLOGIQ
> 7 bis Rue des Aulnes
> 69410 Champagne au Mont d'Or
>
> Tel : 0 437 499 107
> Fax : 0 437 499 105
> mailto:
>
> "B. Neve" a écrit dans le message de
> news:42e50d4e$0$1985$
>> Bonjour,
>>
>> Je sais que certains d'entre vous utilisent MapPoint 2004 dans leur
>> application. Après avoir longuement cherché, j'ai (enfin) trouvé un


bout
> de
>> code qui permettrait de recevoir la latitude et la longitude en


fonction
>> d'un point sélectionné sur la carte. Cela ouvre bien évidemment des
> grandes
>> perspectives pour la gestion des tournées etc etc...
>>
>> Il me reste cependant un petit problème et je fais appel donc à vous.
>> L'idée est donc d'avoir DANS une fenêtre Windev, une carte et des
>> toolbars
>> de Mappoint. Ensuite, lorsque l'on a trouvé le point pour lequel on


veut
>> connaître la Longitude et la Latitude, on fait Shift+Clic. Cela


déclenche
>> alors la procédure de calcul. Seulement voilà, autant la Latitude est
>> correcte, autant la longitude ne l'est pas. Si quelqu'un a des
> connaissances
>> de géo, il pourra peut-être trouver la solution.
>>
>> Pour parvenir à faire les tests, il suffit de créer une fenêtre avec
>> champ
>> active X (ObjMap) dedans. Ensuite, donner à cette Fenêtre la propriété
>> maximisée à l'ouverture et ajouter un barre de message
>>
>> L'active X se nomme ObjMap dans l'exemple.
>>
>> Voici le code que j'utilise
>>
>> // Initialisation de ObjMap
>> ObjMap>>NewMap(2)
>> ObjMap>>Units=1
>> ObjMap>>Appearance(1)
>> ActiveXEvénement("bibi",ObjMap,"BeforeClick")
>>
>> // Initialisation de la fenêtre
>> //Faire apparaître les barres d'outils
>> OBJDYN est un objet OLE dynamique
>> MultitâcheRepeint()
>> OBJDYN=ObjMap>>Toolbars>>ITEM(1)
>> OBJDYN>>Visible=OLETrue
>> MultitâcheRepeint()
>> OBJDYN=ObjMap>>Toolbars>>ITEM(2)
>> OBJDYN>>Visible=OLETrue
>> MultitâcheRepeint()
>> libérer OBJDYN
>>
>>
>> //Fermeture de la fenêtre
>> ObjMap>>ActiveMap>>Saved = OLETrue
>> ObjMap>>CloseMap
>>
>>
>>
>> //Procédure globale de la fenêtre qui sera appelée lorsque l'on clique
>> sur
>> la carte de l'Active X
>> PROCEDURE OnClick()
>> Mylat,mylon are currency
>> IF ToucheEnfoncée(teShift) THEN
>> Message(ObjMap>>activemap>>Pixelsize)
>> XX is currency
>> YY is currency
>> Res est un entier = CurseurPos ( cpClient )
>> SI Res <> -1 ALORS
>> XX=PoidsFaible(Res)-ObjMap..X
>> YY=PoidsFort(Res)-ObjMap..Y
>> FIN
>> Message(XX+"-"+YY)
>> YY-S
>> XX-=2
>> Omap est un objet OLE dynamique
>> Omap = ObjMap>>ActiveMap
>> OLoc est un objet OLE dynamique
>> OLoc = Omap>>XYToLocation(XX, YY)
>> ObjMap>>ActiveMap>>AddPushpin(OLoc,"Warehouse")
>> CalcPos(Omap, OLoc, Mylat, mylon)
>> Message("Lat : "+Mylat+" Lon : "+mylon)
>> END
>>
>>
>>
>>
>> //Procédure qui détermine la Latitude et la Longitude à partir du point
>> cliqué
>> PROCEDURE CalcPos(OBJMM,locX,DblLat,DblLon)
>> locNorthPole est un objet OLE dynamique
>> locSantaCruz est un objet OLE dynamique
>> dblHalfEarth is currency
>> dblQuarterEarth is currency
>> l is currency
>> d is currency
>> locNorthPole=OBJMM>>GetLocation(90, 0)
>> locSantaCruz=OBJMM>>GetLocation(0, -90)
>> dblHalfEarth=OBJMM>>Distance(locNorthPole,OBJMM>>GetLocation(-90, 0))
>> //Quarter of that is the max distance a point may be away from
> locSantaCruz
>> and still be in western hemisphere
>> dblQuarterEarth = dblHalfEarth / 2
>> // Compute latitude from distance to north pole
>> DblLat = 90 - 180 * OBJMM>>Distance(locNorthPole, locX) / dblHalfEarth
>> // Compute great circle distance to locX from point on Greenwich


meridian
>> and computed Latitude
>> d = OBJMM>>Distance(OBJMM>>GetLocation(DblLat, 0), locX)
>> //convert latitude to radian
>> l = (DblLat / 180) * ValPI
>> //Compute Longitude from great circle distance
>> blub is real sur 8
>> DblLon = 180 * ArcCos((Cos((d * 2 * ValPI) / (2 * dblHalfEarth)) -


Sin(l)
> *
>> Sin(l)) / (Cos(l) * Cos(l))) / ValPI
>> IF OBJMM>>Distance(locSantaCruz, locX) < dblQuarterEarth THEN DblLon
>> = -DblLon
>> RETURN
>>
>> Cette fonction est basée sur du code VB que j'ai trouvé ici... Je ne


vois
>> cependant pas où j'ai commis une faute.
>>
>> Pour ceux que cela intéresse, tout cela est dans une fenêtre (V9) et il
> n'y
>> a qu'à demander. Il faut bien évidemment Mappoint installé sur la


machine
>> pour le fonctionnement. CQFD
>>
>> Merci d'avance,
>>
>>
>> Benoît Nève
>>
>>
>
>




Avatar
Guillaume
Bonjour,
Merci pour l'envoi de la fenetre , cela ma permis de commencer mon
appli , encore un grand merci
C'est vrai qu'une mutualisation de bouts de codes , d'experiences ....
serait un plus car des exemples WD + Map 02 ou 04 sont tres rares !
Donc si je peux participer , pas de probleme (malgré ma jeune
experience)
Guillaume
Avatar
Guillaume
Bonjour,
Merci pour l'envoi de la fenetre , cela ma permis de commencer mon
appli , encore un grand merci
C'est vrai qu'une mutualisation de bouts de codes , d'experiences ....
serait un plus car des exemples WD + Map 02 ou 04 sont tres rares !
Donc si je peux participer , pas de probleme (malgré ma jeune
experience)
Guillaume
Avatar
Dev
Bonjour,
je suis également preneur de cette fenêtre ...

--
Cordialement
Christophe Charron

Service Développement
PROLOGIQ
7 bis Rue des Aulnes
69410 Champagne au Mont d'Or

Tel : 0 437 499 107
Fax : 0 437 499 105
mailto:

"B. Neve" a écrit dans le message de
news:42e648e9$0$30458$
Absolument parfait...

Un grand merci, à charge de revanche.

Benoit

"Dev" a écrit dans le message de news:
42e5e744$0$2377$
> Bonjour,
> il me semble que VB et Windev ne fonctionnent pas de la même manière.
> J'avais ,pour cette raison, me semble-t'il me souvenir, contourné de la
> manière suivante dans MapPoint2002 :
>
> dblLon = :F_Arccos((:F_CosVB((vl_r_d * 2 * ValPI) / (2 *
> vl_r_dblHalfEarth)) - :F_SinVB(vl_r_l) * :F_SinVB(vl_r_l)) /
> (:F_CosVB(vl_r_l) * :F_CosVB(vl_r_l)))
>
> PROCEDURE F_CosVB(x)
> RENVOYER Cosinus(180*x / ValPI)
>
> PROCEDURE F_SinVB(x)
> RENVOYER Sinus( 180 * x / ValPI )
>
> PROCEDURE F_Arccos(x est un réel)
> RENVOYER ArcTang(-x / Racine(-x * x + 1)) + (2 * ArcTang(1))
>
>
> --
> Cordialement
> Christophe Charron
>
> Service Développement
> PROLOGIQ
> 7 bis Rue des Aulnes
> 69410 Champagne au Mont d'Or
>
> Tel : 0 437 499 107
> Fax : 0 437 499 105
> mailto:
>
> "B. Neve" a écrit dans le message de
> news:42e50d4e$0$1985$
>> Bonjour,
>>
>> Je sais que certains d'entre vous utilisent MapPoint 2004 dans leur
>> application. Après avoir longuement cherché, j'ai (enfin) trouvé un


bout
> de
>> code qui permettrait de recevoir la latitude et la longitude en


fonction
>> d'un point sélectionné sur la carte. Cela ouvre bien évidemment des
> grandes
>> perspectives pour la gestion des tournées etc etc...
>>
>> Il me reste cependant un petit problème et je fais appel donc à vous.
>> L'idée est donc d'avoir DANS une fenêtre Windev, une carte et des
>> toolbars
>> de Mappoint. Ensuite, lorsque l'on a trouvé le point pour lequel on


veut
>> connaître la Longitude et la Latitude, on fait Shift+Clic. Cela


déclenche
>> alors la procédure de calcul. Seulement voilà, autant la Latitude est
>> correcte, autant la longitude ne l'est pas. Si quelqu'un a des
> connaissances
>> de géo, il pourra peut-être trouver la solution.
>>
>> Pour parvenir à faire les tests, il suffit de créer une fenêtre avec
>> champ
>> active X (ObjMap) dedans. Ensuite, donner à cette Fenêtre la propriété
>> maximisée à l'ouverture et ajouter un barre de message
>>
>> L'active X se nomme ObjMap dans l'exemple.
>>
>> Voici le code que j'utilise
>>
>> // Initialisation de ObjMap
>> ObjMap>>NewMap(2)
>> ObjMap>>Units=1
>> ObjMap>>Appearance(1)
>> ActiveXEvénement("bibi",ObjMap,"BeforeClick")
>>
>> // Initialisation de la fenêtre
>> //Faire apparaître les barres d'outils
>> OBJDYN est un objet OLE dynamique
>> MultitâcheRepeint()
>> OBJDYN=ObjMap>>Toolbars>>ITEM(1)
>> OBJDYN>>Visible=OLETrue
>> MultitâcheRepeint()
>> OBJDYN=ObjMap>>Toolbars>>ITEM(2)
>> OBJDYN>>Visible=OLETrue
>> MultitâcheRepeint()
>> libérer OBJDYN
>>
>>
>> //Fermeture de la fenêtre
>> ObjMap>>ActiveMap>>Saved = OLETrue
>> ObjMap>>CloseMap
>>
>>
>>
>> //Procédure globale de la fenêtre qui sera appelée lorsque l'on clique
>> sur
>> la carte de l'Active X
>> PROCEDURE OnClick()
>> Mylat,mylon are currency
>> IF ToucheEnfoncée(teShift) THEN
>> Message(ObjMap>>activemap>>Pixelsize)
>> XX is currency
>> YY is currency
>> Res est un entier = CurseurPos ( cpClient )
>> SI Res <> -1 ALORS
>> XX=PoidsFaible(Res)-ObjMap..X
>> YY=PoidsFort(Res)-ObjMap..Y
>> FIN
>> Message(XX+"-"+YY)
>> YY-S
>> XX-=2
>> Omap est un objet OLE dynamique
>> Omap = ObjMap>>ActiveMap
>> OLoc est un objet OLE dynamique
>> OLoc = Omap>>XYToLocation(XX, YY)
>> ObjMap>>ActiveMap>>AddPushpin(OLoc,"Warehouse")
>> CalcPos(Omap, OLoc, Mylat, mylon)
>> Message("Lat : "+Mylat+" Lon : "+mylon)
>> END
>>
>>
>>
>>
>> //Procédure qui détermine la Latitude et la Longitude à partir du point
>> cliqué
>> PROCEDURE CalcPos(OBJMM,locX,DblLat,DblLon)
>> locNorthPole est un objet OLE dynamique
>> locSantaCruz est un objet OLE dynamique
>> dblHalfEarth is currency
>> dblQuarterEarth is currency
>> l is currency
>> d is currency
>> locNorthPole=OBJMM>>GetLocation(90, 0)
>> locSantaCruz=OBJMM>>GetLocation(0, -90)
>> dblHalfEarth=OBJMM>>Distance(locNorthPole,OBJMM>>GetLocation(-90, 0))
>> //Quarter of that is the max distance a point may be away from
> locSantaCruz
>> and still be in western hemisphere
>> dblQuarterEarth = dblHalfEarth / 2
>> // Compute latitude from distance to north pole
>> DblLat = 90 - 180 * OBJMM>>Distance(locNorthPole, locX) / dblHalfEarth
>> // Compute great circle distance to locX from point on Greenwich


meridian
>> and computed Latitude
>> d = OBJMM>>Distance(OBJMM>>GetLocation(DblLat, 0), locX)
>> //convert latitude to radian
>> l = (DblLat / 180) * ValPI
>> //Compute Longitude from great circle distance
>> blub is real sur 8
>> DblLon = 180 * ArcCos((Cos((d * 2 * ValPI) / (2 * dblHalfEarth)) -


Sin(l)
> *
>> Sin(l)) / (Cos(l) * Cos(l))) / ValPI
>> IF OBJMM>>Distance(locSantaCruz, locX) < dblQuarterEarth THEN DblLon
>> = -DblLon
>> RETURN
>>
>> Cette fonction est basée sur du code VB que j'ai trouvé ici... Je ne


vois
>> cependant pas où j'ai commis une faute.
>>
>> Pour ceux que cela intéresse, tout cela est dans une fenêtre (V9) et il
> n'y
>> a qu'à demander. Il faut bien évidemment Mappoint installé sur la


machine
>> pour le fonctionnement. CQFD
>>
>> Merci d'avance,
>>
>>
>> Benoît Nève
>>
>>
>
>