|
Gpssuitdeplacement dans thread |
Débuté par Monsieur AURAY-LORIVAL, 30 mar. 2017 19:28 - 9 réponses |
| |
| | | |
|
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 30 mars 2017 - 19:28 |
Bonsoir, Petite question technique, je veux faire un suivi GPS sur mon appli et j'aimerai que ça soit assez fluide sans bloquer l'utilisateur. Est il utile de mettre la fonction gpssuitdeplacement dans un thread à part ? Si oui c'est la fonction qu'on appelle par le thread ou est ce la procédure appelée par la fonction qui crée le thread ?
Merci pour cette précision |
| |
| |
| | | |
|
| | |
| |
Posté le 30 mars 2017 - 21:02 |
Coucou,
Je pense que sa ne sert a rien.
GPSSuitDéplacement(<Nom de Procédure> [, <Délai> [, <Distance>]])
Cette procédure est de la forme : PROCEDURE <Nom de la Procédure>(<Position>)
Du coup tu va avoir un effet "d'appel" de GPSSuitDéplacement d que des données utilise vont etre disponible, te prend la tete, il se la sont prise pour toi
Charly |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +36 (36 votes) |
|
Posté le 31 mars 2017 - 07:35 |
Bonjour,
Aucun intérêt puisque GPSSuitDéplacement n'est appelé qu'une fois.
Par contre, tu peux mettre la fonction appelée dans la Callback en thread. Ce n'est pas une obligation mais peut-être utile si par exemple tu enregistres les données de géolocalisation dans un fichier en C/S. Perso je le ferais.
Cdlt - Eric.
-- Eric DELATTRE http://www.yoosite.fr |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 03 avril 2017 - 23:56 |
Bonsoir, merci à vous pour vos réponses, je les prends en compte et reviens sur le sujet car j'utilise la fonction mais je trouve que c'est vraiment aléatoire, l'actualisation de la position n'est pas fluide: un coup ça met 2 secondes, un coup 10. Sans être aussi précis, y'a pas moyen de faire quelque chose d'aussi fluide que sur maps ou waze ? A chaque actualisation, je repositionne un marqueur sur un champ carte.
Mon appel de fonction et je précise que la callback n'est pas dans un thread (pour l'instant):
GPSSuitDéplacement(_RécupèrePosition,100,1)
Merci à vous |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 637 messages Popularité : +36 (36 votes) |
|
Posté le 04 avril 2017 - 09:43 |
Bonjour,
Préciser 1 mètre en distance n'a pas d'intérêt considérant la précision du système actuel. Autant ne rien mettre et laisser par défaut. Auquel cas, vous aurez 5 mètres.
Par ailleurs, sans voir ce qu'il y a dans votre procédure _RécupèrePosition il sera difficile de vous répondre...
Quels sont aussi vos conditions de mesure ? Dans un bureau ? En plein air ? ....
Cdlt - Eric.
-- Eric DELATTRE http://www.yoosite.fr |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 04 avril 2017 - 19:03 |
Voici ma procédure de callback:
Procedure ActualisePosition(Moi est une geoPosition)
gPositionActuelle = Moi Multitâche(-1) SI gbBloqueGPSAuto=Faux ALORS MonMarqueur..ActionClic="VousEtesIci" MonMarqueur..Position=gPositionActuelle MonMarqueur..Nom="PositionActuelle" SI PAS CarteModifieMarqueur(FEN_Carte.CARTE,MonMarqueur) ALORS CarteSupprimeMarqueur(FEN_Carte.CARTE,"PositionActuelle") CarteAjouteMarqueur(FEN_Carte.CARTE,MonMarqueur) FIN Multitâche(-1) FEN_Carte.CARTE..Zoom=zoomAdapteTaille FEN_Carte.CARTE..Valeur=gPositionActuelle FIN
Et je ne peux pas la mettre dans un thread car je ne peux pas modifier des éléments (marqueurs et autres) depuis un autre thread que le principal. J'ai par ailleurs enlevé le paramètre de distance minimale dans l'appel. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 217 messages Popularité : +12 (12 votes) |
|
Posté le 04 avril 2017 - 19:42 |
Bonjour Pourquoi ne pas faire appel à la fonction Cartesuitdeplacement au lieu de GpsSuitDeplacement puisque dans votre procedure callback vous ne faite quafficher la position actuelle? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 64 messages Popularité : -1 (1 vote) |
|
Posté le 04 avril 2017 - 23:04 |
Merci beaucoup, je ne connaissais pas du tout cette fonction, elle est très mal référencé, je cherchais dans les fonctions GPSXX Ca m'a l'air beaucoup plus cohérent avec mon utilisation et plus fluide, y'a même la flèche de direction! Par contre j'ai une dernière question, cette fonction m'affiche un marqueur par défaut (un rond bleu), comment changé cette image, ou est-elle située ? Dans le SDK ou l'installation Windev ?
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 217 messages Popularité : +12 (12 votes) |
|
Posté le 04 avril 2017 - 23:36 |
Aucune idée désolé SI vous réussissez à personnaliser ce marqueur, ça m'intéresserait ! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 39 messages Popularité : +4 (4 votes) |
|
Posté le 05 avril 2017 - 09:26 |
Je vais vous donnée un petit bout de code SQL qui vous permettra de convertir votre longitude et latitude en 3 dimension (x,y,z) afin de connaitre les distances entre chaque points, ou chaque personnes par exemple. J'avais déjà donnée cette exemple sur un autre poste.
Partie Update d'un fichier par rapport à un id via un WS
Procedure udpate_gps(nUserid est un entier,MapositionLatitude est un réel,MapositionLongitude est un réel) SI MapositionLatitude <> 0 ET MapositionLongitude <> 0 ALORS SI HLitRecherchePremier(utilisateurs,IDutilisateurs,nUserid) ALORS SI HTrouve() = Vrai ALORS utilisateurs.Latitude = MapositionLatitude utilisateurs.Longitude = MapositionLongitude SI HModifie(utilisateurs,hNumEnrEnCours) ALORS ReqClient est une Source dede Données sMaReq est une chaîne = [ UPDATE utilisateurs SET coord_x=(6378 * COS(RADIANS(Latitude))) * COS(RADIANS(Longitude)), coord_y=(6378 * COS(RADIANS(Latitude))) * SIN(RADIANS(Longitude)), coord_z=6378 * SIN(RADIANS(Latitude)) WHERE utilisateurs.IDutilisateurs = %1 ] sMaReq = ChaîneConstruit(sMaReq,nUserid) SI HExécuteRequêteSQL(ReqClient,Trouvez,hModifieFichier+hRequêteDéfaut,sMaReq) ALORS RENVOYER Vrai SINON RENVOYER Faux FIN SINON RENVOYER Faux FIN SINON RENVOYER Faux FIN SINON RENVOYER Faux FIN SINON RENVOYER Faux FIN
Partie envoyer une notification au utilisateur à coté de moi même via un WS
Procedure Envoi_Autour(bTrouve est un booléen,animalid est un entier, coord_x est une chaîne, coord_y est une chaîne, coord_z est une chaîne)
tabTokensInvalides est un tableau de Buffer nNbTokensInvalides est un entier sToast est une chaîne sMaReq est une chaîne coord_x = Remplace(coord_x,",",".") coord_y = Remplace(coord_y,",",".") coord_z = Remplace(coord_z,",",".")
googleapi est une chaîne = "CLEF API GOOGLE" tabIdentifiantsAEnvoyerAndroid est un tableau de Buffers
tabIdentifiantsAEnvoyerIOS est un tableau de Buffers tabMonCertif est un tableau dede Certificats tabMonCertif = CertificatCharge("chemin/vers/certificat/Certificats.p12","xxxxxxxxxx")
AnimalPerdu,MonUtilisateurs est une Source dede Données sMaReq = [ 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, utilisateurs.Type_tel as Type_tel, utilisateurs.Identifiant_notif AS Identifiant_notif, SQRT(((Power(( utilisateurs.coord_x-%1),2)+Power( ( utilisateurs.coord_y - %2) , 2) ) + Power( ( utilisateurs.coord_z - %3 ) , 2) ) ) AS DISTANCESS FROM utilisateurs WHERE DISTANCESS <= utilisateurs.distance ] sMaReq = ChaîneConstruit(sMaReq,coord_x,coord_y,coord_z)
sReq est une chaîne = [ SELECT Animal_possédé.Nom AS Nom FROM Animal_possédé WHERE IDAnimal_possédé = %1 ] sReq = ChaîneConstruit(sReq,animalid)
HExécuteRequêteSQL(AnimalPerdu,Trouvez,hRequêteDéfaut,sReq)
HExécuteRequêteSQL(MonUtilisateurs,Trouvez,hRequêteDéfaut,sMaReq)
SI HNbEnr(MonUtilisateurs) > 0 ALORS POUR TOUT MonUtilisateurs SI MonUtilisateurs.Identifiant_notif <> "" ALORS SI MonUtilisateurs.Type_tel= "A" ALORS Ajoute(tabIdentifiantsAEnvoyerAndroid, MonUtilisateurs.Identifiant_notif) SINON Ajoute(tabIdentifiantsAEnvoyerIOS, MonUtilisateurs.Identifiant_notif) FIN FIN FIN SI tabIdentifiantsAEnvoyerAndroid..Occurrence > 0 ALORS SI PAS NotifPushEnvoie(ConstruitNotification(0,AnimalPerdu.Nom,"Animal perdu ",animalid,2),tabIdentifiantsAEnvoyerAndroid,googleapi,tabTokensInvalides) ALORS FIN FIN SI tabIdentifiantsAEnvoyerIOS..Occurrence > 0 ALORS SI PAS NotifPushEnvoie(ConstruitNotification(1,AnimalPerdu.Nom,"Animal perdu ",animalid,2), tabIdentifiantsAEnvoyerIOS, tabMonCertif[1], typeServiceIOSProd) ALORS FIN FIN FIN SI nNbTokensInvalides > 1 ALORS sToast = ChaîneConstruit("%1 tokens invalides supprimés",tabTokensInvalides..Occurrence) SINON sToast = ChaîneConstruit("%1 token invalide supprimé",tabTokensInvalides..Occurrence) FIN RENVOYER ChaîneConstruit("Notification envoyée avec succès à %1 utilisateurs.",(tabIdentifiantsAEnvoyerAndroid..Occurrence+ tabIdentifiantsAEnvoyerIOS..Occurrence)) + RC + RC + sToast
J’espère ce petit bout de code vous sera utile
Cordialement |
| |
| |
| | | |
|
| | | | |
| | |
|