Zoom when an address is provided or the map is clicked
This commit is contained in:
parent
c5c78a2b84
commit
07e48aa071
2 changed files with 32 additions and 12 deletions
|
|
@ -53,18 +53,14 @@ const markerInstances: Ref<maplibregl.Marker[]> = shallowRef<
|
||||||
maplibregl.Marker[]
|
maplibregl.Marker[]
|
||||||
>([]);
|
>([]);
|
||||||
|
|
||||||
function _bounds(): LngLatBoundsLike {
|
|
||||||
if (props.markers.length > 0) {
|
|
||||||
return boundsMarkers(props.markers);
|
|
||||||
} else {
|
|
||||||
return boundsDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Initialize map
|
// Initialize map
|
||||||
const initializeMap = () => {
|
const initializeMap = () => {
|
||||||
if (!mapContainer.value) return;
|
if (!mapContainer.value) return;
|
||||||
|
|
||||||
const bounds = _bounds();
|
let bounds = boundsDefault();
|
||||||
|
if (props.markers.length > 0) {
|
||||||
|
bounds = boundsMarkers(props.markers);
|
||||||
|
}
|
||||||
map.value = new maplibregl.Map({
|
map.value = new maplibregl.Map({
|
||||||
bounds: bounds,
|
bounds: bounds,
|
||||||
container: mapContainer.value,
|
container: mapContainer.value,
|
||||||
|
|
@ -132,14 +128,14 @@ const frameMarkers = () => {
|
||||||
|
|
||||||
if (props.markers.length === 1) {
|
if (props.markers.length === 1) {
|
||||||
// Single marker: pan to it
|
// Single marker: pan to it
|
||||||
map.value.panTo(props.markers[0].location, { duration: 1000 });
|
map.value.panTo(props.markers[0].location, { duration: 1000, zoom: 15 });
|
||||||
} else {
|
} else {
|
||||||
// Multiple markers: fit bounds
|
// Multiple markers: fit bounds
|
||||||
const bounds = new maplibregl.LngLatBounds();
|
const bounds = new maplibregl.LngLatBounds();
|
||||||
props.markers.forEach((marker) => {
|
props.markers.forEach((marker) => {
|
||||||
bounds.extend([marker.location.lng, marker.location.lat]);
|
bounds.extend([marker.location.lng, marker.location.lat]);
|
||||||
});
|
});
|
||||||
map.value.fitBounds(bounds, { padding: 50, duration: 1000 });
|
map.value.fitBounds(bounds, { padding: 10, duration: 1000 });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -533,11 +533,35 @@ const markers = computed((): Marker[] => {
|
||||||
});
|
});
|
||||||
function doAddressSelected(address: Address) {
|
function doAddressSelected(address: Address) {
|
||||||
console.log("Address selected", address);
|
console.log("Address selected", address);
|
||||||
|
const geom = address.geometry;
|
||||||
|
if (!geom) {
|
||||||
|
console.error("No geometry on address", address);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
marker.value = {
|
||||||
|
color: "#FF0000",
|
||||||
|
draggable: true,
|
||||||
|
id: "x",
|
||||||
|
location: {
|
||||||
|
lat: geom.coordinates[1],
|
||||||
|
lng: geom.coordinates[0],
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
function doMapClick(location: Location) {
|
function doMapClick(location: Location) {
|
||||||
console.log("Map clicked", location);
|
marker.value = {
|
||||||
|
color: "#FF0000",
|
||||||
|
draggable: true,
|
||||||
|
id: "x",
|
||||||
|
location: location,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
function doMapMarkerDragEnd(location: Location) {
|
function doMapMarkerDragEnd(location: Location) {
|
||||||
console.log("marker drag end", location);
|
marker.value = {
|
||||||
|
color: "#FF0000",
|
||||||
|
draggable: true,
|
||||||
|
id: "x",
|
||||||
|
location: location,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue