Reputation: 9289
If I can do this:
>>> from django.contrib.gis.geos import GEOSGeometry
>>> from django.contrib.gis.geos import Point
>>> point = GEOSGeometry('POINT(1 5)')
>>> print point
POINT (1.0000000000000000 5.0000000000000000)
Why can I not do this:
>>> lat = 1
>>> lon = 5
>>> point = GEOSGeometry('POINT(lat lon)')
GEOS_ERROR: ParseException: Expected number but encountered word: 'lat'
GEOSException: Error encountered checking Geometry returned from GEOS C function "GEOSWKTReader_read_r".
How can I use a variable to create a GEOSGeometry object?
Upvotes: 8
Views: 5854
Reputation: 99680
You can surely do that, but with a slight modification
point = GEOSGeometry('POINT(%s %s)' % (lon, lat))
OR
point = GEOSGeometry('POINT(%d %d)' % (lon, lat))
When you do
`'POINT(lat lon)'`
you are not replacing the local variables lat
and lon
with their appropriate local variable values, and they are being evaluated literally. So, you would need to use substitution.
EDIT: Changed order of (lat, lon)
to (lon, lat)
to match the order GEOSGeometry
is expecting. Although not explicitly stated in the documentation, it is evident from their examples.
Upvotes: 8
Reputation: 420
The accepted answer is incorrect. Points take the form of "POINT(longitude latitude)". You've reversed them.
Upvotes: 19