Kontextmenü Reinzoomen zoomIn Funktion implementieren
This commit is contained in:
BIN
.next/cache/webpack/client-development/0.pack.gz
vendored
BIN
.next/cache/webpack/client-development/0.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/client-development/3.pack.gz
vendored
BIN
.next/cache/webpack/client-development/3.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/client-development/index.pack.gz
vendored
BIN
.next/cache/webpack/client-development/index.pack.gz
vendored
Binary file not shown.
Binary file not shown.
BIN
.next/cache/webpack/server-development/0.pack.gz
vendored
BIN
.next/cache/webpack/server-development/0.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/server-development/1.pack.gz
vendored
BIN
.next/cache/webpack/server-development/1.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/server-development/2.pack.gz
vendored
BIN
.next/cache/webpack/server-development/2.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/server-development/3.pack.gz
vendored
BIN
.next/cache/webpack/server-development/3.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/server-development/5.pack.gz
vendored
BIN
.next/cache/webpack/server-development/5.pack.gz
vendored
Binary file not shown.
BIN
.next/cache/webpack/server-development/index.pack.gz
vendored
BIN
.next/cache/webpack/server-development/index.pack.gz
vendored
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -153,7 +153,7 @@
|
||||
/******/
|
||||
/******/ /* webpack/runtime/getFullHash */
|
||||
/******/ !function() {
|
||||
/******/ __webpack_require__.h = function() { return "4146aa11c7c552df"; }
|
||||
/******/ __webpack_require__.h = function() { return "a77be7ddd2f59b1f"; }
|
||||
/******/ }();
|
||||
/******/
|
||||
/******/ /* webpack/runtime/global */
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -265,6 +265,7 @@ const MapComponent = ({
|
||||
//-----Kontextmenu----ende------------
|
||||
|
||||
const showAddStationPopup = (e, map) => {
|
||||
//popupContent Station hinzufügen
|
||||
const popupContent = `
|
||||
<form id="addStationForm" class="m-0 p-2 w-full">
|
||||
<div class="flex items-center mb-4">
|
||||
|
||||
@@ -1,60 +1,165 @@
|
||||
import React, { useEffect, useRef, useState } from "react";
|
||||
import L from "leaflet";
|
||||
import "leaflet/dist/leaflet.css";
|
||||
|
||||
import "leaflet-contextmenu/dist/leaflet.contextmenu.css";
|
||||
import "leaflet-contextmenu";
|
||||
const MapComponent = () => {
|
||||
const mapRef = useRef(null);
|
||||
const [map, setMap] = useState(null);
|
||||
|
||||
function addMarker(map) {
|
||||
const marker = L.marker([53.111111, 8.4625]).addTo(map);
|
||||
marker.bindPopup("<b>Hallo Welt!</b><br>Ich bin ein Popup.").openPopup();
|
||||
}
|
||||
let initialMap = [];
|
||||
|
||||
useEffect(() => {
|
||||
if (mapRef.current && !map) {
|
||||
const initialMap = L.map(mapRef.current, {
|
||||
// Initialisiere die Karte ohne die Standard-Zoomsteuerung
|
||||
initialMap = L.map(mapRef.current, {
|
||||
center: [53.111111, 8.4625],
|
||||
zoom: 10,
|
||||
zoomControl: false, // Deaktiviere die Standard-Zoomsteuerung
|
||||
contextmenu: true,
|
||||
contextmenuItems: [
|
||||
{ text: "Station hinzufügen", callback: showAddStationPopup },
|
||||
{
|
||||
text: "Station öffnen (Tab)",
|
||||
icon: "img/screen_new.png",
|
||||
callback: newLink,
|
||||
},
|
||||
{
|
||||
text: "Station öffnen",
|
||||
icon: "img/screen_same.png",
|
||||
callback: sameLink,
|
||||
},
|
||||
{
|
||||
text: "Koordinaten",
|
||||
icon: "img/screen_same.png",
|
||||
callback: lata,
|
||||
},
|
||||
"-", // Divider
|
||||
{ text: "Reinzoomen", callback: zoomIn },
|
||||
{ text: "Rauszoomen", callback: zoomOut },
|
||||
{ text: "Hier zentrieren", callback: centerHere },
|
||||
],
|
||||
});
|
||||
|
||||
initialMap.on("contextmenu", (event) => {
|
||||
L.popup()
|
||||
.setLatLng(event.latlng)
|
||||
.setContent(
|
||||
`
|
||||
<p>
|
||||
<button onclick="zoomIn()">Zoom in</button>
|
||||
<button onclick="zoomOut()">Zoom out</button>
|
||||
<button onclick="centerHere(${event.latlng.lat}, ${event.latlng.lng})">Hier zentrieren</button>
|
||||
</p>`
|
||||
)
|
||||
.openOn(initialMap);
|
||||
});
|
||||
|
||||
window.zoomIn = () => {
|
||||
initialMap.zoomIn();
|
||||
};
|
||||
|
||||
window.zoomOut = () => {
|
||||
initialMap.zoomOut();
|
||||
};
|
||||
|
||||
window.centerHere = (lat, lng) => {
|
||||
initialMap.panTo(new L.LatLng(lat, lng));
|
||||
};
|
||||
|
||||
initialMap.flyTo([53.34399291274182, 7.607860512806846], 12);
|
||||
console.log(initialMap);
|
||||
L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
|
||||
attribution:
|
||||
'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||
}).addTo(initialMap);
|
||||
addMarker(initialMap);
|
||||
|
||||
setMap(initialMap);
|
||||
}
|
||||
}, [mapRef, map]);
|
||||
|
||||
console.log(map);
|
||||
if (map) {
|
||||
map.flyTo([53.34399291274182, 7.607860512806846], 18);
|
||||
}
|
||||
//-----Kontextmenu----------------
|
||||
const newLink = (e) => {
|
||||
try {
|
||||
if (!e.relatedTarget || !e.relatedTarget.options) {
|
||||
throw new Error("relatedTarget or options not defined");
|
||||
}
|
||||
alert("Neues Fenster: " + e.relatedTarget.options.test);
|
||||
window
|
||||
.open(`../devices/${e.relatedTarget.options.test}`, "_blank")
|
||||
.focus();
|
||||
} catch (error) {
|
||||
console.error("Failed in newLink function:", error);
|
||||
}
|
||||
};
|
||||
|
||||
const sameLink = (e) => {
|
||||
alert(e.relatedTarget.options.test);
|
||||
window
|
||||
.open("../devices/" + e.relatedTarget.options.test, "_parent")
|
||||
.focus();
|
||||
};
|
||||
|
||||
const lata = (e) => {
|
||||
alert("Breitengrad: " + e.latlng.lat);
|
||||
};
|
||||
|
||||
const zoomIn = (e) => {
|
||||
console.log(e);
|
||||
console.log(initialMap);
|
||||
console.log("zoomIn");
|
||||
/* if (!map) {
|
||||
console.error("Karte ist noch nicht initialisiert in zoomIn.");
|
||||
return;
|
||||
} */
|
||||
|
||||
initialMap.flyTo(
|
||||
{
|
||||
lat: 53.34399291274182,
|
||||
lng: 7.607860512806846,
|
||||
},
|
||||
12
|
||||
);
|
||||
};
|
||||
|
||||
const zoomOut = (e) => {
|
||||
if (!map) {
|
||||
console.error("Karte ist noch nicht initialisiert in zoomOut.");
|
||||
return;
|
||||
}
|
||||
// Annahme: Du willst beim Rauszoomen die aktuelle Position halten
|
||||
// und nur den Zoom-Level ändern. Hier reduzieren wir den Zoom-Level um 1.
|
||||
const currentZoom = map.getZoom();
|
||||
map.flyTo(e.latlng, map.getZoom() - 1);
|
||||
};
|
||||
|
||||
const showCoordinates = (e) => {
|
||||
alert("Breitengrad: " + e.latlng.lat + "\nLängengrad: " + e.latlng.lng);
|
||||
};
|
||||
const showData = (e) => {
|
||||
console.log(e);
|
||||
};
|
||||
const showTalas = (e) => {
|
||||
map.addLayer(TALAS);
|
||||
loadData();
|
||||
};
|
||||
const hideTalas = (e) => {
|
||||
map.removeLayer(TALAS);
|
||||
loadData();
|
||||
};
|
||||
const showGSM = (e) => {
|
||||
map.addLayer(GMA);
|
||||
loadData();
|
||||
};
|
||||
const hideGSM = (e) => {
|
||||
map.removeLayer(GMA);
|
||||
loadData();
|
||||
};
|
||||
//-----Kontextmenu----ende------------
|
||||
|
||||
const showAddStationPopup = (e) => {
|
||||
const popupContent = L.DomUtil.create("form");
|
||||
popupContent.innerHTML = `
|
||||
<div style="margin: 0; padding: 0; width: 200px;">
|
||||
<label>Name:</label><input type="text" id="name" name="name" placeholder="Name der Station"><br>
|
||||
<label>Typ:</label><input type="text" id="type" name="type" placeholder="Typ der Station"><br>
|
||||
<label>Breitengrad:</label><input type="text" id="lat" name="lat" value="${e.latlng.lat.toFixed(
|
||||
5
|
||||
)}" readonly><br>
|
||||
<label>Längengrad:</label><input type="text" id="lng" name="lng" value="${e.latlng.lng.toFixed(
|
||||
5
|
||||
)}" readonly><br>
|
||||
<button type="submit">Station hinzufügen</button>
|
||||
</div>
|
||||
`;
|
||||
L.popup()
|
||||
.setLatLng(e.latlng)
|
||||
.setContent(popupContent)
|
||||
.openOn(e.relatedTarget);
|
||||
};
|
||||
|
||||
const centerHere = (e) => {
|
||||
map.panTo(e.latlng);
|
||||
};
|
||||
|
||||
return (
|
||||
<div
|
||||
id="map"
|
||||
|
||||
Reference in New Issue
Block a user