Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Thu 28 November 2024 15:01
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 69
QGIS - QField : Action et widget pour lancer Google Maps
Bonjour à tous,
je pédale dans la choucroute !
J'ai crée une action (de type Ouvrir l'URL) sur une couche de points qui lance Google Maps avec un itinéraire composé d'autant d'étapes que de points
Code:
https://www.google.com/maps/dir/[%array_to_string(array_agg( "coord_google", order_by:= "fid"),'/') %]
Le champ coord_google contient latitude et longitude de chaque point, séparé par une virgule.
Malheureusement je ne retrouve pas cette action sous QField. Pourquoi ?
J'ai voulu ruser en transformant l'action en un widget QML, que je sais fonctionner sous QField.
J'ai donc ajouté un widget dans le formulaire d'attributs, malheureusement là aussi, mon expression ne donne rien, pas même la création du bouton "Lance Google maps"
Code:
import QtQuick 2.0 import QtQuick.Controls 2.0 Button { width: 130 height: width/5 text: "Lance Google maps" onClicked: {Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/dir/' ||array_to_string(array_agg("coord_google", order_by:= "fid"),'/')"));}}
Merci de votre aide.
J'ajoute le fichier de points points_google.gpkg.
guillaume
Hors ligne
#2 Thu 28 November 2024 15:46
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1126
Re: QGIS - QField : Action et widget pour lancer Google Maps
Voici le code que j'utilise pour des couches et projet en EPSG:3947 (il faut changer le code EPSG selon vos besoin)
Code:
import QtQuick 2.0 import QtQuick.Controls 2.0 //URL - Boutons pour exploiter Google Maps GroupBox { Column { spacing: 2 //URL - Localiser lat-long dans Google Maps Button { width: 200 height: width/5 text: "Localiser" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/search/?api=1&query=' || y(transform($geometry,'EPSG:3947','EPSG:4326')) || ',' || x(transform($geometry,'EPSG:3947','EPSG:4326')) || '&z=18'")); } } //URL - Naviguer dans Google Maps Button { width: 200 height: width/5 text: "Naviguer vers" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/dir/?api=1&destination=' || y(transform($geometry,'EPSG:3947','EPSG:4326')) || ',' || x(transform($geometry,'EPSG:3947','EPSG:4326')) || '&z=18'")); } } //URL - Voir sur StreetView Button { width: 200 height: width/5 text: "StreetView" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/@?api=1&map_action=pano&viewpoint=' ||y(transform($geometry,'EPSG:3947','EPSG:4326')) || ',' || x(transform($geometry,'EPSG:3947','EPSG:4326')) || '&z=18'")); } } } }
Ca répond à votre besoin ?
Hors ligne
#3 Thu 28 November 2024 18:01
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 69
Re: QGIS - QField : Action et widget pour lancer Google Maps
Merci pour l'idée.
Mais je butte encore.
J'ai personnalisé ton code .
Code:
import QtQuick 2.0 import QtQuick.Controls 2.0 //URL - Boutons pour exploiter Google Maps GroupBox { Column { spacing: 2 //URL - Naviguer dans Google Maps Button { width: 200 height: width/5 text: "Naviguer vers" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/dir/?api=1&destination='|| $y||','||$x || '&z=18'")); } } //URL - Naviguer dans Google Maps v2 Button { width: 200 height: width/5 text: "Naviguer vers (v2)" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/dir/49.26586676278346,-0.921782691700436/49.3318861093707,-0.48688618907087283' ")); } } //URL - Naviguer dans Google Maps v3 Button { width: 200 height: width/5 text: "Naviguer vers (v3)" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/dir/' ||array_to_string(array_agg("coord_google", order_by:= "fid"),'/') ")); } } } }
Dans cette version, aucun bouton widget n'apparaît.
en enlevant le 3ème button, le widget fonctionne.
Le 1er button est une réplique du tien, s'appuyant sur mes xy déjà en EPSG 4326
Le 2ème teste une combinaison "exemple" de 2 points étapes.
Je ne comprends pas pourquoi le 3ème fait buguer le widget.
Hors ligne
#4 Mon 02 December 2024 09:31
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 69
Re: QGIS - QField : Action et widget pour lancer Google Maps
Bonjour,
j'ai solutionné mon problème.
Les actions sur une couche vecteur ne sont pas exploitables sous QField ; il vaut mieux passer par des widgets.
Dans mon cas, j'ai crée un champ virtuel "google_maps" de type texte avec cette expression :
Code:
concat('https://www.google.com/maps/dir/',array_to_string(array_agg( round($y,5)||','||round($x,5), order_by:= "fid"),'/'))
Ajout d'un widget dans le formulaire d'attributs, fait de 2 boutons dont le dernier qui lance Google maps avec l'itinéraire construit à partir des points présents dans la couche vecteur
Code:
import QtQuick 2.0 import QtQuick.Controls 2.0 //URL - Boutons pour exploiter Google Maps GroupBox { Column { spacing: 2 //URL - Naviguer dans Google Maps Button { width: 200 height: width/5 text: "Naviguer vers ce point" onClicked: { Qt.openUrlExternally(expression.evaluate("'https://www.google.com/maps/dir/?api=1&destination='|| $y||','||$x || '&z=18'")); } } //URL - Naviguer dans Google Maps v2 Button { width: 200 height: width/5 text: "Suivre l'itinéraire " onClicked: { Qt.openUrlExternally(expression.evaluate("google_maps")); } } } }
Bonne journée
Hors ligne
#5 Mon 02 December 2024 17:02
- GlaDal
- Participant assidu
- Date d'inscription: 30 Aug 2013
- Messages: 1126
Re: QGIS - QField : Action et widget pour lancer Google Maps
Ah oui, ma solution était pour un widget html et pas une action sorry.
Hors ligne