使用tastypie从PointField返回纬度和经度值

7

使用 django-tastypie v0.9.11django 1.4.1geodjango

在使用 geodjango 之前,我直接将我的纬度和经度值保存到模型中。然后当我调用 API 时,我可以轻松地提取我的值。类似于这样:

{
    "id": "1",
    "lat": "-26.0308215267084719",
    "lng": "28.0101370772476450",
    "author": "\/api\/v1\/user\/3\/",
    "created_on": "2012-07-18T14:33:31.081105",
    "name": "qweqwe",
    "updated_on": "2012-09-06T14:17:01.658947",
    "resource_uri": "\/api\/v1\/spot\/1\/",
    "slug": "qweqwe"
},

我现在已经升级了我的Web应用程序,使用geodjango并将我的信息存储在PointField()中。现在,如果我进行与之前相同的API调用,我会得到以下结果:

{
    "id": "1",
    "point": "POINT (28.0101370772476450 -26.0308215267084719)",
    "author": "\/api\/v1\/user\/3\/",
    "created_on": "2012-07-18T14:33:31.081105",
    "name": "qweqwe",
    "updated_on": "2012-09-06T14:17:01.658947",
    "resource_uri": "\/api\/v1\/spot\/1\/",
    "slug": "qweqwe"
},

如您所见,点值不同,因此我的移动应用程序正在出现问题。
我的问题是如何从点字段中获取纬度和经度值,并像以前一样将它们与查询集返回?
1个回答

11
你需要重写你的dehydrate()方法,具体操作在http://django-tastypie.readthedocs.org/en/latest/cookbook.html#adding-custom-values中有描述。
所以像下面这样做可能适合你:
class MyModelResource(Resource):
    class Meta:
        qs = MyModel.objects.all()

    def dehydrate(self, bundle):
        # remove unneeded point-field from the response data
        del bundle.data['point']
        # add required fields back to the response data in the form we need it
        bundle.data['lat'] = bundle.obj.point.y
        bundle.data['lng'] = bundle.obj.point.x
        return bundle

顺便提一下,tastypie的开发版本不久前已经支持geodjango了,你可以去看看。文档可在http://django-tastypie.readthedocs.org/en/latest/geodjango.html找到。


谢谢你的脱水方法有效。我已经查看了更新版本,但目前还不稳定。我的问题是我已经构建了我的移动应用程序,但现在我知道了GeoDjango之后,下一个应用程序我会有所不同。 - darren
Tastypie的开发版本非常稳定。你是否将你的问题报告给了Bug跟踪器? - Daniel Grezo
@DanielGrezo - 感谢您指出这一点。我知道这是一个旧的问题/答案,但我想知道您是否可以添加评论,说明TastyPie的GIS支持是否可以自动将投影应用于坐标? - Mike Stoddart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接