Codage de controle en C++ pour MapPoint

tanguy_laverdure Messages postés 34 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 12 mai 2004 - 5 janv. 2004 à 09:31
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 25 juin 2004 à 00:04
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
5 janv. 2004 à 17:24
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)
0
tanguy_laverdure Messages postés 34 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 12 mai 2004
6 janv. 2004 à 08:43
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+
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
6 janv. 2004 à 12:17
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.
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
7 janv. 2004 à 21:57
j'ai ajouter un exemple de dll automatisant mappoint :

http://www.cppfrance.com/code.aspx?ID=19358
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gudmundur Messages postés 2 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 5 avril 2004
2 avril 2004 à 16:12
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,
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 avril 2004 à 22:30
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);
0
gudmundur Messages postés 2 Date d'inscription mardi 30 septembre 2003 Statut Membre Dernière intervention 5 avril 2004
5 avril 2004 à 08:51
Gudmundur :big) ymca2003, désolé pour le délai de mes remerciements, mais merci , merci encore pour cette info.
0
kopeltar Messages postés 4 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 24 décembre 2004
24 juin 2004 à 12:20
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,
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
24 juin 2004 à 13:05
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
0
kopeltar Messages postés 4 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 24 décembre 2004
24 juin 2004 à 13:12
merci ymca2003 de m'avoir répondu
0
kopeltar Messages postés 4 Date d'inscription vendredi 14 mars 2003 Statut Membre Dernière intervention 24 décembre 2004
24 juin 2004 à 13:21
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
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
25 juin 2004 à 00:04
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
0
Rejoignez-nous