Использование Javascript для разбора данных Django в Leaflet Maps

Здравствуйте, мне интересно, может ли кто-нибудь помочь мне разобраться с этой проблемой. Я пытаюсь добавить адреса из моей базы данных Django в Javascript, который преобразует адреса в координаты long/lat, и таким образом позволяет мне использовать эти новые координаты в качестве маркеров на карте листовки.

В настоящее время у меня загружена карта.

<body>
    <div id="map"></div>
    <script>
        var map = L.map('map').setView([37.116386, -98.299591], 5);
        L.tileLayer('https://api.maptiler.com/maps/basic-v2/256/{z}/{x}/{y}.png?key=APIKEY', {
            attributions: '<a href="https://www.maptiler.com/copyright/" target="_blank">&copy; MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">&copy; OpenStreetMap contributors</a>'
        }).addTo(map)
        var marker = L.marker([37.116386, -98.299591]).addTo(map);

    </script>
</body>

В основном я хочу заменить значения маркера значением, которое я получаю из адреса, предоставленного в Django, через который я буду фильтровать.

    {% for address in addresses %}

        <a>{{address.addresses}}</a>

    {% endfor %}

Если бы я отфильтровал, скажем, бизнес, связанный с адресом, я бы хотел, чтобы он отображал маркер для этого конкретного адреса бизнеса. Если кто-то может помочь, буду очень признателен.

Храните значения в некоторых скрытых элементах HTML и используйте их при рендеринге с помощью Javascript. Вы можете использовать

<input type="hidden" id="long" value="your_value_here" />

или

<div style="display: none;" id="long" >your_value_here</div>

Лучшим способом получения данных Django в javascript является использование тега шаблона json_script:

https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#json-script

, который преобразует адреса в длинные/широкие координаты

.

Я думаю, то, что вы описываете, - это процесс геокодирования. Есть несколько способов и сервисов для геокодирования адресов, не связанных с Django или Leaflet. Некоторые из них платные, а некоторые бесплатные, возможно, с ограничениями (у Google тоже есть). Хотя есть некоторые плагины для геокодирования Leaflet, я не уверен, что они могут сделать то, что вы хотите. Вы должны найти способ заполнять строку поиска плагина данными вашего адреса каждый раз, когда вы нажимаете enter (через Javascript?), с которым я не знаком.

Путь, по которому я пошел бы и шел до сих пор в своих приложениях, заключается в том, что если у меня есть база данных, в которой мне нужно геокодировать адреса и получить координаты, я делаю это как отдельную работу перед созданием приложения, только чтобы сделать новую колонку с координатами в моей базе данных.

Затем база данных хранится в postgres с помощью расширения postgis, а приложение django создается с помощью GeoDjango.

Все это позволяет вам использовать геопространственные данные в вашем приложении django. Затем довольно легко получить все, что вы хотите, из вашей модели в Leaflet, обычно с помощью сериализаторов geojson или конечных точек API.

Это можно сделать и другим способом, не используя базу данных и модель или geodjango, например, из геокодированного csv-файла (который вы тоже создаете заранее) с помощью библиотеки python folium. Вы создаете карту на бэкенде и передаете ее в шаблоне с iframe.

Вернуться на верх