已解决:Geojason 序列化器给出空几何

问题描述 投票:0回答:1

我在这个问题中发现了同样的问题,尽管据说它已在 Django 1.9 中修复,所以我想也许我做错了什么。

我正在尝试序列化我的 geodjango 数据:

homes = serialize(
    "geojson",
    Home.objects.all(),
    geometry_field="point",
    fields=["address_point"],
)

然后我去打印它,它显示几何图形为空,如下:

{
   "type":"FeatureCollection",
   "crs":{
      "type":"name",
      "properties":{
         "name":"EPSG:4326"
      }
   },
   "features":[
      {
         "type":"Feature",
         "id":1,
         "properties":{
            "address_point":"SRID=4326;POINT (15.57385209377286 7.776164310995906)"
         },
         "geometry":null
      }
   ]
}

此外,当我尝试访问 javascript 中的数据(使用 django-geojson)然后将其记录到控制台时,结果是

null
。我相信这两个问题是相关的。

{% load geojson_tags %}

var homes = {{ homes|geojsonfeature|safe }};
console.log(homes) // null

希望有任何解决此问题的见解,谢谢!

附注点冻结的结果

asgiref==3.8.1
black==24.4.2
certifi==2024.6.2
charset-normalizer==3.3.2
click==8.1.7
Django==5.0.6
django-countries-plus==2.2.0
django-environ==0.11.2
django-geojson==4.1.0
django-languages-plus==2.1.1
django-safedelete==1.4.0
idna==3.7
isort==5.13.2
mypy-extensions==1.0.0
packaging==24.1
pathspec==0.12.1
pillow==10.3.0
platformdirs==4.2.2
psycopg2-binary==2.9.9
requests==2.32.3
setuptools==69.5.1
sqlparse==0.5.0
urllib3==2.2.2
wheel==0.43.0

编辑:添加模型

from django.contrib.auth.models import User
from django.contrib.gis.db import models as gis_models
from django.contrib.gis.geos import Point
from django.db import models

# Just a basic model with created_at and deleted_at
from WebApp.models.base_model import BaseModel 

class Home(BaseModel):
    user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
    address = models.CharField(max_length=256)
    address_point = gis_models.PointField(srid=4326, default=Point(0, 0))
    description = models.TextField()
django serialization postgis geojson geodjango
1个回答
0
投票

我有部分答案:我的几何字段应该是address_point,所以我现在有:

def map(request):
    template_name = "map.html"
    homes = serialize(
        "geojson",
        Home.objects.all(),
        geometry_field="address_point",
        fields=[],
    )
    context = {"homes": homes}
    return render(request, template_name, context)

现在可以像几何一样正确打印。但是,我还没有弄清楚如何让它显示在我的地图上。仍在努力。

编辑:

完全解决,无需使用任何库或任何超出简单的 leafletjs 的东西。现在我的 .html 文件中有以下代码:

        let homes = JSON.parse('{{ homes|safe }}')
        L.geoJson(homes).addTo(map);
© www.soinside.com 2019 - 2024. All rights reserved.