从 PostgreSQL 数据库中的 WKB POINT 字段在 Django 模板中显示传单地图坐标

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

我对 GEO 的一切都很陌生。我在 PostgreSQL 数据库中有一个用于存储位置的 WKB POINT 字段。我的 Django 模板上还有一个传单地图,添加了硬编码的纬度和经度,它在我的前端显示了一个工作地图。

点示例:

0101000020E610000051954507C62C1FC0144708B9E6784840

有人可以建议我如何解码点字段并将纬度和经度插入到我的模板中,以便地图将从数据库更新到正确的位置吗?

如果您需要任何其他东西,例如模型,请告诉我。任何帮助表示赞赏。

模板.html

    <div style="padding-top: 280px">
    <h3 style="padding-bottom: 20px;">Location</h3>
     <script>
      function map_init_basic (map, options) {
        
          L.marker([11.5, 20.5]).addTo(map);
          map.panTo(new L.LatLng(11.737, 20.923));
        
      }
     </script>

{% leaflet_map "mymap" callback="window.map_init_basic" %}
python django postgresql leaflet point
1个回答
0
投票

如果您的数据存储在 PostgreSQL 数据库中并且您有一个代表它的 Django 模型,您应该将纬度和经度传递给您的模板,并在视图中进行 WKB 解码。

你的 models.py 文件应该有这个代码

from django.contrib.gis.db import models

    class YourModel(models.Model):
        location = models.PointField()

views.py 文件应该有这个代码

from django.shortcuts import render
from django.contrib.gis.geos import GEOSGeometry

def your_view(request):
    # Assuming you have a queryset that retrieves the data from your database
    queryset = YourModel.objects.all()

    # Extracting latitude and longitude from the POINT field
    location_data = []
    for instance in queryset:
        # Decode WKB and extract coordinates
        point = GEOSGeometry(instance.location.wkb)
        lat, lon = point.y, point.x

        # Append latitude and longitude to the location_data list
        location_data.append({'lat': lat, 'lon': lon})

    context = {'location_data': location_data}
    return render(request, 'your_template.html', context)

您现在可以通过更新 your_template.html 中的 JavaScript 代码来使用提取的纬度和经度。 这是您的 template.html 文件的更新代码

地点 函数map_init_basic(地图,选项){ {% 表示 location_data 中的位置 %} L.marker([{{ location.lat }}, {{ location.lon }}]).addTo(map); {% 结束 %} // 您可能想根据您的数据调整中心 map.panTo(new L.LatLng({{ location_data.0.lat }}, {{ location_data.0.lon }})); }
{% leaflet_map "mymap" callback="window.map_init_basic" %}

希望它有效:)

© www.soinside.com 2019 - 2024. All rights reserved.