Tuesday, January 31, 2012

Re: GIS Distance from Point to Geometry Collection

It should return whatever the units are in the coordinate system you have set.  You will probably want to transform the geometry to UTM first.  Something that treats the geometry as flat and sets distance to be in meters or similar.  srid=3857 or 900913 will do this nicely (caveat emptor).  

-- Jeff

On Tue, Jan 31, 2012 at 9:07 PM, Alex Kopp <loaferdtd@gmail.com> wrote:
Yes Jeff, this is what I want to do. I wasn't sure if there was an easier way. What units does the distance function return? I tried this and it seems to return the distance in units of 10km, is this correct?

Thanks again!


On Tue, Jan 31, 2012 at 9:04 PM, Jeff Heard <jefferson.r.heard@gmail.com> wrote:
Got it.  So what you want to do is a list comprehension over the geometry object, which should give you individual geometries is what it sounds like.  Then you can calculate distance() from each of these.  Something like this?

interesting_point = Point(x, y)
collection = result.geom
min_dist = min([g.distance(interesting_point) for g in collection])

or for every geometrycollection in a queryset:

result = MyModel.objects.all()
min_dist = min([min([g.distance(interesting_point) for g in coll]) for coll in result])

Brute force and thus a bit slow, but it should work if I understand you correctly...

-- Jeff


On Tue, Jan 31, 2012 at 8:45 PM, Alex Kopp <loaferdtd@gmail.com> wrote:
Here's a more concrete example, say I am storing shapes of all countries. Now, the US can't be stored in one polygon (we have hawaii and alaska), therefore I have to store the many polygons in one geometrycollection.

Now, say I have another point on the map, I would like to know how ar it is from ANY of the polygons...


On Tue, Jan 31, 2012 at 8:41 PM, Alex Kopp <loaferdtd@gmail.com> wrote:
Perhaps I didn't explain it well, Jeff. I am just trying to get the smallest distance from one point to any of the points, lines, or polygons inside of a queryset. The data I am receiving from the queryset is a geometrycollection already... That is how it is being stored in the database.

On Tue, Jan 31, 2012 at 8:36 PM, Jeff Heard <jefferson.r.heard@gmail.com> wrote:
You should be able to create a geometrycollection object from a queryset (you may have to use a list comprehension for this), then calculate the centroid and take the distance from that. Taking the distance from the edge should only be a little more
Complicated.  Check the django GEOS API docs For complete details



On Jan 31, 2012, at 6:36 PM, Loafer <loaferdtd@gmail.com> wrote:

> I have a model that currently stores a Geographic Point (Using Django
> GIS (GeoDjango)) and another model that has a field to store a
> geometry collection (A collection of polygons, lines, and or points).
>
> I am trying to find the distance from the point to any one of the
> shapes in the geometry collection. Apparently the distance function
> only works on single shapes, not a collection. Are there any
> workarounds to this?
>
> Any help is appreciated.
>
> Thanks.
>
> --
> 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.
>

--
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.



--
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.

--
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.

--
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.

--
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