Italian geofence visualizzare solo i clienti all'interno del raggio definito

tmtube73

Active Member
Licensed User
buongiorno a tutti, stavo cercando di capire l'esempio disponibile a questo link geofence

ho capito che definisce un punto centrale di un cerchio di un certo raggio

non ho capito in che modo o su quale evento la app si accorge che entro o esco nel raggio definito.

avrei questa necessità finale
ho un elenco di clienti ognuno con sue coordinate latitudine e longitudine
in un elenco listview dovrei visualizzare solo i clienti aventi posizione inclusa all'interno del raggio denifito

qualche aiuto?

grazie.
 

LucaMs

Expert
Licensed User
Longtime User
Ho "buttato un occhio" all'app di Erel. Questa usa un servizio che ti consente di aggiungere zone (circolari) per le quali scatteranno due eventi nel caso in cui il dispositivo dovesse entrare/uscire appunto da quelle zone stabilite.

A @tmtube73 serve una cosa diversa: rilevare quali, tra N coppie di coordinate, si trovino all'interno di una certa zona.


[ @tmtube73 fai una donazione, anche minima, in modo tale che risulterai "membro con licenza" ed i tuoi post verranno gestiti "meglio" (pubblicati immediatamente)]
 

tmtube73

Active Member
Licensed User

il geofence setta un cerchio con un centro (la posizione del telefono) e un raggio e restituisce true o false se il telefono resta dentro il cerchio oppure esce dal cerchio, a me serve un altra cosa, quello che mi serve è:

data una certa posizione latitudine e longitudine (la posizione del telefono)
scorrere latitudine e longitudine di un elenco di clienti e quelli che hanno la distanza in linea d'aria inferiore al mio raggio li visualizzo gli altri li scarto

esempio raggio 100 metri
distanza in linea d'aria fra telefono e coordinate cliente 1 =80 metri (visualizzo questo cliente)
distanza in linea d'aria fra telefono e coordinate cliente 2 =101 metri (NON visualizzo questo cliente)
 

tmtube73

Active Member
Licensed User
ho un problema
le coordinate del destinatario le ho prese da google maps ed hanno il formato corretto
ma le coordinate dello smartphone sono in questo formato che manda in errore la APP
45:37,56874

forse devo prendere solo la stringa a destra dei 2 punti? in caso affermativo che comando si usa?
grazie.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Forse non ho capito la domanda ma mi sembra che ti abbiano già risposto dandoti anche il codice da usare, comunque, riassumendo:
B4X:
' ti memorizzi il centro del cerchio in una variabile, ad esempio:
Dim CentroCerchio As Location
CentroCerchio.Initialize
CentroCerchio.Latitude = 45.1
CentroCerchio.Longitude = 8

Adesso, per ogni coordinata dei tuoi clienti fai il calcolo della distanza dal centro del cerchio, ad esempio:
B4X:
Dim Cliente As Location
Cliente.Initialize
Cliente.Latitude = 45.2
Cliente.Longitude = 8
Dim DistanzaDalCentroDelCerchio As Float = Cliente.DistanceTo(CentroCerchio)

A questo punto penso non serva dirti cosa fare
 

tmtube73

Active Member
Licensed User
Forse non ho capito la domanda ma mi sembra che ti abbiano già risposto dandoti anche il codice da usare, comunque, riassumendo:
B4X:
' ti memorizzi il centro del cerchio in una variabile, ad esempio:
Dim CentroCerchio As Location
CentroCerchio.Initialize
CentroCerchio.Latitude = 45.1
CentroCerchio.Longitude = 8

Adesso, per ogni coordinata dei tuoi clienti fai il calcolo della distanza dal centro del cerchio, ad esempio:
B4X:
Dim Cliente As Location
Cliente.Initialize
Cliente.Latitude = 45.2
Cliente.Longitude = 8
Dim DistanzaDalCentroDelCerchio As Float = Cliente.DistanceTo(CentroCerchio)

A questo punto penso non serva dirti cosa fare
forse non ho spiegato bene il mio problema, nella latitudine della app mi aspettavo qualcosa tipo 45,6125645 e non 45:37,56874
perché cè il simbolo : ed è scritta cosi 45:37,56874 la sola latitudine?
 

tmtube73

Active Member
Licensed User
in un punto dell' esempio scaricato GPS c' questo comando
B4X:
latitudine=Location1.ConvertToMinutes(Location1.Latitude)

