python - geoip2 - Convierte entre sistemas de coordenadas con GeoDjango
django geo ip (2)
Estoy tratando de agregar información de coordenadas a mi base de datos, agregando soporte django.contrib.gis
a mi aplicación. Estoy escribiendo una migración de datos hacia el south
que toma las direcciones de la base de datos, y le pide a Google las coordenadas (hasta ahora, creo que mi mejor geopy
es usar geopy
para esto).
Luego necesito convertir las coordenadas devueltas de WGS84:4326
, el sistema de coordenadas de Google, a WGS84:22186
, mi sistema de coordenadas.
Estoy perdido entre los documentos GeoDjango tratando de encontrar una manera de hacer esto. Hasta aquí, creo que necesito hacer esto:
gcoord = SpatialReference("4326")
mycoord = SpatialReference("22186")
trans = CoordTransform(gcoord, mycoord)
pero luego, no sé cómo usar ese objeto CoordTransform
... parece ser usado por los objetos de datos de GDAL, pero eso es demasiado para lo que quiero hacer ...
CoordTransform no funcionaría sin GDAL eso es verdad. Pero el resto es bastante simple:
>>> 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
Tenga en cuenta que el punto se transforma en su lugar.
Si tiene todas sus bibliotecas instaladas correctamente, no es necesario utilizar el objeto CoordTransform
, el método de transform
del objeto puntual hará el trabajo por usted si conoce el valor srid
deseado.
>>> from django.contrib.gis.geos import Point
>>> pnt = Point(30, 50, srid=4326)
>>> desired_srid = 22186
>>> pnt.transform(desired_srid)
>>> pnt.ewkt
u''SRID=22186;POINT (11160773.5712331663817167 19724623.9116888605058193)''