You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何将含经纬度的坐标列表调整为纬度在前、经度在后的格式

解决方案

你需要修改lat_lng属性的逻辑,遍历多层嵌套的坐标结构,反转每个坐标点内部的经纬度顺序,同时优化坐标传递的处理方式避免格式错误。

1. 修改models.py中的lat_lng属性

from django.contrib.gis.db import models
from django.contrib.auth.models import User
from django.contrib.gis.db.models import PointField, MultiPointField, MultiPolygonField

class BurnedArea(models.Model):
    firedate = models.DateField()
    country = models.CharField(max_length=80)
    place_name = models.IntegerField()
    province = models.CharField(max_length=80)
    yearseason = models.FloatField()
    geom = MultiPolygonField(srid=4326)
    visible = models.BooleanField(default=False)

    @property
    def lat_lng(self):
        coords = getattr(self.geom, 'coords', [])
        reversed_coords = []
        # MultiPolygon坐标结构为 多面体[多边形[环[坐标点]]],逐层遍历反转每个点的经纬度
        for polygon in coords:
            reversed_polygon = []
            for ring in polygon:
                reversed_ring = [[lat, lng] for lng, lat in ring]
                reversed_polygon.append(reversed_ring)
            reversed_coords.append(reversed_polygon)
        return reversed_coords

    def __str__(self):
        return str(self.place_name)

2. 修改views.py的坐标处理逻辑,修复语法错误

import json

def viewer(request):
    resultba = []
    areas = BurnedArea.objects.all()
    for ba in areas:
        # 用json序列化直接生成标准数组格式,不需要手动替换括号
        pol2 = json.dumps(ba.lat_lng)
        resultba.append({'pol2': pol2})
    context = {
        'resultba': resultba
    }
    return render(request, 'app_web/viewer.html', context)

3. 优化viewer.html的调用逻辑

移除L.polygon参数中多余的外层括号,直接传入序列化后的坐标即可:

<section class="mapid" id="mapid" ></section>
<script>
    {% for area in resultba %}
    L.polygon({{area.pol2}}, {color: 'blue'}).addTo(map);
    {% endfor %}
</script>

修改完成后输出的坐标顺序就会和你期望的一致,多边形位置也会匹配实际地理位置。

内容的提问来源于stack exchange,提问作者Mohamed Hassani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:12:00