Geodjango:PointField和GEOSGeometry

问题描述 投票:7回答:2

如果可以的话:

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

django geometry point geodjango
2个回答
8
投票

您当然可以做,但稍作修改

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

OR

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

执行时

`'POINT(lat lon)'`

您正在不是用适当的局部变量值替换局部变量latlon,并按字面值对它们进行求值。因此,您将需要使用替换。

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


19
投票

接受的答案不正确。点的形式为“ POINT(经度纬度)”。您已将它们撤消。

© www.soinside.com 2019 - 2024. All rights reserved.