Page 1 sur 1

OpenStreeMap: Afficher l'URL après zoom ou déplacement.

Publié : mer. 18/mars/2020 17:37
par Marc56
Je développe une toute petite application à base de webservice qui doit afficher une portion de carte en fonction des coordonnées.
(les grandes villes fournissent des API qui donnent par exemple les horaires de bus et position GPS des arrêts)

OpenStreetMap est l'un des rares fournisseurs de carte capable de fonctionner sans erreur dans le WebGadget.
Il suffit simplement de lui passer les coordonnées en url sous la forme
https://www.openstreetmap.org/#map=<zoom>/<lat>/<long>
On peut ensuite se déplacer et zoomer sur la carte à la souris.

Question: comment récupérer la nouvelle URL une fois déplacé ou zoomé
(la navigateurs affichent cette url en temps réel)
Le but est de faire une application légère: S'il faut embarquer une DLL ou intégrer des centaines de lignes, je préfère m'en passer
J'ai regardé les différents exemples sur les forums.

J'ai essayé ça, mais la barre d'état ne change pas.
À vrai dire, je ne sais pas si zoomer dans le webgadget modifie quoi que ce soit comme attribut PB ?

Code : Tout sélectionner

EnableExplicit

; URL = https://www.openstreetmap.org/#map=<zoom>/<lat>/<long>
Define URL$ = "https://www.openstreetmap.org/#map=6/46.449/2.210"

Enumeration 
    #Win
    #Web
    #Sbt
EndEnumeration

OpenWindow(#Win, 0, 0, 600, 500, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
CreateStatusBar(#Sbt, WindowID(#Win))
AddStatusBarField(#PB_Ignore)
WebGadget(#Web, 10, 10, WindowWidth(#Win)-20, WindowHeight(#Win)-50, URL$)

Repeat 
    Select WaitWindowEvent()
            
        Case #PB_Event_CloseWindow
            End
            
        Case #PB_Event_Gadget
            If EventGadget() = #Web And EventType() = #PB_EventType_StatusChange  
                StatusBarText(#Sbt, 0, GetGadgetText(#Web)) 
            EndIf
            
    EndSelect
ForEver

End
#PB_EventType_StatusChange est bien appelé à chaque changement ,mais l'URL n'est pas modifiée.
Il doit y avoir du script la dessous et les attributs du webgadget ne sont pas modifiés, j'imagine :(

Edit 17:30 J'avais supprimé mon post (pour pas encombrer le serveur) car pas trouvé de solution après avoir essayé tous les paramètres de la doc et lu toute l'API d'OSM.
Et puis Zorro est arrivé, pas sur son cheval car il est moderne, mais par MP et m'a donné la solution: le texte arrive dans la barre de message en dernier. Donc ajouter ça.

Code : Tout sélectionner

debug GetGadgetItemText(#web,  #PB_Web_StatusMessage)
Il ne reste qu'à faire un peu de bricolage pour afficher la dernière ligne.

Re: OpenStreeMap: Afficher l'URL après zoom ou déplacement.

Publié : mer. 18/mars/2020 18:29
par Zorro
sinon , avec ce code :

tu lances le code
tu vas sur le menu a droite de openStreetmap
tu utilise l'icone fleche avec point d'interrogation en cliquant dessus pour activer l'outils
tu cliques sur un lieu sur Map , et tu retourne poser le curseur sur le menu (pour declencher l'event ) sans cliquer !!
le code va afficher les coordonées de ton lieu cliqué

tu peut recommencer la manoeuvre

cliques sur MAP , retour pointeur sur menu sans cliquer ---> affichage de la coordonée par le code (via Debug)



Code:

Code : Tout sélectionner



; URL = https://www.openstreetmap.org/#map=<zoom>/<lat>/<long>
Define URL$ = "https://www.openstreetmap.org/#map=16/46.8325/2.3841"

Enumeration
		#Win
		#Web
		#Sbt
EndEnumeration

OpenWindow(#Win, 0, 0, 600, 500, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateStatusBar(#Sbt, WindowID(#Win))
AddStatusBarField(#PB_Ignore)
WebGadget(#Web, 10, 10, WindowWidth(#Win)-20, WindowHeight(#Win)-50, URL$)

Repeat
		
		Select WaitWindowEvent(2)
						
				Case #PB_Event_CloseWindow
						End
						
				Case #PB_Event_Gadget
						If EventGadget() = #Web ;And EventType() = #PB_EventType_StatusChange 
								;	ClearDebugOutput()
								txt.s= GetGadgetitemText(  #web,#PB_Web_StatusMessage)
								if FindString(txt.s,"#")
										debug txt.s
								Endif
								
						EndIf
						
		EndSelect
ForEver

End