Использование 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">© MapTiler</a> <a href="https://www.openstreetmap.org/copyright" target="_blank">© 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.