Add location control to the map properly
This commit is contained in:
parent
83288289d6
commit
4f63a87a76
@ -7,11 +7,17 @@
|
|||||||
|
|
||||||
let mapElement;
|
let mapElement;
|
||||||
let locationChecked;
|
let locationChecked;
|
||||||
|
let locationControl;
|
||||||
|
|
||||||
export let onMapClick = () => {};
|
export let onMapClick = () => {};
|
||||||
export let map;
|
export let map;
|
||||||
|
|
||||||
const locationCheckedChanged = () => {
|
const locationCheckedChanged = (setValue) => {
|
||||||
|
if (setValue === true || setValue === false) {
|
||||||
|
// Shortcut to set it in this function, if they passed a boolean
|
||||||
|
locationChecked = !!setValue;
|
||||||
|
}
|
||||||
|
|
||||||
if (locationChecked) {
|
if (locationChecked) {
|
||||||
console.log('Starting location');
|
console.log('Starting location');
|
||||||
map.locate({ setView: true, watch: true, enableHighAccuracy: true });
|
map.locate({ setView: true, watch: true, enableHighAccuracy: true });
|
||||||
@ -29,36 +35,40 @@
|
|||||||
// TODO: Pick a better spot
|
// TODO: Pick a better spot
|
||||||
map.setView([51.505, -0.09], 13);
|
map.setView([51.505, -0.09], 13);
|
||||||
map.on('locationerror', (e) => {
|
map.on('locationerror', (e) => {
|
||||||
|
// If getting location caused an error, disable tracking
|
||||||
console.error('Error getting location', e);
|
console.error('Error getting location', e);
|
||||||
locationChecked = false;
|
locationCheckedChanged(false);
|
||||||
locationCheckedChanged();
|
});
|
||||||
|
map.on('dragstart', (e) => {
|
||||||
|
// If they move the map at all, they are not interested in their location anymore
|
||||||
|
locationCheckedChanged(false);
|
||||||
|
});
|
||||||
|
map.on('click', (e) => {
|
||||||
|
// If they click the map at all, they are not interested in their location anymore
|
||||||
|
locationCheckedChanged(false);
|
||||||
});
|
});
|
||||||
map.on('click', onMapClick);
|
map.on('click', onMapClick);
|
||||||
map.on('locationfound', (e) => {
|
map.on('locationfound', (e) => {
|
||||||
dispatch('locationfound', e);
|
dispatch('locationfound', e);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Add the location control
|
||||||
|
let ctrl = leaflet.control();
|
||||||
|
ctrl.onAdd = () => {
|
||||||
|
return locationControl;
|
||||||
|
};
|
||||||
|
ctrl.update = (props) => {
|
||||||
|
console.info('Clicked ctrl:', props);
|
||||||
|
};
|
||||||
|
|
||||||
|
ctrl.addTo(map);
|
||||||
|
|
||||||
leaflet
|
leaflet
|
||||||
.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||||
attribution:
|
attribution:
|
||||||
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||||||
})
|
})
|
||||||
.addTo(map);
|
.addTo(map);
|
||||||
|
|
||||||
// let popup = leaflet.popup();
|
|
||||||
|
|
||||||
// map.on('click', (e) => {
|
|
||||||
// try {
|
|
||||||
// // TODO: Leaflet allows sending coordinates out of the standard range
|
|
||||||
// latlng = e.latlng;
|
|
||||||
// addr = address_from_lat_lon(latlng.lat, latlng.lng);
|
|
||||||
// popup.setLatLng(e.latlng).setContent(`${addr}`).openOn(map);
|
|
||||||
// } catch (err) {
|
|
||||||
// console.error(err);
|
|
||||||
// addr = '';
|
|
||||||
// popup.setLatLng(e.latlng).setContent(`You clicked at ${e.latlng}`).openOn(map);
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -71,9 +81,13 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div id="container" class="h-3/4">
|
<div id="container" class="h-3/4">
|
||||||
<label>
|
<label
|
||||||
|
bind:this={locationControl}
|
||||||
|
class="bg-white p-2 border-black border-solid"
|
||||||
|
on:click|stopPropagation
|
||||||
|
>
|
||||||
<input type="checkbox" bind:checked={locationChecked} on:change={locationCheckedChanged} />
|
<input type="checkbox" bind:checked={locationChecked} on:change={locationCheckedChanged} />
|
||||||
Watch my location
|
Location
|
||||||
</label>
|
</label>
|
||||||
<div id="map" bind:this={mapElement} class="h-full w-full" />
|
<div id="map" bind:this={mapElement} class="h-full w-full" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -4,7 +4,7 @@ import * as xpinWasm from 'xpin-wasm';
|
|||||||
export const emptyxpin = {
|
export const emptyxpin = {
|
||||||
address: '',
|
address: '',
|
||||||
latLon: [0.0, 0.0],
|
latLon: [0.0, 0.0],
|
||||||
decimalDegrees: '',
|
decimalDegrees: ''
|
||||||
};
|
};
|
||||||
|
|
||||||
export function getxpin(xpin) {
|
export function getxpin(xpin) {
|
||||||
|
Loading…
Reference in New Issue
Block a user