PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → OPENSTREETMAP vers Windev : Récupérer latitude et longitude ?
OPENSTREETMAP vers Windev : Récupérer latitude et longitude ?
Débuté par Denis, 04 sep. 2023 06:56 - 3 réponses
Membre enregistré
149 messages
Posté le 04 septembre 2023 - 06:56
Bonjour,
Je travaille actuellement avec OPENSTREETMAP et LEAFLET (calcul de l'azimut pour des panneaux solaires).
J'affiche une carte dans un champ HTML et lorsque je clique sur la carte, je souhaite récupérer les coordonnées Latitude/Longitude pour les mettre dans 2 champs Windev.

Côté HTML, avec un peu de javascript, mes données sont bien là : J'arrive à les envoyer dans le presse-papiers Windows sous la forme LAT,LONG.

Côté WINDEV, j'ai mis mon code de récupération dans l'évènement "BOUTON GAUCHE ENFONCE" du champ HTML.

xCoordest une chaîne=PressePapier()
SAIS_LATITUDE=ExtraitChaîne(xCoord,1,",")
SAIS_LONGITUDE=ExtraitChaîne(xCoord,2,",")


Le souci, c'est que j'ai toujours un décalage entre ce que je récupère dans WINDEV et ce que j'ai cliqué sur la carte.

Exemples
1er clic sur la carte (latitude/longitude = rien)
2nd clic sur la carte (latitude/longitude du 1er clic)
3eme clic sur la carte (latitude/longitude du 2nd clic)
etc...

Si j'utilise l'évènement DOUBLE-CLIC GAUCHE du champ HTML, c'est ok.

>Je rate un truc, mais je ne comprends pas quoi...
Posté le 04 septembre 2023 - 09:13
Bonjour,

Tu dois gérer ça en javascript dans ta page HTML.

Dans ton évènement de clic, tu dois faire appel à une procédure WLanguage (je te laisse gérer tes différents cas)

Exemple :
try {
WL.Execute( 'MAP_Draw_Update' , JSON.stringify( GeoJson_Update ) );
} catch (error) {
console.log( 'WL.Execute( \'MAP_Draw_Update\' );' );
}
>
Membre enregistré
546 messages
Posté le 04 septembre 2023 - 15:13
Bonjour,
effectivement, comme l'a écrit julien, il faut passer par une procédure WLanguage.
Comme j'ai ça sous la main, voici un exemple d'une carte toute simple :

ChaineJSest une chaîne
// Remise à zéro du champs html : évite l'erreur du multi clic
HTML1="<html></html>"

ChaineJS= [
<html>
<head>
<title>Carte Leaflet</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
</head>

<body>
<div id="CarteID" style="height:100%;width:100%;"></div>
<script>
var MaCarte = L.map('CarteID').setView([42.41, 2.58],5);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
minZoom:2,
maxZoom:18
}).addTo(MaCarte);

MaCarte.on('click',FUNCTION(e) {
varCoordonnee=e.latlng.lat+";"+e.latlng.lng;
WL.Execute("ProcCoordFromJS",Coordonnee);
});

</script>
</body>

</html>
]
HTML1=ChaineJS


puis la procédure globale :

ProcedureProcCoordFromJS(t)
VarCoordLatest une chaîne=ExtraitChaîne(t,1,";",DepuisDébut)
VarCoordLonest une chaîne=ExtraitChaîne(t,2,";",DepuisDébut)
ToastAffiche("Latitude : "+VarCoordLat+" - Longitude : "+VarCoordLon,toastCourt,cvMilieu)


Ne pas oublier dans la description du champs HTML1 de décocher "interdit l'exécution des scripts Javascript"
puis de cocher "Autoriser l'appel de WLanguage ..."

>Cdlt
Membre enregistré
149 messages
Posté le 05 septembre 2023 - 01:33
Bonjour,
Désolé pour la réponse tardive (hosto).
Un grand merci à vous deux. Je ne connaissais pas cette fonction du champ HTML.
Voilà le code définitif qui fonctionne à merveille

//--- VARIABLES
ChaineWEBest une chaîne

//--- RàZ CHAMP HTML : Eviter l'erreur du multi clic
HTML_MAP="<html></html>"

// Code HTML-JS
ChaineWEB= [
<html>
<head>
<title>Solar panel position</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<style>
html,body,#CarteID{height:100%;width:100%;padding:0px;margin:0px;}
</style>
</head>
<body>
<div id="CarteID"></div>
<script>
var MaCarte = L.map('CarteID').setView([6.9, 100.4],10);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
minZoom:2,
maxZoom:19
}).addTo(MaCarte);
varMarker;
MaCarte.on('click',FUNCTION(e) {
IF(Marker){MaCarte.removeLayer(Marker);}
Marker=L.marker(e.latlng).addTo(MaCarte);
varCoordonnee=e.latlng.lat.toFixed(6) +";"+e.latlng.lng.toFixed(6);
WL.Execute("ProcCoordFromJS",Coordonnee);
});
</script>
</body>
</html>
]
HTML_MAP=ChaineWEB


La procédure globale où je remplis les champs

ProcedureProcCoordFromJS(xCoord="")
SIxCoord=""ALORS RETOUR
PV_ORIENTATION.SAIS_LATITUDE=ExtraitChaîne(xCoord,1,";",DepuisDébut)
PV_ORIENTATION.SAIS_LONGITUDE=ExtraitChaîne(xCoord,2,";",DepuisDébut)
CALCULS_ORIENTATION_AZIMUT()
>