> > Hi!
> >
> > I'm searching near people in my app. I'm doing it a this way:
> >
> > 37 people = Person.objects.all().exclude(user=request.user)
> > 38
> > 39 near_people = list()
> > 40 for person in people:
> > 41 if self.is_near(me.coordinates, person.coordinates):
> > near_people.append(person)
> >
> > Now, I'm getting all the the Person objects. This is a inefficient way.
> >
> > The coordinates are latitude/longitude coordinates, so I think in test
> > the variation and get only latitude +/- 1 and longitude +/- 1 and after
> > this, do the test exactly (the funcion is_near).
> >
> > But instead this, can I "draw" a circle and search only Person objects
> > inside it?
>
> I'm not sure what database you are using, but if you are using PostgreSQL,
> it has built-in geometric operators specifically for this kind of thing.
> You might have to drop down into SQL, but in 1.2, that's nice and easy.
>
> The PostgreSQL documentation on this is at:
>
> http://www.postgresql.org/docs/8.4/interactive/datatype-geometric.html
> --
> -- Christophe Pettus
> xof@thebuild.com
Or if spatial operations are really needed, why not to use real spatial
database and GeoDjango (django.contrib.gis). Spatialite, Postgis, Mysql or
oracle. All supports at spatial to some extent. And there you can do easily
simple filtering:
Person.objects.filter(person_coordinates__dwithin(me.coordinates, distance))
...and geodjango + spatial engine behind it will take care of all that complex
stuff.
Note: you can still use GEOS parts from geodjango to do calculations so you
don't have to reinvent wheel if you want to keep coordinates as you already
have.
--
Jani Tiainen
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment