Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GeoDjango: How can I get the distance between two points?

My Profile model has this field:

location = models.PointField(geography=True, dim=2, srid=4326)

I'd like to calculate the distance between the two of these locations (taking into account that the Earth is a spheroid) using GeoDjango, so that I can store this distance in the database.

  1. How can I calculate this distance with GeoDjango?
  2. What units are the results in?
  3. Is there a 'best' way to store this data? Float? Decimal?

I've reviewed previous, similar questions, and haven't found them useful. No answer gives enough explanation of what's happening or why it works.

I'm using Django 1.8 and the latest versions of required libraries for GeoDjango.

Thanks!

like image 994
StringsOnFire Avatar asked Aug 19 '15 10:08

StringsOnFire


1 Answers

Following Abhyudit Jain's comment, I'm using geopy to calculate distance. I'm adding it as a property as opposed to storing it, as per e4c5's advice:

from django.contrib.gis.measure import Distance, D
from geopy.distance import distance

@property
def distance(self):
    return Distance(m=distance(self.user_a.profile.location, self.user_b.profile.location).meters)

Geopy defaults to Vincenty’s formulae, with an error of up to 0.5%, and contains a lot of other functionality I'll use in future.

The above returns a GeoDjango Distance object, ready for easy conversion between measurements.

Thanks for the help!

like image 174
StringsOnFire Avatar answered Sep 20 '22 02:09

StringsOnFire