django 将查询转换为geojson

8gsdolmq  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(169)

bounty将在2天后过期。回答此问题可获得+50的声望奖励。Carlos Chavita正在寻找规范答案

我需要帮助这个错误,我正在提出,它是如下。我有一个数据库,当我执行查询有一个点在整个城市的列表,这些点是在纬度和经度格式分开,现在我需要将它们传递给geodjango,我需要序列化数据,将其转换为geojson,但我找不到找到解决方案的方法,我从数据库中得到了这样的数据:

{'type': 'Feature', 'properties': {'name': 'Centro Puerto Lopez', 'direction': 'Calle 5 # 7-28', 'latitude': '4.08467', 'longitude': '-72.9558', 'city': 'Puerto Lopez', 'department': 'Meta', 'pk': '97'}, 'geometry': None}, {'type': 'Feature', 'properties': {'name': 'Bachue Acacias', 'direction': 'Carrera 35 # 14-23', 'latitude': '3.98454', 'longitude': '-73.777', 'city': 'Acacias', 'department': 'Meta', 'pk': '98'}, 'geometry': None}, {'type': 'Feature', 'properties': {'name': 'Ciudad Porfia', 'direction': 'Carrera 43 # 67-04 Sur', 'latitude': '4.07094', 'longitude': '-73.6695', 'city': 'Villavicencio', 'department': 'Meta', 'pk': '99'}, 'geometry': None}, {'type': 'Feature', 'properties': {'name': 'Ciudad Milenio', 'direction': 'Calle 53 S # 33 - 02', 'latitude': '4.08341', 'longitude': '-73.6645', 'city': 'Villavicencio', 'department': 'Meta', 'pk': '100'}, 'geometry': None}]}

显示数据,我尝试将其序列化如下:

from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.urls import reverse_lazy
from django.views.generic import ListView, CreateView, UpdateView, DeleteView, TemplateView
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.core.serializers import serialize
import json

from apps.pdv.models import Pdv, Market
from apps.pdv.forms import PdvForm

# Create your views here.

# Clase para listar los pdv
class baseView(TemplateView):
    template_name = "base/maps_base.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        market =  Pdv.objects.all()
        # for mark in market:
        #     print(mark)
        context["markers"] = json.loads(serialize("geojson", Market.objects.all()))
        context["markers_"] = json.loads(serialize("geojson", Pdv.objects.all()))
        # print(context["markers"])
        print(context["markers_"])
        return context

但是序列化返回的数据是这样的,很明显它不知道如何传递纬度和经度给它,这样它就可以转换成一个点。

{'type': 'Feature', 'properties': {'name': 'Ciudad Porfia', 'direction': 'Carrera 43 # 67-04 Sur', 'latitude': '4.07094', 'longitude': '-73.6695', 'city': 'Villavicencio', 'department': 'Meta', 'pk': '99'}, 'geometry': None}, {'type': 'Feature', 'properties': {'name': 'Ciudad Milenio', 'direction': 'Calle 53 S # 33 - 02', 'latitude': '4.08341', 'longitude': '-73.6645', 'city': 'Villavicencio', 'department': 'Meta', 'pk': '100'}, 'geometry': None}]}

我希望你能更好的指导我解决我的错误,我从心底里感谢你的帮助。

0kjbasz6

0kjbasz61#

看看这个(如果你还没有):https://docs.djangoproject.com/en/1.11/ref/contrib/gis/serializers/
这并不是说序列化器不理解你的数据,你的数据只是没有以理想的方式格式化,为什么你不已经用一个包含正确的coordinates: [lat, lng]的几何对象输出它呢?

tzdcorbm

tzdcorbm2#

你能把你的models.py片段也贴出来吗?
您的序列化没有返回正确的geojson的原因是因为它需要一个GeometryField:
示例:

解决方案1:

如果您可以更改models.py

因此,为了使序列化工作,您需要创建一个几何字段(在您的情况下,PointField应该是apt)。例如:
在www.example.commodels.py中添加

point = models.PointField(srid=4326, null=True,blank=True)

相关问题