PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → [WD24] Récupération de données d'une carte Google Map API via champ ActiveX
[WD24] Récupération de données d'une carte Google Map API via champ ActiveX
Iniciado por Maxime D, 04,abr. 2019 16:07 - 6 respuestas
Miembro registrado
48 mensajes
Publicado el 04,abril 2019 - 16:07
Bonjour, je cherche depuis une bonne journée déjà comment faire pour récupérer une certaine valeur d'une carte Google Map API.

Je vous explique, j'utilise un champ ActiveX de type Microsoft Web Browser afin de lire un fichier HTML qui contient tout le code HTML et JavaScript qui a pour but d'afficher la carte Google.
Sur cette carte je dois afficher plusieurs milliers de polygones différents et chaque polygone possède un certain nombre d'informations.

Ce code HTML / JavaScript est généré à chaque fois que l'utilisateur spécifie ce qu'il recherche dans différents champs combo, j'ai donc affecté à chacun de ces polygones un identifiant unique (que l'on peut récupérer lorsque l'on clique sur chaque polygone) puisque je ne peux pas me permettre d'augmenter encore plus la taille du fichier étant donné que lorsque toutes les parcelles sont affichés cela prend déjà près d'une vingtaine de seconde à tout générer.

Je souhaite donc savoir comment faire pour retourner cette valeur à WinDev, me permettant ainsi d'ouvrir une nouvelle carte avec uniquement la parcelle sélectionnée mais cette fois ci avec toutes ses informations.

Voici un morceau du code qui me permet d'afficher ma carte

maCarte ="<html>"
maCarte+="<head>"
maCarte+="<meta name='viewport' content='initial-scale=1.0, user-scalable=no'>"
maCarte+="<meta charset='utf-8'>"
maCarte+="<title>Simple Polygon</title>"
maCarte+="<style>"
maCarte+="#map {"
maCarte+="height: 680px;"
maCarte+="}"
maCarte+="html, body {"
maCarte+="height: 100%;"
maCarte+="margin: 0;"
maCarte+="padding: 0;"
maCarte+="}"
maCarte+="</style>"
maCarte+="</head>"
maCarte+="<body>"
maCarte+="<div id='map'></div>"
maCarte+="<script>"
maCarte+="function initMap() {"
maCarte+="var map = new google.maps.Map(document.getElementById('map'), {"
maCarte+="zoom: 18,"
maCarte+="center: {lat: 42.88281383279, lng: 2.898677443496},"
maCarte+="mapTypeId: 'terrain'"
maCarte+="});"
//Variable InfoWindow
maCarte+="var infowindow = new google.maps.InfoWindow({"
maCarte+="size: new google.maps.Size(150, 50)"
maCarte+="});"
//Suppression des InfoWindow à chaque clique sur la carte
maCarte+="google.maps.event.addListener(map, 'click', function() {"
maCarte+="infowindow.close();"
maCarte+="});"
//Affichage des polygones
POUR i = 1 À 4000
Q_SelectionCoordEtParcelle.ParamIDParcelle = i
HExécuteRequête(Q_SelectionCoordEtParcelle)
HLitPremier(Q_SelectionCoordEtParcelle)
POUR j = 1 À 4
SI Q_SelectionCoordEtParcelle.Latitude <> 0 ALORS
SI Q_SelectionCoordEtParcelle.NumeroPolygone = j ALORS
maCarte+= "var C" + i + " = ["
POUR TOUT Q_SelectionCoordEtParcelle AVEC Q_SelectionCoordEtParcelle.NumeroPolygone = j
maCarte+="{lat: " + Q_SelectionCoordEtParcelle.Latitude + ", lng: " + Q_SelectionCoordEtParcelle.Longitude + "},"
FIN
maCarte = Gauche(maCarte,Taille(maCarte)-1)
maCarte+="];"
maCarte+="var P" + i + " = new google.maps.Polygon({"
maCarte+="paths: C" + i + ","
maCarte+="strokeColor: '#FF0000,"
maCarte+="strokeOpacity: 0.8,"
maCarte+="strokeWeight: 2,"
maCarte+="fillColor: '#FFFF00,"
maCarte+="fillOpacity: 0.35"
maCarte+="});"
//Apparition des infos de la parcelle lorsqu'un clic gauche est effectué dessus
maCarte+="google.maps.event.addListener(P"+i+", 'click', function(event) {"
maCarte+="var contentString = '"+ IDENTIFIANT_A_RENVOYER +"' ;"
maCarte+="infowindow.setContent(contentString);"
maCarte+="infowindow.setPosition(event.latLng);"
maCarte+="infowindow.open(map);"
maCarte+="});"
maCarte+="P" + i + ".setMap(map);"
FIN
SINON
SORTIR
FIN
FIN
FIN
maCarte+="}"
maCarte+="</script>"
maCarte+="<script async defer"
maCarte+=" src='https://maps.googleapis.com/maps/api/js?key=MA_CLE_API&libraries=drawing&callback=initMap'>"
maCarte+="</script>"
maCarte+="</body>"
maCarte+="</html>"

fCrée(fRepEnCours()+"\carte.html")
nIDFichier est un entier

nIDFichier = fOuvre(fRepEnCours()+"\carte.html",foEcriture)
SI nIDFichier <> -1 ALORS
fEcrit(nIDFichier,maCarte)
fFerme(nIDFichier)
SINON
Erreur()
FIN

AX_carte>>navigate(fRepEnCours()+"\carte.html")


Merci d'avance de vos réponses.

Maxime D
Mensaje modificado, 04,abril 2019 - 16:33
Miembro registrado
2.682 mensajes
Publicado el 04,abril 2019 - 16:39
Bonjour,

Si tu utilises Google maps, pourquoi ne pas utiliser le champ carte et la fonction RécupèreObjetJS ?

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
48 mensajes
Publicado el 04,abril 2019 - 18:00
Je ne crois pas que je peux réaliser mon projet avec le champ carte, sur tout les exemples que j'ai trouvé, pour afficher une carte dynamique il faut passer par un champ activeX qui ouvre le fichier HTML.
Du moins si tu trouves un exemple qui dit le contraire, je ne penses pas que cela soit possible.
Miembro registrado
677 mensajes
Publicado el 04,abril 2019 - 18:20
Philippe : on peut tracer des polygones et les colorier avec un champ carte ?
Miembro registrado
2.682 mensajes
Publicado el 05,abril 2019 - 07:51
@LC: Je n'utilise pas le champ carte car je 'en ai pas l'utilité, mais je dirais qu'à priori oui c'est possible. Regarde cette fonction .ExécuteJS

--
Cordialement,

Philippe SAINT-BERTIN
Miembro registrado
48 mensajes
Publicado el 05,abril 2019 - 11:34
Bon étant donné que je ne peux pas me permettre de passer des jours sur ce problème, je me contente tout simplement d'écrire les valeurs voulues dans le presse papier, et à chaque clic sur le champ ActiveX, je lis le contenu du presser papier.
Miembro registrado
48 mensajes
Publicado el 05,abril 2019 - 14:03
Bon étant donné que je ne peux pas me permettre de passer des jours sur ce problème, je me contente tout simplement d'écrire les valeurs voulues dans le presse papier, et à chaque clic sur le champ ActiveX, je lis le contenu du presser papier.