2016-04-29 42 views
5

Voglio definire un limite geografico al di fuori del quale, l'app si rifiuterà di lavorare. So già come farlo con un quadrato vincolato da due lunghi coppie lat /:Come limitare l'usabilità dell'app ad una determinata area geografica ANDROID

if ((dLAT.doubleValue() > 35.309171) || (dLAT.doubleValue() < 35.226442) || (dLON.doubleValue() < -92.790165) || (dLON.doubleValue() > -92.707081)) 
    { 
     LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); 

     localBroadcastManager.sendBroadcast(new Intent("killapp")); 
    } 

conosco anche geofencing ... o abbastanza per sapere che con Geofencing, le aree vengono definite come cerchi con un raggio da un unico punto.

Ma come ho detto mi piacerebbe definire un contorno che corrisponde la realtà:

Ad esempio, se ci fosse un app che è stato progettato per non funzionare se l'utente è al di fuori del confine del Kansas, non sarebbe essere soddisfacente per definire un RADIO, poiché lo stato del Kansas non è circolare e il suo margine è sinuoso.

Mi capita di utilizzare Android per questo, ma dubito che sia davvero importante per questa domanda.

Grazie per qualsiasi aiuto!

risposta

3

Questo è molto più facile che si pensa:

definiscono la regione (s) come poligono, con N punti in longitudine, coordinate di latitudine.

utilizzare un punto nel metodo poligono:

Point in Polygon Algorithm

Per testare se il punto corrente è all'interno o all'esterno del poligono, il codice di cui sopra è usando coordinate x, y. Basta usare longitudine anziché x e latitudine come y.
Il codice potrebbe non funzionare quando la regione attraversa il Polo Nord o Sud e quando attraversa il limite di riferimento (confine di longitudine = -180 a 180) ma nessuno utilizza la tua app lì.

Anche se non è sempre possibile utilizzare formule progettate per funzionare nel piano x, y (cartesiano), esso funziona anche per le coordinate latiche, lon e sferiche.

+0

Grazie mille ... anche se non riesco ancora a verificarlo completamente, sembra molto promettente ed è di gran lunga la migliore risposta. GRAZIE. –

1

Ecco documentazione ufficiale su come è possibile ottenere la posizione corrente del dispositivo e registrarsi per nuovi aggiornamenti di posizione: http://developer.android.com/training/location/receive-location-updates.html

volta che hai la posizione corrente, è possibile utilizzare Location.distanceTo(Location) o Location.distanceBetween(double, double, double, double, float[]) per controllare e vedere se il dispositivo è entro il raggio designato.

-1

Definire un raggio per la posizione e calcolare la distanza della posizione corrente in onLocationChangeListener. Imposta un flag booleano se la distanza è inferiore al raggio. Fai la tua azione quando la bandiera è falsa.

1

Forse usare Geocoder per estrarre il nome di città/stato in base alla posizione corrente, la risposta this potrebbe aiutarti a farlo.

quindi se il nome città/stato non è consentito, si chiude l'applicazione e viene visualizzato un messaggio.

ma si noti che Geocoder richiede l'accesso a Internet, non è sicuro se ciò si adatta comunque.