banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

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 …

Faire un don 

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

 

Pied de page des forums

Powered by FluxBB