Geodjango:PointField和GEOSGeometry

时间:2013-10-03 18:35:28

标签: django geometry point geodjango

如果我能这样做:

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

为什么我不能这样做:

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

如何使用变量创建GEOSGeometry对象?

2 个答案:

答案 0 :(得分:18)

接受的答案不正确。点数采用" POINT(经度纬度)"的形式。你已经逆转了它们。

答案 1 :(得分:8)

你肯定可以这样做,但稍加修改

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

OR

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

当你这样做时

`'POINT(lat lon)'`

用适当的局部变量值替换局部变量latlon,并且正在逐字地评估它们。所以,你需要使用替代。