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}]}
我希望你能更好的指导我解决我的错误,我从心底里感谢你的帮助。
2条答案
按热度按时间0kjbasz61#
看看这个(如果你还没有):https://docs.djangoproject.com/en/1.11/ref/contrib/gis/serializers/
这并不是说序列化器不理解你的数据,你的数据只是没有以理想的方式格式化,为什么你不已经用一个包含正确的
coordinates: [lat, lng]
的几何对象输出它呢?tzdcorbm2#
你能把你的models.py片段也贴出来吗?
您的序列化没有返回正确的geojson的原因是因为它需要一个GeometryField:
示例:
解决方案1:
如果您可以更改models.py
因此,为了使序列化工作,您需要创建一个几何字段(在您的情况下,PointField应该是apt)。例如:
在www.example.commodels.py中添加