检索Django LineStringField会导致DjangoUnicodeDecodeError

时间:2014-03-30 12:55:11

标签: mysql django geodjango

我有一个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

0 个答案:

没有答案