2013-10-03 9 views
5

Wenn ich dies tun:Geodjango: PointField und GEOSGeometry

>>> 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) 

Warum kann ich das nicht tun:

>>> 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". 

Wie kann ich eine Variable verwenden, um ein GEOSGeometry Objekt zu erstellen?

+1

LAT und LONG erscheinen rückwärts entsprechend gis stackexchange post http://gis.stackexchange.com/questions/11626/does-y-mean-latitude-and-x-mean-longitude-in-every-gis-software –

Antwort

8

Sie können sicher tun, aber mit einer geringfügigen Änderung

point = GEOSGeometry('POINT(%s %s)' % (lat, lon)) 

ODER

point = GEOSGeometry('POINT(%d %d)' % (lat, lon)) 

Wenn Sie das tun

`'POINT(lat lon)'` 

Sie sind nicht die lokalen Variablen ersetzt lat und lon mit ihre entsprechenden lokalen Variablenwerte, und sie werden buchstäblich ausgewertet. Also müssten Sie Substitution verwenden.

+0

Perfekte Antwort. Vielen Dank! –

13

Die angenommene Antwort ist falsch. Punkte haben die Form von "PUNKT (Längengrad)". Du hast sie umgekehrt.

+0

Ich brauchte etwas Zeit, um das herauszufinden. Ich denke, das sollte in den Dokumenten erwähnt werden. –

Verwandte Themen