8

如果我能做到这一点:

>>> 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 对象?

4

2 回答 2

19

接受的答案不正确。点采用“POINT(经度纬度)”的形式。你把它们颠倒了。

于 2014-10-20T18:05:11.633 回答
8

您当然可以这样做,但需要稍作修改

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

或者

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

当你这样做

`'POINT(lat lon)'`

没有替换局部变量lat及其lon适当的局部变量值,而是按字面意思对它们进行评估。因此,您需要使用替换。

编辑:更改顺序(lat, lon)(lon, lat)匹配GEOSGeometry预期的顺序。尽管文档中没有明确说明,但从他们的示例中可以明显看出。

于 2013-10-03T18:37:26.117 回答