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?
The accepted answer is incorrect. Points take the form of "POINT(longitude latitude)". You've reversed them.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With