Problème pour placer certains pins sur une carte SVG de la France
Bonjour,
Je dois créer un code VBA qui place des pins, selon une liste de villes, sur la carte SVG de la France avec DOM-TOM + ZOOM sur Paris et sa couronne.
Je dois procéder ainsi car ma société a bloqué la fonction, Insertion > Graphiques > Cartes.
Globalement, le placement des pins sont plutôt corrects.
Mais j’ai un gros souci pour la partie Ouest de la France, surtout sur les régions de la Bretagne, de la Normandie et des Pays de la Loire, les pins sont mal placés, certains sont trop haut ou trop bas, trop à gauche ou trop à droite et c’est ça le plus gros soucis, les pins sont mal placés aléatoirement dans ces régions. Alors que pour la Corse qui n'est pas bien placé géographiquement (elle est plus proche de la France qu'en vrais) il n'y a pas de soucis ainsi que pour le ZOOM sur Paris et sa couronne. Pour les DOM-TOM j'ai décidé de placer les pins au centre de chaque département.
Cela fait quelques semaines que j’essaye de corriger cela avec l’aide de ChatGPT sans succès.
Donc je me tourne vers vous pour savoir si quelqu’un a une solution à mon problème.
Voici comment le fichier Excel se présente :
- Feuille Liste projets : la liste des projets qui doivent être placés sur la carte
- Feuille Carte : la où se situe la carte SVG
- Chaque département est une forme, et se nomme selon son numéro de département
- Les pins (ronds noirs) ont comme nom (pour l’instant) le numéro de ligne où ils se situent dans la feuille Liste projets
- Feuille Liste villes : liste de toutes les villes de France avec leurs coordonnées de longitude et latitude, c’est où la macro va chercher les coordonnées de chaque ville pour pouvoir la placer sur la carte SVG
Concernant les modules :
- Module1 : module qui sert à placer des pins sur la carte, amélioré et modifié par ChatGPT
- Module2 à 4 : modules de diagnostic pour essayer de comprendre pourquoi les pins sont placés, faits par ChatGPT
Est-ce que quelqu’un aurait la solution pour bien placer tous les pins ? Je n’arrive pas à comprendre pourquoi pour une partie de la France il n’y a pas de soucis et pour une autre oui… Peut-être que je me prends mal et que je devrais faire d’une autre façon.
J’ai déjà essayé d’utiliser d’autres IA mais j’ai trouvé que ChatGPT répondais le plus à mes attentes.
J’ai déjà cherché d’autres cartes SVG dans ce forum mais aucune n’a satisfait à mes besoins, je suis contraint d’avoir une carte avec des régions car après avoir résolu le souci des pins mal placés j’aurai d’autres choses à faire, ce qui nécessite le découpage de la carte en régions.
Je vous joins :
- Le fichier Excel, mais j'ai du retirer la feuille Liste villes car le fichier est trop lourd pour être joint
- Un fichier Excel qu'avec la feuille Liste villes, j'ai du retirer les infos des colonnes A B et H pour réduire la taille du fichier mais ce sont des informations non utilisées par la macro
- La carte SVG utilisée, le forum n'accepte pas ce type de fichier et ne m'autorise pas à poster des liens mais pour trouver la carte SVG il suffit de chercher sur Google "Carte_vierge_départements_français_avec_DOM" et aller sur le site commons.wikimedia
Merci de votre attention
Bonjour,
Etes-vous certain de vos coordonnées ? Quel référentiel avez-vous pris ? Exemple Le Pertre commune à l'extrême Est de la Bretagne :
Vous avez des longitudes positives en Bretagne alors qu'elles sont toutes négatives. Nb : Mes coordonnées sont issues de Géo shape.
Vous avez une correction des coordonnées dans la fonction ProjectLonLatToXY pour les départements mentionnés. C'est peut-être là aussi que le problème se situe.
Sinon, pour avoir pas mal travaillé sur des cartes, j'utilise une méthode assez simple pour positionner des formes sur une carte. Je fais la correspondance entre les coordonnées extrêmes X et Y de la carte sur l'écran avec la longitude et latitude dans le système de coordonnées choisi. On a donc un référentiel de 4 points.
Une simple règle de trois par rapport aux coordonnées de la ville ou d'un projet permet de placer la forme au bon endroit.
Dans votre cas, il vous faudrait ajouter les référentiels pour les Dom-tom.
Ci-dessous, une carte de l'Ille et Vilaine construite selon cette méthode, représentant l'emplacement de travaux à réaliser dans des communes.
J'ai transposé vos projets sur votre carte avec ma méthode. J'ai également des incohérences sur le positionnement de certaines villes. C'est votre carte qui pose problème.
J'ai ensuite transposé les projets sur différentes cartes de France, mais j'avais également encore des incohérences.
J'ai trouvé cette carte qui donne un meilleur positionnement.
Hello,
avec une carte vectorielle geojson des départements de métropole, leaflet pour placer des villes , on peut générer une carte de la métropole avec les départements et les villes que l'on veut dedans, ceci en html , avec une capture en png , on obtient une carte avec les villes qui nous interessent :
Ami calmant, J.P
Bonjour J.P.
As-tu un lien pour récupérer ton fond de carte ?
Salut Eric,
voici le lien où elle se trouve (choisir Départements). Je ne sais pas comment tu comptes la visualiser ou l'utiliser car c'est en format geojson. Seuls des logiciels de cartographie (comme Qgis par exemple) ou alors une bibliothèque javascript comme leaflet peuvent exploiter ce format. Moi en fait pour faire ce qui est dans mon message précédent, j' ai un seul fichier html qui utilise leaflet , qui va chercher et charger le geojson et qui trace des cercles sur des points dont j'ai mis les coordonnées dans le fichier. Sinon tu as des fonds de cartes de la France en svg aussi ici
Merci pour ta réponse. Ton lien ne semble pas fonctionner pour les cartes au format geojson.
De mon côté, je suis entrain de mettre à jour mon code pour générer les cartes des départements sans les communes avec le fichier joint.
Le lien est celui-ci : Coordonnées départements
Bonjour,
Merci pour vos réponses.
La liste que j'ai téléchargé se situe sur le site de planete-excel, j'étais persuadé que c'était de l'INSEE, je vais cherche une autre liste des villes de France avec longitude et latitude.
Vous avez des longitudes positives en Bretagne alors qu'elles sont toutes négatives. Nb : Mes coordonnées sont issues de Géo shape.
Je ne vois aucune longitude positive en Bretagne dans mon fichier.
Vous avez une correction des coordonnées dans la fonction ProjectLonLatToXY pour les départements mentionnés. C'est peut-être là aussi que le problème se situe.
Effectivement j'ai des corrections de coordonnées dans la fonction ProjectLonLatToXY pour résoudre ce soucis des pins mal placés, sans cela c'est encore pire.
Pour les DOM-TOM je placerai mes pin au centre de chacun de ces départements, pas besoin d'être plus précis.
Votre carte ne me convient pas, j'ai besoin que chaque département soit une forme, car je dois les colorier selon plusieurs règles, une carte de la France unie ne permet pas de faire cela il me semble.
Pour la carte de Jurassic Pork, je vois qu'il y a aussi des incohérences, pazr exemple Bastia, et je ne suis pas du tout calé en html.
En effet pour la corse Dans mon fichier html j'avais des mauvaises coordonnées pour Bastia :
{ nom: "Ajaccio", lat: 41.910869, lon: 8.717862 },
{ nom: "Bastia", lat: 42.313057, lon: 9.156933 },Alors qu'il fallait cela :
{ nom: "Ajaccio", lat: 41.919229, lon: 8.738635 },
{ nom: "Bastia", lat: 42.697283, lon: 9.450881 },Après rectification, voilà ce que cela donne :
Et pour une carte svg avec les départements, avec Inkscape , j'ai bricolé un svg pour avoir les départements comme chemins (avec leurs noms) et qui sont dans un groupe . Par exemple la france métropolitaine est dans le groupe metropole :
Dans ce svg, j'ai mis aussi des villes avec un point et un texte mais elles ne sont pas positionnées précisément :
Dans le fichier svg les villes sont toutes groupées au même endroit donc faciles à enlever.
L' avantage d'avoir les villes dans le svg , c'est que leurs positions par rapport au département, ne change pas quelque soit le zoom pour le svg.
Hello,
c'est possible de fabriquer une carte svg avec des points géoréférencés. Voici le principe :
1 - il faut un fichier geojson avec les contours de la zone que l'on veut utiliser.
2 - un fichier geojson de coordonnées avec les villes que l'on veut inclure : exemple :
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
6.072557,
45.919556
]
},
"properties": {
"nom": "Annecy"
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [
5.559875,
46.677499
]
},
"properties": {
"nom": "Lons-le-Saunier"
}
},avec la bibliothèque javascript D3.js on peut fusionner les 2 geojson et fabriquer un fichier svg.
avec le logiciel inkscape on peut retoucher le svg pour faire des groupes avec des noms explicites. Dans le svg on a mis le texte des villes , le texte des départements mais en invisible (display:none)
<text
id="label-La Rochelle"
x="272.98407"
y="316.61551"
display="none">La Rochelle</text>
<text
id="label-Quimper"
x="169.84039"
y="222.1362"
display="true">Quimper</text>On peut changer la couleur des départements en changeant l'attribut fill des chemins des départements :
<path
fill="#e0e0e0"
stroke="#333333"
stroke-width="0.8"
id="Hérault" />
<path
fill="#e000e0"
stroke="#333333"
stroke-width="0.8"
id="Ille-et-Vilaine" />on peut insérer le svg dans une feuille excel et en VBA, venir patcher le SVG pour rendre visible des textes ou colorer des départements, en utilisant MSXML2.DOMDocument.6.0 car le svg c'est du xml.
svg inséré dans une feuille Excel :
svg en échelle 400% dans la feuille Excel :
Ami calmant, J.P
Bonjour,
Je suis repartis à 0 en prenant une nouvelle carte SVG du lien d'Eric, j'ai refais mon code avec l'aide de ChatGPT et magie, c'est presque bon, toujours un peu de soucis avec la région de Bretagne mais c'est minime par rapport à avant, ainsi que Bordeaux et Cenon qui sont trop bas alors qu'Arcachon qu'est dans le même département est plutôt bien placé. Mais bon ça passera durant les présentations.
Voici le fichier, au cas où ça peut servir à quelqu'un, j'ai du mettre la feuille Liste villes à part sinon la taille dépasse la limite autorisée, il suffit de l'ajouter à Liste projets avec carte interactive - Copie et lancer la macro, une fois la macro lancée les pins sont placés et une feuille de diagnostic est créée.
Et Jurrasic Pork, en effet ta méthode semble être parfait mais ça dépasse mes compétences.