refactor: remove old partial for map
This commit is contained in:
@@ -1,146 +0,0 @@
|
|||||||
{% load static %}
|
|
||||||
{% load custom_tags %}
|
|
||||||
{% load i18n %}
|
|
||||||
|
|
||||||
<!-- add MapLibre JavaScript and CSS -->
|
|
||||||
<script src="{% settings_value "MAP_TILE_SERVER" %}/assets/lib/maplibre-gl/maplibre-gl.js"></script>
|
|
||||||
<link href="{% settings_value "MAP_TILE_SERVER" %}/assets/lib/maplibre-gl/maplibre-gl.css" rel="stylesheet"/>
|
|
||||||
|
|
||||||
<!-- add Turf see https://maplibre.org/maplibre-gl-js/docs/examples/draw-a-radius/ -->
|
|
||||||
<script src="{% static 'fellchensammlung/js/turf.min.js' %}"></script>
|
|
||||||
|
|
||||||
<!-- add container for the map -->
|
|
||||||
<div id="map" style="width:100%;aspect-ratio:16/9"></div>
|
|
||||||
|
|
||||||
<!-- start map -->
|
|
||||||
<script>
|
|
||||||
{% if zoom_level %}
|
|
||||||
var zoom_level = {{ zoom_level }};
|
|
||||||
{% else %}
|
|
||||||
var zoom_level = 4;
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if map_center %}
|
|
||||||
var map_center = [{{ map_center.longitude | pointdecimal }}, {{ map_center.latitude | pointdecimal }}];
|
|
||||||
{% else %}
|
|
||||||
var map_center = [10.49, 50.68]; <!-- Point middle of Germany -->
|
|
||||||
zoom_level = 4; //Overwrite zoom level when no place is found
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
let map = new maplibregl.Map({
|
|
||||||
container: 'map',
|
|
||||||
style: '{% static "fellchensammlung/map/styles/colorful/style.json" %}',
|
|
||||||
center: map_center,
|
|
||||||
zoom: zoom_level
|
|
||||||
}).addControl(new maplibregl.NavigationControl());
|
|
||||||
|
|
||||||
{% for adoption_notice in adoption_notices_map %}
|
|
||||||
{% if adoption_notice.location %}
|
|
||||||
// create the popup
|
|
||||||
const popup_{{ forloop.counter }} = new maplibregl.Popup({offset: 25}).setHTML(`{% include "fellchensammlung/partials/partial-adoption-notice-minimal.html" %}`);
|
|
||||||
|
|
||||||
// create DOM element for the marker
|
|
||||||
const el_{{ forloop.counter }} = document.createElement('div');
|
|
||||||
el_{{ forloop.counter }}.id = 'marker_{{ forloop.counter }}';
|
|
||||||
el_{{ forloop.counter }}.classList.add('marker');
|
|
||||||
|
|
||||||
const location_popup_{{ forloop.counter }} = [{{ adoption_notice.location.longitude | pointdecimal }}, {{ adoption_notice.location.latitude | pointdecimal }}];
|
|
||||||
// create the marker
|
|
||||||
new maplibregl.Marker({element: el_{{ forloop.counter }}})
|
|
||||||
.setLngLat(location_popup_{{ forloop.counter }})
|
|
||||||
.setPopup(popup_{{ forloop.counter }}) // sets a popup on this marker
|
|
||||||
.addTo(map);
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% for rescue_organization in rescue_organizations %}
|
|
||||||
{% if rescue_organization.location %}
|
|
||||||
// create the popup
|
|
||||||
const popup_{{ forloop.counter }} = new maplibregl.Popup({offset: 25}).setHTML(`{% include "fellchensammlung/partials/partial-rescue-organization.html" %}`);
|
|
||||||
|
|
||||||
// create DOM element for the marker
|
|
||||||
const el_{{ forloop.counter }} = document.createElement('div');
|
|
||||||
el_{{ forloop.counter }}.id = 'marker_{{ forloop.counter }}';
|
|
||||||
el_{{ forloop.counter }}.classList.add('animal-shelter-marker', 'marker');
|
|
||||||
|
|
||||||
const location_popup_{{ forloop.counter }} = [{{ rescue_organization.location.longitude | pointdecimal }}, {{ rescue_organization.location.latitude | pointdecimal }}];
|
|
||||||
// create the marker
|
|
||||||
new maplibregl.Marker({element: el_{{ forloop.counter }}})
|
|
||||||
.setLngLat(location_popup_{{ forloop.counter }})
|
|
||||||
.setPopup(popup_{{ forloop.counter }}) // sets a popup on this marker
|
|
||||||
.addTo(map);
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
map.on('load', async () => {
|
|
||||||
image = await map.loadImage('{% static "fellchensammlung/img/pin.png" %}');
|
|
||||||
map.addImage('pin', image.data);
|
|
||||||
{% for map_pin in map_pins %}
|
|
||||||
map.addSource('point_{{ forloop.counter }}', {
|
|
||||||
'type': 'geojson',
|
|
||||||
'data': {
|
|
||||||
'type': 'FeatureCollection',
|
|
||||||
'features': [
|
|
||||||
{
|
|
||||||
'type': 'Feature',
|
|
||||||
'geometry': {
|
|
||||||
'type': 'Point',
|
|
||||||
'coordinates': [{{ map_pin.location.longitude | pointdecimal }}, {{ map_pin.location.latitude | pointdecimal }}]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
map.addLayer({
|
|
||||||
'id': 'point_{{ forloop.counter }}',
|
|
||||||
'type': 'circle',
|
|
||||||
'source': 'point_{{ forloop.counter }}',
|
|
||||||
'paint': {
|
|
||||||
'circle-radius': 18,
|
|
||||||
'circle-color': '#ff878980'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
{% endfor %}
|
|
||||||
});
|
|
||||||
|
|
||||||
{% if search_center %}
|
|
||||||
var search_center = [{{ search_center.longitude | pointdecimal }}, {{ search_center.latitude | pointdecimal }}];
|
|
||||||
map.on('load', () => {
|
|
||||||
const radius = {{ search_radius }}; // kilometer
|
|
||||||
const options = {
|
|
||||||
steps: 64,
|
|
||||||
units: 'kilometers'
|
|
||||||
};
|
|
||||||
const circle = turf.circle(search_center, radius, options);
|
|
||||||
|
|
||||||
// Add the circle as a GeoJSON source
|
|
||||||
map.addSource('location-radius', {
|
|
||||||
type: 'geojson',
|
|
||||||
data: circle
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add a fill layer with some transparency
|
|
||||||
map.addLayer({
|
|
||||||
id: 'location-radius',
|
|
||||||
type: 'fill',
|
|
||||||
source: 'location-radius',
|
|
||||||
paint: {
|
|
||||||
'fill-color': 'rgba(140,207,255,0.3)',
|
|
||||||
'fill-opacity': 0.5
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Add a line layer to draw the circle outline
|
|
||||||
map.addLayer({
|
|
||||||
id: 'location-radius-outline',
|
|
||||||
type: 'line',
|
|
||||||
source: 'location-radius',
|
|
||||||
paint: {
|
|
||||||
'line-color': '#0094ff',
|
|
||||||
'line-width': 3
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
</script>
|
|
Reference in New Issue
Block a user