Widget:LeafletWWW: Unterschied zwischen den Versionen
HorstR (Diskussion | Beiträge) Die Seite wurde neu angelegt: „<div id="map" style="width:100%;height:80vh;border:3px solid black;border-radius:10px;"></div> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script> <link rel="stylesheet" href="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.css"/> <script src="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.js"></script> <style> .legen…“ |
HorstR (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
<div id="map" style=" | <div id="map" class="fullwidth" | ||
style="height:80vh;border:3px solid black;border-radius:10px;"></div> | |||
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/> | <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/> | ||
| Zeile 107: | Zeile 108: | ||
var geojsonLayer; | var geojsonLayer; | ||
fetch("/alteskoeln/ | fetch("/alteskoeln/WasWarWo.geojson") | ||
.then(r=>r.json()) | .then(r=>r.json()) | ||
.then(data=>{ | .then(data=>{ | ||
| Zeile 222: | Zeile 223: | ||
var div=L.DomUtil.create('div','layerbox'); | var div=L.DomUtil.create('div','layerbox'); | ||
L.DomEvent.disableClickPropagation(div); | |||
L.DomEvent.disableScrollPropagation(div); | |||
div.innerHTML=` | div.innerHTML=` | ||
| Zeile 254: | Zeile 258: | ||
}; | }; | ||
// --- Legende --- | |||
var legend=L.control({position:'bottomright'}); | |||
legend.onAdd=function(){ | |||
var div=L.DomUtil.create('div','legend'); | |||
div.innerHTML=` | |||
<b>Was War Wo</b><br> | |||
<i style="background:blue"></i> Verteidigen & Schützen<br> | |||
<i style="background:gray"></i> Arbeiten & Transportieren<br> | |||
<i style="background:purple"></i> Beten & Heilen<br> | |||
<i style="background:green"></i> Ackern & Mahlen<br> | |||
<i style="background:orange"></i> Leben & Lernen | |||
`; | |||
return div; | |||
}; | |||
legend.addTo(map); | |||
// --- Legenden Button --- | |||
var legendButton = L.control({position:'bottomright'}); | |||
legendButton.onAdd = function(){ | |||
var btn = L.DomUtil.create('button','leaflet-bar'); | |||
btn.innerHTML = '☰'; | |||
btn.title = "Legende"; | |||
btn.style.padding = '5px 10px'; | |||
btn.style.fontWeight = 'bold'; | |||
btn.style.cursor = 'pointer'; | |||
btn.style.backgroundColor = 'white'; | |||
btn.style.border = '2px solid rgba(0,0,0,0.2)'; | |||
btn.style.borderRadius = '4px'; | |||
btn.onclick = function(){ | |||
var legendDiv = document.querySelector('.legend'); | |||
legendDiv.style.display = | |||
(legendDiv.style.display==="none") ? "block" : "none"; | |||
}; | |||
return btn; | |||
}; | |||
legendButton.addTo(map); | |||
layerBox.addTo(map); | layerBox.addTo(map); | ||
| Zeile 296: | Zeile 356: | ||
},500); | },500); | ||
</script> | </script> | ||
Aktuelle Version vom 10. März 2026, 18:32 Uhr
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<link rel="stylesheet" href="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.css"/> <script src="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.js"></script>
<style>
.legend{ display:none; line-height:18px; background:rgba(255,255,255,0.9); padding:10px; border-radius:6px; box-shadow:0 0 10px rgba(0,0,0,0.3); }
.legend i{ width:18px; height:18px; float:left; margin-right:8px; }
.layerbox{ background:rgba(255,255,255,0.9); padding:10px; border-radius:6px; box-shadow:0 0 10px rgba(0,0,0,0.3); font-size:14px; }
.layerbox h4{ margin:0; cursor:pointer; }
.layercontent{ display:block; margin-top:8px; }
</style>
<script>
setTimeout(function(){
var map = L.map('map').setView([50.95,6.95],12);
var osm = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png',{ maxZoom:19, attribution:'© OpenStreetMap' }).addTo(map);
var satellite = L.tileLayer( 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { attribution:'Tiles © Esri' });
L.control.layers({ "OpenStreetMap":osm, "Satellit":satellite }).addTo(map);
L.Control.geocoder({ position:'topleft', placeholder:'Suche ...' }).addTo(map);
var wmsDOP1951 = L.tileLayer.wms(
"https://www.wms.nrw.de/geobasis/wms_nw_hist_dop",
{
layers:"nw_hist_dop_1951",
format:"image/png",
transparent:true,
opacity:0.6
});
var wmsNeuaufnahme = L.tileLayer.wms( "https://www.wms.nrw.de/geobasis/wms_nw_neuaufnahme", { layers:"nw_neuaufnahme", format:"image/png", transparent:true, opacity:0.6 });
var wmsTranchot = L.tileLayer.wms( "https://www.wms.nrw.de/geobasis/wms_nw_tranchot", { layers:"nw_tranchot", format:"image/png", transparent:true, opacity:0.6 });
var wmsMercator = L.tileLayer( "https://mapwarper.net/maps/tile/40952/{z}/{x}/{y}.png", { opacity:0.6 });
var geojsonLayer;
fetch("/alteskoeln/WasWarWo.geojson") .then(r=>r.json()) .then(data=>{
geojsonLayer=L.geoJSON(data,{
style:function(feature){
var colors={ 'Verteidigen & Schützen':'blue', 'Arbeiten & Transportieren':'gray', 'Beten & Heilen':'purple', 'Ackern & Mahlen':'green', 'Leben & Lernen':'orange' };
return{ color:colors[feature.properties.Gruppe]||"black", weight:2, fillOpacity:0.4 };
}
}).addTo(map);
});
function isPointInPolygon(latlng, layer){
var coords = layer.getLatLngs();
if(layer.feature.geometry.type==="MultiPolygon"){ return coords.some(part=>isInside(latlng,part[0])); }
return isInside(latlng,coords[0]); }
function isInside(latlng, poly){
var x=latlng.lat; var y=latlng.lng; var inside=false;
for(var i=0,j=poly.length-1;i<poly.length;j=i++){
var xi=poly[i].lat; var yi=poly[i].lng; var xj=poly[j].lat; var yj=poly[j].lng;
var intersect = ((yi>y)!=(yj>y)) && (x < (xj-xi)*(y-yi)/(yj-yi)+xi);
if(intersect) inside=!inside;
}
return inside;
}
map.on('click', function(e){
var clickedFeatures=[];
geojsonLayer.eachLayer(function(layer){
if(isPointInPolygon(e.latlng,layer)){ clickedFeatures.push(layer.feature.properties); }
});
if(clickedFeatures.length>0){
var content="
clickedFeatures.forEach(function(props){
var name = props.Name || "Unbekannt"; var nutzung = props.Nutzung || "-"; var von = props.von || "?"; var bis = props.bis || "?"; var info = props.Info || "";
content += ""+name+"
"
+""+nutzung+"
"
+"Zeit: "+von+" – "+bis+"
"
"+info+"
";
});
content+="";
L.popup({maxWidth:350}) .setLatLng(e.latlng) .setContent(content) .openOn(map);
}
});
var layerBox=L.control({position:'topright'});
layerBox.onAdd=function(){
var div=L.DomUtil.create('div','layerbox');
L.DomEvent.disableClickPropagation(div); L.DomEvent.disableScrollPropagation(div);
div.innerHTML=`
☰
Historische Orte
<label><input type="checkbox" id="layerWWW" checked> Was War Wo</label>
Historische Karten
<label><input type="checkbox" id="layerDOP1951"> 1951 Orthophoto</label>
<label><input type="checkbox" id="layerNeuaufnahme"> ~1890 Neuaufnahme</label>
<label><input type="checkbox" id="layerTranchot"> 1801–1828 Tranchot</label>
<label><input type="checkbox" id="layerMercator"> 1751 Mercator</label>
Transparenz
<input type="range" id="opacitySlider" min="0" max="1" step="0.1" value="0.6">
`;
return div;
};
// --- Legende --- var legend=L.control({position:'bottomright'});
legend.onAdd=function(){
var div=L.DomUtil.create('div','legend');
div.innerHTML=`
Was War Wo
Verteidigen & Schützen
Arbeiten & Transportieren
Beten & Heilen
Ackern & Mahlen
Leben & Lernen
`;
return div;
};
legend.addTo(map);
// --- Legenden Button ---
var legendButton = L.control({position:'bottomright'});
legendButton.onAdd = function(){
var btn = L.DomUtil.create('button','leaflet-bar');
btn.innerHTML = '☰'; btn.title = "Legende";
btn.style.padding = '5px 10px'; btn.style.fontWeight = 'bold'; btn.style.cursor = 'pointer'; btn.style.backgroundColor = 'white'; btn.style.border = '2px solid rgba(0,0,0,0.2)'; btn.style.borderRadius = '4px';
btn.onclick = function(){
var legendDiv = document.querySelector('.legend');
legendDiv.style.display = (legendDiv.style.display==="none") ? "block" : "none";
};
return btn;
};
legendButton.addTo(map);
layerBox.addTo(map);
document.addEventListener("change",function(e){
if(e.target.id==="layerWWW"){ e.target.checked?map.addLayer(geojsonLayer):map.removeLayer(geojsonLayer); }
if(e.target.id==="layerDOP1951"){ e.target.checked?map.addLayer(wmsDOP1951):map.removeLayer(wmsDOP1951); }
if(e.target.id==="layerNeuaufnahme"){ e.target.checked?map.addLayer(wmsNeuaufnahme):map.removeLayer(wmsNeuaufnahme); }
if(e.target.id==="layerTranchot"){ e.target.checked?map.addLayer(wmsTranchot):map.removeLayer(wmsTranchot); }
if(e.target.id==="layerMercator"){ e.target.checked?map.addLayer(wmsMercator):map.removeLayer(wmsMercator); }
});
document.getElementById("opacitySlider").addEventListener("input",function(){
var val=this.value;
wmsDOP1951.setOpacity(val); wmsNeuaufnahme.setOpacity(val); wmsTranchot.setOpacity(val); wmsMercator.setOpacity(val);
});
},500);
</script>
