我有一个GeoDjango模型:
class RouteLeg(models.Model):
"""Models one 'leg' of a route. A leg is one linestring
and belongs to a route."""
# the route which owns it
route = models.ForeignKey(Route)
# A line which represents this leg of the route
line = models.LineStringField()
def get_line(self):
return self.line
我使用如下所示的行字符串保存RouteLeg
:
LINESTRING (-3.1448364257812500 54.5469778189498768, -2.9031372070312500 54.4233245371087477)
调用.save()
不会导致任何错误。当我去检索routeleg
print route.routeleg_set.all()[0].get_line()
我明白了:
DjangoUnicodeDecodeError at /route/1
`'utf8' codec can't decode byte 0xa0 in position 17: invalid start byte.
You passed in '\x00\x00\x00\x00\x01\x02\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xa0(\t\xc0y\x03\x82^\x03FK@\x00\x00\x00\x00\xa09\x07\xc0\xfb<\x99\x7f/6`K@'
(<type 'str'>)
我已经搜索了SO以获得答案,大多数都与模板编码有关。我相信这个错误是特定于数据库的。我已经尝试清除和同步数据库,这是MySQL。
修改 这结果是一个棘手的问题。问题原来是Shapely。我使用的是shapely.wkt.dumps函数。
from shapely.geometry import shape
from shapely.wkt import dumps
s = shape(geoJson)
wkt = str(dumps(s))
但是dumps()
返回一些看起来像字符串的东西,保存到MySQL db中,但是无法检索。工作代码是:
from shapely.geometry import shape
s = shape(geoJson)
return s.wkt