nativescript-geolocation icon indicating copy to clipboard operation
nativescript-geolocation copied to clipboard

Distance function returns 0 between two locations

Open thamibn opened this issue 5 years ago • 4 comments

Hi,

When i use two locations taken from google maps to calculate distance it always give me 0, not sure why

here is my code example

// -26.275406, 27.811755 from google maps
      let thisLocation = new geolocation.Location();
      thisLocation.latitude = "-26.275406";
      thisLocation.longitude = "27.811755";

      //  -26.281879, 27.772300 from google maps
      let myLocation = new geolocation.Location();
      myLocation.latitude = "-26.281879";
      myLocation.longitude = "27.772300";

      let dist = Math.floor(geolocation.distance(myLocation, thisLocation));
      this.locationDistance = `DIstance is ${dist} meters away.`;

i am using nativescript vue testing on my android device

thamibn avatar Apr 24 '20 14:04 thamibn

I have faced this issue as well, i get 0 when i calculate the distance.

akarsh014 avatar May 04 '20 04:05 akarsh014

I wasn't getting very accurate distances using this function either. I use this to calculate the distance in KM, then times the result by 1000

calculateKmDistance(loc1, loc2): number {

    const R = 6371.0710; // Radius of the Earth in Km
    const r1 = loc1.latitude * (Math.PI / 180); // Convert degrees to radians
    const r2 = loc2.latitude * (Math.PI / 180); // Convert degrees to radians
    const d1 = r2 - r1; // Radian difference (latitudes)
    const d2 = (loc2.longitude - loc1.longitude) * (Math.PI / 180); // Radian difference (longitudes)

    return 2 * R * Math.asin(Math.sqrt(Math.sin(d1 / 2) *
        Math.sin(d1 / 2) + Math.cos(r1) * Math.cos(r2) *
        Math.sin(d2 / 2) * Math.sin(d2 / 2)));
}

justinmespel avatar Sep 08 '20 07:09 justinmespel

Do you still need to times the result by 1000 to get it in KM?

I wasn't getting very accurate distances using this function either. I use this to calculate the distance in KM, then times the result by 1000

calculateKmDistance(loc1, loc2): number {

    const R = 6371.0710; // Radius of the Earth in Km
    const r1 = loc1.latitude * (Math.PI / 180); // Convert degrees to radians
    const r2 = loc2.latitude * (Math.PI / 180); // Convert degrees to radians
    const d1 = r2 - r1; // Radian difference (latitudes)
    const d2 = (loc2.longitude - loc1.longitude) * (Math.PI / 180); // Radian difference (longitudes)

    return 2 * R * Math.asin(Math.sqrt(Math.sin(d1 / 2) *
        Math.sin(d1 / 2) + Math.cos(r1) * Math.cos(r2) *
        Math.sin(d2 / 2) * Math.sin(d2 / 2)));
}

alexonozor avatar Dec 10 '22 12:12 alexonozor

@alexonozor I don't think so, it should return the result in KM. I think / 1000 to get it in meters.

justinmespel avatar Jan 20 '23 07:01 justinmespel