Codage de controle en C++ pour MapPoint

Signaler
Messages postés
34
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
12 mai 2004
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Quelqu'un aurait il deja codé des controles ou fait des developpement en C++ pour Microsoft MapPoint (c'est un logiciel de cartographie).

En fait je recherche comment interroger la BD mappoint pour trouvé toutes les villes d'un departement correspondant a certains criteres
Merci,

12 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
Tu te sert de MapPoint en tant que contrôle ActiveX dans ton appli ou tu veut faire une Dll COM automotisant MapPoint (qui rajoute une commande dans le menu de MapPoint)
Messages postés
34
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
12 mai 2004

En fait je ne sais pas trop pour le moment. Il se peux qua dans un premier temps, je rajoute une dll dans Mappoint pour automatiser la selection d'un paquet de ville en fonction de certains criteres.
Cependant le but ultime est de faire une appli de routage de vehicule dans laquelle je me servirai de Mappoint en tant que controle ActiveX.

Si tu a des infos je suis preneur
A+
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
pour faire une dll automatisant MapPoint, je te conseil de la faire en Visual Basic (c'est + simple et la doc de Mappoint concerne essentiellement ce langage).

Sinon j'ai un exemple en C++ (sans utiliser les MFC ni ATL, en Win32 pur) qui pose les bases du compléments COM mais qui nécessite une bonne compréhension de l'architecture COM pour pouvoir programmer corectement (je vais essayer de le mettre prochainement).

En utilisant le contrôle activeX, l'exécution est moins rapide s'il faut faire plusieurs appel à la base de donnée MapPoint. En effet, le contrôle s'exécute dans un autre processus et il faut constammant communiquer entre les processus. Mais bon cela dépend de la quantité de données.

En faisant une dll automatisant MapPoint, elle pourra toujours servir si tu passe à une appli avec le contrôle activeX qui pourra se connecter à la dll. ton appli pourra communiquer avec la dll (en sachant qu'elle x'éxecutera dans 2 processus différents)

NB : mes développement concernent MapPoint 2002 et je ne sait pas s'il y a une autre version ultérieure qui modifie la prog.
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
j'ai ajouter un exemple de dll automatisant mappoint :

http://www.cppfrance.com/code.aspx?ID=19358
Messages postés
2
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2004

Gudmundur :big)
Je vois que je ne suis pas le seul à essayer de piloter mappoint. Je suis d'accord avec "ymca2003", c'est plus facile en VB. Mais j'ai malgrés tout un soucis, je ne parviens pas à récuperé les coordonnées (latitude/longitude) d'un objet situé sur la carte.
Je parviens à localiser un lieu et à y afficher, par exemple un pushpin, à partir de la latitude et longitude si je les mais dans mon code (avec la methode GetLocation de l'objet Location).
Mais je voudrais faire l'inverse; à partir d'un objet de la carte (par exemple un pushpin) donc je ne connais pas les coordonnées (latitude /longitude), je voudrais pouvoir les récupérer par une methode quelconque (comme SetLocation mais elle n'existe pas... enfin je crois)
Merci,
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
il faut calculer soi-même en utilisant la fonction Distance permettant de calculer la distance entre 2 objets pushpin ou location :

(code en C++, mais marche également sous VB)

//************************************************
// LocationToLatLon : calcule la latitude et la longitude d'un objet Location.
// entrée : pLoc : object location dont on souhaite calculer les coordonnées.
// lat : variable où stocker la latitude.
// lon : variable où stocker la longitude.
//************************************************
void CCtrlManager::LocationToLatLon(MapPoint::LocationPtr pLoc, double& lat, double& lon)
{
// calcul de la distance entre le lieu spécifié et le pole nord, cette distance nous permet de calculer la latitude du point
double dist1 =pLoc->DistanceTo(m_pNorth);
lat = 90 * (1 - 2 * dist1 / (M_PI * R_TERRE));

// calcul de la distance entre le lieu spécifié et l'équateur, cette distance nous permet de calculer la longitude du point
double dist2 = pLoc->DistanceTo(m_pEquator);
double cos_alpha = cos(dist2 / R_TERRE) / cos(lat * M_PI / 180);
lon = acos(cos_alpha) * 180 / M_PI;

// calcul de la distance entre le lieu spécifié et l'est et l'ouest
double dist3 = pLoc->DistanceTo(m_pEast);
double dist4 = pLoc->DistanceTo(m_pWest);
if(dist4 < dist3)
lon = -lon;
}

avec :
m_pNorth= m_pMap->GetLocation(90, 0, 0);
m_pEquator= m_pMap->GetLocation(0, 0, 0);
m_pWest= m_pMap->GetLocation(0, -90, 0);
m_pEast= m_pMap->GetLocation(0, 90, 0);
Messages postés
2
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
5 avril 2004

Gudmundur :big) ymca2003, désolé pour le délai de mes remerciements, mais merci , merci encore pour cette info.
Messages postés
4
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
24 décembre 2004

Salut,
je trouve ton code tres interessant, néanmoins ya 2 trucs qui m'échappent
1- R_TERRE est ce que c le rayon de la terre= 6378?
M_PI est ce que c le PI=3.14...?

2- dans ton expression
lon = acos(cos_alpha) * 180 / M_PI;

c koi comme fonction 'acos'?

en espérant un éclaircissement de ta part, car là je suis vraiment bloqué
d'avance merci,
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
R_TERRE : rayon de la terre en km
M_PI : valeur de pi (3.1415926...)

acos c'est l'inverse de la fonction cosinus qu donne l'angle (en radian) à partir de la valeur du cosinus de l'angle.
le *180/M_PI permet de convertir en degré

cette formule est basé sur de la trigonométrie sphérique
Messages postés
4
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
24 décembre 2004

merci ymca2003 de m'avoir répondu
Messages postés
4
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
24 décembre 2004

encore une question, moi je bosse sous vb6, donc pr la fonction acos j'utilise la définition
Arccos X = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
avec X de type double
Arccos X retourne un double aussi
mais j'ai un message d'erreur "espace pile insuffisant"
esc ce que je dois arrondir la valeur que me donne
Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1) ?

d'avance merci
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
aucune idée je connais pas bien VB. Pour tout dire la première fois que j'ai utilisé Mappoint c'était en VB et pour faire le calcul comme j'avais pas trouvé la fct acos, j'avais fait une dll C qui exportait cette fct