2016-04-29 19 views
5

Ich möchte eine geografische Grenze definieren, außerhalb derer die App die Arbeit ablehnt. Ich weiß schon, wie dies durch zwei lat/long-Paare gebunden mit einem Quadrat zu tun:So schränken Sie die App-Benutzerfreundlichkeit auf ein bestimmtes geografisches Gebiet ein 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")); 
    } 

Ich weiß auch, über Geofencing ... oder genug, um zu wissen, dass mit Geofencing, Flächen als Kreise mit einem Radius definiert werden aus ein einzelner Punkt.

Aber wie ich schon sagte, würde Ich mag eine Grenze definieren, die der Realität entspricht:

Zum Beispiel, wenn es eine App war, die nicht zu arbeiten, wenn der Benutzer außerhalb der Grenze von Kansas entworfen wurde, wäre es nicht befriedigend sein, einen RADIUS zu definieren, da der Staat Kansas nicht kreisförmig ist und seine Grenze wackelt.

Ich benutze Android dafür, aber ich bezweifle, dass wirklich wichtig für diese Frage ist.

Danke für jede Hilfe!

Antwort

3

Dies ist viel einfacher, als man denkt:

definieren die Region (en) als Vieleck, N Punkten in der Länge aufweisen, Breitengrad-Koordinaten.

einen Punkt in Polygon-Methode verwendet:

Point in Polygon Algorithm

Um zu testen, ob der aktuelle Punkt innerhalb oder außerhalb des Polygons ist, oberhalb der Code X, Y-Koordinaten. Verwenden Sie nur Längengrad anstelle von x und Breitengrad als y.
Der Code funktioniert möglicherweise nicht, wenn die Region den Nord- oder Südpol kreuzt und wenn die Grenzlinie überschritten wird (Grenze der Länge = -180 bis 180), aber niemand Ihre App dort verwendet.

Obwohl man nicht immer Formeln verwenden kann, die in der x, y (kartesischen) Ebene arbeiten, funktioniert es hier auch für sphärische Breitengrade, lon, Koordinaten.

+0

Vielen Dank ... obwohl ich das noch nicht vollständig verifizieren kann, sieht es sehr vielversprechend aus und ist mit Abstand die beste Antwort. VIELEN DANK. –

1

Hier offizielle Dokumentation darüber, wie Sie den aktuellen Standort des Geräts erhalten und für neue Standort-Updates registrieren: http://developer.android.com/training/location/receive-location-updates.html

Sobald Sie den aktuellen Standort haben, können Sie Location.distanceTo(Location) oder Location.distanceBetween(double, double, double, double, float[]) zu überprüfen und nachschauen, ob das Gerät ist innerhalb des angegebenen Radius.

-1

Definieren Sie einen Radius für den Standort und berechnen Sie die Entfernung des aktuellen Standorts in onLocationChangeListener. Setzen Sie ein boolesches Flag, wenn der Abstand kleiner als der Radius ist. Tun Sie Ihre Aktion, wenn die Flagge falsch ist.

1

Vielleicht Geocoder verwenden, um Stadt/Bundesstaat Name basierend auf dem aktuellen Standort zu extrahieren, this Antwort könnte Ihnen helfen, wie das zu tun.

Wenn also der Name Stadt/Bundesstaat nicht erlaubt ist, schließen Sie die Anwendung und zeigen eine Nachricht an.

aber beachten Sie, dass Geocoder erfordert Internetzugang, nicht sicher, ob das aber zu Ihnen passt.