3

I am building a web service with GeoDjango which involves user submitted events including a location. I created a model field for my location using django.contrib.gis.db:

location = models.PointField(srid=900913)

I chose to specify 900913 as I read that this is the projection used by Google Maps and I am getting the location by placing a marker on a Google map. The coordinate is presented to me in lat/lng form. I am storing this point in a PostGIS DB using GEOS:

location = geos.Point(data['lng'], data['lat'], srid=900913)

If I want to view this point on a map, I get the lat and lng from my DB (e.g. lat = location.coords[1]) and use them to centre my map and this works fine.

When I want to browse a map and display events from DB which lie inside the map bounds I use GeoDjango's within query and the maps bounds (in lat/lng format):

    bounds = geos.Polygon.from_bbox((swLng, swLat, neLng, neLat))
    events = Event.objects.filter(location__within=bounds)

This appears to work fine and I display pins on the map corresponding to the lat/lng of these events.

So far nothing would suggest that anything is going wrong, however I am completely new to this stuff and I want to ensure that I'm getting it right for when I inevitably want to use my location data in more complex ways. The reason I'm suspicious is that my Django admin pane does not display the location correctly on the OpenStreetMap. It shows a point which appears to correspond to the (0,0) point shown here. The displayed text version of the location field is SRID=900913;POINT(-1.277482509613037 50.874104373286066), which is clearly still in lat/lng. As I move my mouse around the admin map I can see the displayed coords in the bottom right corner are in 900913 format, and not in lat/lng.

Please can you explain how I can store my location points in the correct format, and what advantages this has over simply using lat/lng (my guess is that if I want to specify say a distance in km for lookups, I can't use my lat/lng locations).

Ferguzz
  • 5,777
  • 7
  • 34
  • 41
  • The in the sea of the coast of West Africa is a common problem when working with 900913 and 4326. You can convert your points to your display projection, ie, 900913 within Postgis, using ST_Transform, which might help? – John Powell May 28 '14 at 17:15

0 Answers0