Search code examples
pythondjangogeolocationgeodjangogeopy

Convert between coordinate systems with GeoDjango


I'm trying to add coordinate information to my database, adding django.contrib.gis support to my app. I'm writing a south data migration that takes the addresses from the database, and asks Google for the coordinates (so far I think my best bet is to use geopy for this).

Next I need to convert the returned coordinates from WGS84:4326, Google's coordinate system, to WGS84:22186, my coordinate system.

I'm lost among the GeoDjango docs trying to find a way to do this. This far, I gather I need to do this:

gcoord = SpatialReference("4326")
mycoord = SpatialReference("22186")
trans = CoordTransform(gcoord, mycoord)

but then, I don't know how to use that CoordTransform object.. seems to be used by GDAL's data objects, but that's overkill for what I want to do..


Solution

  • CoordTransform wouldn't work without GDAL that's true. But the rest of it is simple enough:

    >>> from django.contrib.gis.gdal import SpatialReference, CoordTransform
    >>> from django.contrib.gis.geos import Point
    >>> gcoord = SpatialReference(4326)
    >>> mycoord = SpatialReference(22186)
    >>> trans = CoordTransform(gcoord, mycoord)
    
    >>> pnt = Point(30, 50, srid=4326)
    >>> print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)
    x: 30.0; y: 50.0; srid: 4326
    >>> pnt.transform(trans)
    >>> print 'x: %s; y: %s; srid: %s' % (pnt.x, pnt.y, pnt.srid)
    x: 11160773.5712; y: 19724623.9117; srid: 22186
    

    Note that point is transformed in place.