Geodjango:PointField和GEOSGeometry

Nic*_*k B 7 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)
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做:

>>> 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".
Run Code Online (Sandbox Code Playgroud)

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

小智 19

接受的答案是不正确的.点数采用"POINT(经度纬度)"的形式.你已经扭转了他们.


kar*_*ikr 8

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

point = GEOSGeometry('POINT(%s %s)' % (lon, lat))
Run Code Online (Sandbox Code Playgroud)

要么

point = GEOSGeometry('POINT(%d %d)' % (lon, lat))
Run Code Online (Sandbox Code Playgroud)

当你这样做

`'POINT(lat lon)'`
Run Code Online (Sandbox Code Playgroud)

你是不是更换局部变量lat,并lon与他们适当的局部变量的值,并陆续从字面上评估.所以,你需要使用替代.

  • 如/sf/answers/1853046261/中所述,要点应为POINT(经度,纬度)。请更正此评论。 (2认同)