Преобразование запроса в geojson
Мне нужна помощь с этой ошибкой, которую мне выдают, и она заключается в следующем. У меня есть база данных, которая при выполнении запроса имеет список точек по всему городу, эти точки находятся в формате широты и долготы отдельно, теперь мне нужно передать их в 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}]}
Надеюсь, вы сможете лучше направить меня, чтобы решить мою ошибку, я благодарю вас от всего сердца за помощь.
Взгляните на это (если вы этого еще не сделали): https://docs.djangoproject.com/en/1.11/ref/contrib/gis/serializers/
На самом деле дело не в том, что сериализатор не понимает ваши данные, ваши данные просто не отформатированы идеальным образом, почему бы вам уже не вывести их с помощью геометрического объекта, который содержит правильные coordinates: [lat, lng]
?
Можете ли вы также опубликовать ваш фрагмент models.py ?
Причина, по которой ваш serialize не возвращает правильный geojson, заключается в том, что он ожидает GeometryField:
Пример:
Решение 1:
Если вы можете изменить models.py
Итак, для того чтобы сериализация работала, необходимо создать поле геометрии (в вашем случае PointField). например :
В файле models.py добавьте
point = models.PointField(srid=4326, null=True,blank=True)