PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 22 → GPSRecuperePosition : tres lent
GPSRecuperePosition : tres lent
Débuté par A-B, 02 fév. 2017 11:19 - 9 réponses
Posté le 02 février 2017 - 11:19
Bonjour,
Chaque appels de GPSRecuperePosition() bloque le thread principal pendant au moin 30 secondes(seulement en android, en IOS c'est instantanne), devrais-je l'executer dans un thread secondaire ? (il me semble que l'appel depuis un thread secondaire cause des exceptions)
Sinon j'ai vu qu'il y a aussi GPSDernierePosition(), quelle differences ?
J'ai aussi pense a utilise les fonctions natives en java mais plus complique.

Merci
cdlt
Membre enregistré
519 messages
Popularité : +1 (1 vote)
Posté le 02 février 2017 - 18:50
Bonjour,

GPSRecuperePosition doit être exécuté dans un thread. Par ailleurs, il y a un timeout paramétrable dans cette fonction.

Il faut utiliser GPSSuitDéplacement à la place.

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Message modifié, 02 février 2017 - 18:50
Posté le 03 février 2017 - 10:34
Eric67 a écrit :
Bonjour,

GPSRecuperePosition doit être exécuté dans un thread. Par ailleurs, il y a un timeout paramétrable dans cette fonction.

Il faut utiliser GPSSuitDéplacement à la place.

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr


D'accord merci, du coup je dois utiliser GPSSuitDeplacement ou GPSRecuperePosition ?
J'ai essaye les 2 :
(une apres l'autre evidemment)

GPSSuitDéplacement(AsyncRecuperePosition)

Procedure AsyncRecuperePosition(g est une geoPosition)
Info(g..Latitude,g..Longitude) // 0 0 est affiche


Et aussi :

AsyncRecuperePosition()
// dans ce cas la AsyncRecuperePosition est lance toutes les 1 min en thread secondaire
Procedure AsyncRecuperePosition()
g est une geoPosition = GPSRécupèrePosition()
Info(g..Latitude,g..Longitude) // 0 0 est affiche



Resultat : les fonctions de localisation me retourne toujours 0 0 quand elles sont utilises en tache parallele, sinon dans le thread principal ca bloque pendant min 30 sec...

Sur la version IOS aucun probleme a ce niveau la pourtant.



J'ai essaye de recuperer la localisation en Java malheureusement windev ne trouve pas les classes

//import com.google.android.gms.location.*;


de google malgres que j'ai ajoute toutes les permissions liees a la localisation lors de la generation.

Je sais plus quoi faire ...
Posté le 15 février 2017 - 09:28
Personne n'utilise la géolocalisation en Android ? :o
Membre enregistré
519 messages
Popularité : +1 (1 vote)
Posté le 15 février 2017 - 12:15
Bonjour,

La géolocalisation sur android fonctionne à la perfection. Il suffit de tester l'un des exemples d'une LST pour s'en rendre compte.

Attention, pas la géolocalisation "faible consommation" avec géoSuiviActive. qui elle est absolument inexploitable !

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Posté le 15 février 2017 - 13:33
si, mais comme tout marche bien, on ne peut pas t'aider

Le 2/15/2017 à 3:28 AM, A-B a écrit :
> Personne n'utilise la géolocalisation en Android ? :o
Posté le 16 mars 2017 - 16:26
Bonjour,

j'ai le même souci sous android.

GPSRécupèrePosition renvoie 0.0 tout le temps sur mon wiko fever de test.

pourtant sur Google map quand je clic sur "ma position", c'est récupéré instantanément !

quelqu'un a une astuce ?
Membre enregistré
519 messages
Popularité : +1 (1 vote)
Posté le 17 mars 2017 - 09:19
Bonjour,

Un peu de code aiderait à... aider.

Comment est initialisé le GPS ?

Le mieux est encore de prendre l'exemple de PC Soft "Android GPS". Si cela fonctionne, alors comparer son code avec celui de la démo.

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Membre enregistré
14 messages
Posté le 17 mars 2017 - 16:40
Bonjour,

Moi aussi j'ai eu ce problème sur android.
J'ai créer une application pour les animaux perdu. avec de la géolocalisation.
Sur android, ce fut une vrais .....
Je vous envoie le code que j'ai fait :

dans ma page principal j'ai appeler:
COL_Geolocalisation.ActivationGPS()

dedans il y a :
Procedure ActivationGPS()
TANTQUE GPSEtat() <> 1
SELON Dialogue("Pour utiliser l'application, vous devez activer le GPS de votre téléphone.")
CAS 0
FIN
FIN

GPSInitParamètre(gpsAuto,gpsPrécisionElevée+gpsEnergieElevée)
Maposition = GPSRécupèrePosition(100,"Récupération de votre position en cours !")
géoSuiviActive(geo_activation)
GPSSuitDéplacement(CB_GeoSuiviActive,2,1)


LA procédure de geo_activation :
Procedure geo_activation(bSuiviActif est booléen, cErreur est une chaîne)
SI PAS bSuiviActif ALORS
Erreur(cErreur)
RETOUR
FIN

LA procédure de CB_GeoSuiviActive :
Procedure CB_GeoSuiviActive(pos est une geoPosition)

SI pos.Latitude <> 0 ET pos.Longitude <> 0 ALORS
Maposition = pos
SauveParamètre(POSITION_LATITUDE,Maposition.Latitude)
SauveParamètre(POSITION_LONGITUDE,Maposition.Longitude)
udpate_gps(MonidProfil,Maposition.Latitude,Maposition.Longitude)
FIN


J’espère que ce bout de code vous servira.

Petit cadeau, ceci calcule si dans un certain périmètre autour de moi (
madistance
) il y à des animaux perdu.


madistance est un entier = ChargeParamètre(DISTANCE)
i est un entier = 0
HLitRecherchePremier(utilisateurs,IDutilisateurs,MonidProfil)
SI madistance <1 ALORS
madistance = 1
FIN

SI HTrouve ALORS



//si HExécuteRequête(REQ_Geoloc_distance,hRequêteDéfaut,utilisateurs.coord_x,utilisateurs.coord_y,utilisateurs.coord_z,madistance) ALORS
ReqClient est une Source dede Données
sMaReq est une chaîne = [
SELECT utilisateurs.Latitude AS Latitude,utilisateurs.Longitude AS Longitude,utilisateurs.coord_x AS coord_x,utilisateurs.coord_y AS coord_y,
utilisateurs.coord_z AS coord_z,Animal_possédé.Type AS Type,Animal_possédé.Nom AS Nom,Animal_possédé.IDAnimal_possédé AS IDAnimal_possédé,
SQRT(((POWER(( utilisateurs.coord_x-%1),2)+POWER( ( utilisateurs.coord_y - %2) , 2) ) + POWER( ( utilisateurs.coord_z - %3 ) , 2) ) ) AS distancess
FROM
utilisateurs,
Animal_possédé
WHERE
utilisateurs.IDutilisateurs = Animal_possédé.IDutilisateurs
AND
(
distancess <= %4
AND Animal_possédé.Perdu = 1
AND Animal_possédé.Vérifié = 1
)
]
sMaReq = ChaîneConstruit(sMaReq,utilisateurs.coord_x,utilisateurs.coord_y,utilisateurs.coord_z,madistance)
Membre enregistré
519 messages
Popularité : +1 (1 vote)
Posté le 18 mars 2017 - 06:39
Bonjour,

Je ne comprends pas bien ce que la fonction géoSuiviActive fait là dedans...

Cette fonction était une nouveauté de la 21 utilisée pour un suivi en arrière plan avec une faible précision voire très mauvaise. Je ne pense pas que le mélange des 2 techniques soit judicieux...

https://doc.pcsoft.fr/fr-FR/?1000019277&product=WM

Un petit truc pour le test : SI pos.Latitude <> 0 ET pos.Longitude <> 0 ALORS, je mettrais _ET_ plutôt que ET.
C'est pas grand chose mas c'est de l'optimisation. Si la latitude = 0 alors le test se termine immédiatement sans chercher à tester la longitude...

Merci pour le petit cadeau. Cela peut-être utile.

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Message modifié, 18 mars 2017 - 06:41