forse è questo che rende la latitudine in quel formato strano così e non ho capito perchè usa la funzione "ConvertToMinutes" --> 45:37,56874
a questo punto mi chiedo in che modo ottenere il formato corretto qualcosa tipo ---> 45,6125645 per poi riuscire a calcolare la distanza 2D di due punti?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Come ha detto Star-Dust qui siamo proprio alle basi della programmazione, dovresti prima cercare di fare delle app più semplici
Come hai già capito ConvertToMinutes non fa altro che convertire la posizione in coordinate sessagesimali.
Hai provato con questo ??
B4X:
Dim latitudine As Double = Location1.Latitude
 

amorosik

Expert
Licensed User
Le coordinate geografiche/topografiche possono essere espresse in formati diversi
Se la funzione DistanceTo ha bisogno delle coordinate in gradi decimali e tu disponi delle coordinate in gradi/minuti/secondi allora ovviamente prima devi convertire le tue coordinate per ottenerle in gradi decimali e poi darle in pasto alla funzione per avere la risposta che cerchi
 

tmtube73

Active Member
Licensed User
Come ha detto Star-Dust qui siamo proprio alle basi della programmazione, dovresti prima cercare di fare delle app più semplici
Come hai già capito ConvertToMinutes non fa altro che convertire la posizione in coordinate sessagesimali.
Hai provato con questo ??
B4X:
Dim latitudine As Double = Location1.Latitude
non ho provato ma provo grazie.
 

tmtube73

Active Member
Licensed User
Le coordinate geografiche/topografiche possono essere espresse in formati diversi
Se la funzione DistanceTo ha bisogno delle coordinate in gradi decimali e tu disponi delle coordinate in gradi/minuti/secondi allora ovviamente prima devi convertire le tue coordinate per ottenerle in gradi decimali e poi darle in pasto alla funzione per avere la risposta che cerchi
ci mancava solo che le coordinate possono essere espresse in formati diversi, giusto per semplificare le cose.
 

tmtube73

Active Member
Licensed User
in un punto dell' esempio scaricato GPS c' questo comando
B4X:
latitudine=Location1.ConvertToMinutes(Location1.Latitude)

forse è questo che rende la latitudine in quel formato strano così e non ho capito perchè usa la funzione "ConvertToMinutes" --> 45:37,56874
a questo punto mi chiedo in che modo ottenere il formato corretto qualcosa tipo ---> 45,6125645 per poi riuscire a calcolare la distanza 2D di due punti?
ho risolto cos
Come ha detto Star-Dust qui siamo proprio alle basi della programmazione, dovresti prima cercare di fare delle app più semplici
Come hai già capito ConvertToMinutes non fa altro che convertire la posizione in coordinate sessagesimali.
Hai provato con questo ??
B4X:
Dim latitudine As Double = Location1.Latitude
il tuo consiglio mi ha risolto il problema adesso calcola correttamente la distanza suppongo in metri.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
ci mancava solo che le coordinate possono essere espresse in formati diversi, giusto per semplificare le cose.

Beh, direi che qui sono le basi della matematica a mancare.
Il numero 100 puoi anche rappresentarlo come 0x64 oppure 0b01100100 ma è sempre 100 decimale, non cambia nulla.
Stessa cosa per le date, posso dire che 25/04/2022 e 2022-04-25 sono la stessa data ma con rappresentazione diversa.
Non confondiamo quindi il "valore" della variabile con la sua "rappresentazione" che sono due cose diverse.

Anche le coordinate latitudine/longitudine posso essere rappresentate in modi diversi, ma rappresentano sempre lo stesso punto nella mappa.
 

tmtube73

Active Member
Licensed User
Beh, direi che qui sono le basi della matematica a mancare.
Il numero 100 puoi anche rappresentarlo come 0x64 oppure 0b01100100 ma è sempre 100 decimale, non cambia nulla.
Stessa cosa per le date, posso dire che 25/04/2022 e 2022-04-25 sono la stessa data ma con rappresentazione diversa.
Non confondiamo quindi il "valore" della variabile con la sua "rappresentazione" che sono due cose diverse.

Anche le coordinate latitudine/longitudine posso essere rappresentate in modi diversi, ma rappresentano sempre lo stesso punto nella mappa.
Concordo.
 
Top