Question

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?

Was it helpful?

Solution 2

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.

OTHER TIPS

The accepted answer is incorrect. Points take the form of "POINT(longitude latitude)". You've reversed them.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top