Wie finde ich den Abstand zwischen zwei Geopoints?

double distance; Location locationA = new Location("point A"); locationA.setLatitude(latA); locationA.setLongitude(lngA); Location locationB = new Location("point B"); locationB.setLatitude(latB); LocationB.setLongitude(lngB); distance = locationA.distanceTo(locationB); 

Der obige Code funktioniert nicht und ich bekomme 0.0 Km als Distanz Auch in der Konstrukteur der Location-Klasse, was bedeutet der String-Provider bedeuten. Im obigen Code verwende ich PointA und PointB als Anbieter.

Warum funktioniert der obige Code nicht?

Vielen Dank im Voraus.

LOGCAT 05-09 17: 48: 56.144: INFO / aktueller Ort (1573): lat 0,0 lng 0,0 05-09 17: 48: 56.155: INFO / checklocation loc (1573): lat 54.4288665 lng 10.169366

  • Identifizieren Sie, ob sich der Punkt im Polygon befindet
  • Wie man den Weg zieht, wie ich mich von meinem aktuellen Standort mit Google Maps verschiebe
  • Bekomme standort ohne google play services -android
  • LocationRequest kleinste Verschiebung und Genauigkeit
  • Bietet Google eine API an, die ich verwenden kann, um den Standort meines Telefons zu bekommen?
  • Warum ist der `sll`-Abfrage-Parameter für eine Maps-URL (Art von) ignoriert?
  • Android Google Map, wie man überprüft, ob die GPS-Position innerhalb des Kreises ist
  • Holen Sie sich Koordinaten von Hardware GPS
  • 6 Solutions collect form web for “Wie finde ich den Abstand zwischen zwei Geopoints?”

    Versuche Location.distanceBetween (..)

    Aktualisieren:

    Wenn du von GeoPoint lat / lon bekommst, dann sind sie in microdegrees. Sie müssen mit 1e6 multiplizieren.

    Nur ein kurzes Snippet, da ich keine komplette und einfache Lösung mit GeoPoints oben gesehen habe:

     public float getDistanceInMiles(GeoPoint p1, GeoPoint p2) { double lat1 = ((double)p1.getLatitudeE6()) / 1e6; double lng1 = ((double)p1.getLongitudeE6()) / 1e6; double lat2 = ((double)p2.getLatitudeE6()) / 1e6; double lng2 = ((double)p2.getLongitudeE6()) / 1e6; float [] dist = new float[1]; Location.distanceBetween(lat1, lng1, lat2, lng2, dist); return dist[0] * 0.000621371192f; } 

    Wenn du Meter willst, kehre einfach dist [0] zurück.

    Wie oben erwähnt, ist die Location Class der Weg zu gehen. Hier ist der Code, den ich benutzt habe:

     Location locationA = new Location("point A"); locationA.setLatitude(pointA.getLatitudeE6() / 1E6); locationA.setLongitude(pointA.getLongitudeE6() / 1E6); Location locationB = new Location("point B"); locationB.setLatitude(pointB.getLatitudeE6() / 1E6); locationB.setLongitude(pointB.getLongitudeE6() / 1E6); double distance = locationA.distanceTo(locationB); 

    In diesem Beispiel sind sowohl pointA als auch pointB Instanzen der GeoPoint-Klasse.

    Dies ist keine Antwort, aber beachten Sie die Signatur für die Location Konstruktor ist Location(String provider) .

    Dh der String, den du an den Konstruktor weitergibst, sollte einer von LocationManager.GPS_PROVIDER , LocationManager.NETWORK_PROVIDER oder LocationManager.PASSIVE_PROVIDER , nicht "point A" und "point B" .

    Ein alternativer Weg, um das oben genannte zu erreichen,

      public class Distance { public static double distance(double lat1, double lon1, double lat2, double lon2) { double theta = lon1 - lon2; double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); dist = Math.acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; //if (unit == "K") { // dist = dist * 1.609344; // else if (unit == "N") { //dist = dist * 0.8684; //} return (dist); } public static final double PI = 3.14159265; public static final double deg2radians = PI/180.0; public static double getDistance(double latitude1, double longitude1, double latitude2,double longitude2) { double lat1 = latitude1 * deg2radians; double lat2 = latitude2 * deg2radians; double lon1 = longitude1 * deg2radians; double lon2 = longitude2 * deg2radians; // Williams gives two formulae; // this is the more accurate for close distances. // In practice, the two differed only in the 8th or 9th place, for // separations as small as 1 degree. double radd = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin((lat1 - lat2) / 2), 2.0) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin((lon1 - lon2) / 2), 2.0))); return radd; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts decimal degrees to radians : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double deg2rad(double deg) { return (deg * Math.PI / 180.0); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts radians to decimal degrees : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double rad2deg(double rad) { return (rad * 180.0 / Math.PI); } } 
     double CalculateDistance( double nLat1, double nLon1, double nLat2, double nLon2 ) { double nRadius = 6371; // Earth's radius in Kilometers // Get the difference between our two points // then convert the difference into radians double nDLat = ToRad(nLat2 - nLat1); double nDLon = ToRad(nLon2 - nLon1); // Here is the new line nLat1 = ToRad(nLat1); nLat2 = ToRad(nLat2); double nA = pow ( sin(nDLat/2), 2 ) + cos(nLat1) * cos(nLat2) * pow ( sin(nDLon/2), 2 ); double nC = 2 * atan2( sqrt(nA), sqrt( 1 - nA )); double nD = nRadius * nC; return nD; // Return our calculated distance } 

    http://www.jaimerios.com/?p=39

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.