9

Sehen Sie diese Abbildung:Überprüfen Sie, ob eine geografische Breite und Länge innerhalb eines Kreises ist

enter image description here

Was würde ich gerne wissen, ist:

  1. Wie eine Fläche (Kreis), wenn gegeben erstellen Längen- und Breitengrad und die Entfernung (10 Kilometer)
  2. So überprüfen (berechnen) Sie, ob sich ein Längen- und Breitengrad innerhalb oder außerhalb des Bereichs befindet

Ich würde es vorziehen, wenn Sie mich Codebeispiel in Java oder speziell für Android mit Google Maps API V2

+0

Nun, soweit die zweite Frage geht, ist Kreis nur Sammlung von Punkten in der gleichen Entfernung von einem Punkt, der Mitte. Wenn es innerhalb des Kreises ist, bedeutet es, dass es näher (weniger Abstand) zum Zentrum ist, wenn es außerhalb ist, dann ist der Abstand größer als der Radius. Radius in deinem Beispiel ist wohl 10 Kilometer. –

Antwort

21

Was Sie im Grunde brauchen geben kann, ist der Abstand zwischen zwei Punkten auf der Karte:

float[] results = new float[1]; 
Location.distanceBetween(centerLatitude, centerLongitude, testLatitude, testLongitude, results); 
float distanceInMeters = results[0]; 
boolean isWithin10km = distanceInMeters < 10000; 

Wenn Sie bereits Location Objekte:

Location center; 
Location test; 
float distanceInMeters = center.distanceTo(test); 
boolean isWithin10km = distanceInMeters < 10000; 

Hier ist der interessante Teil dieser API: https://developer.android.com/reference/android/location/Location.html

+0

Hallo, ich möchte die gleiche Funktionalität mit Java implementieren Was ich gerne wissen würde ist: 1) So erstellen Sie einen Bereich (Kreis), wenn eine Breite und Länge und die Entfernung (in Metern) gegeben 2) Wie zu überprüfen (Berechnen) Wenn ein Längen- und Breitengrad innerhalb oder außerhalb des Bereichs –

+0

@MangeshMandavgane ist, müssen Sie nur die beiden Funktionen "computeDistanceAndBearing" und "distanceBetween" kopieren https://android.googlesource.com/platform/frameworks/base/ +/refs/heads/master/location/java/android/location/Location.java – Flo354

+0

@ Flo354, Danke für die Antwort Ich überprüfte Ihren vorgeschlagenen URL-Code. Es ist sehr hilfreich Code, aber ich habe die Umsetzung vor 4 Monaten, ich verweise diese http://stackoverflow.com/questions/120283/how-can-i-measure-distance-and-create-a-bounding-box- based-on-two-widthongongi –

1

Haben Sie die neue GeoFencing API durchlaufen. Es sollte dir helfen. Normale Implementierung benötigt viel Zeit. This sollte Ihnen helfen, es einfach zu implementieren.

1

siehe https://developer.android.com/reference/android/location/Location.html

Location areaOfIinterest = new Location; 
Location currentPosition = new Location; 

areaOfIinterest.setLatitude(aoiLat); 
areaOfIinterest.setLongitude(aoiLong); 

currentPosition.setLatitude(myLat); 
currentPosition.setLongitude(myLong); 

float dist = areaOfIinterest.distanceTo(currentPosition); 

return (dist < 10000); 
+0

??? per Definition ist jeder Punkt auf dem Kreis 10Km vom Zentrum entfernt. Der Abstand zwischen Bereich Von Interesse und aktuelle Position ist die Linie zwischen dem Mittelpunkt des Kreises und der aktuellen Position –

0

Wenn Sie unter „Wie eine Fläche schaffen“, dass Sie den Bereich auf der Karte zeichnen möchten, müssen Sie ein Beispiel direkt in der Karte V2 Referenz doc for the class Circle finden.

Um zu überprüfen, ob der Abstand zwischen der Mitte des Kreises und Ihrem Punkt größer als 10 km ist, würde ich empfehlen, die statische Methode Location.distanceBetween(...) zu verwenden, da unnötige Objektkreationen vermieden werden.

Siehe auch here (ganz am Ende der Antwort) für ein Codebeispiel, falls der Bereich ein Polygon und nicht ein Kreis ist.