Altes Köln

Widget:LeafletWWW: Unterschied zwischen den Versionen

Aus Altes Köln
Wechseln zu:Navigation, Suche
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 174: Zeile 174:




fetch('/images/WWW.geojson')
fetch('/alteskoeln/WasWarWo.geojson')
.then(res=>res.json())
.then(res=>res.json())
.then(data=>{
.then(data=>{

Version vom 14. März 2026, 14:12 Uhr

Was War Wo

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/> <link rel="stylesheet" href="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.css"/>

<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script> <script src="https://unpkg.com/leaflet-control-geocoder/dist/Control.Geocoder.js"></script>

Was War Wo

<style>

  1. map {

width:100%; height:88vh; border:3px solid black; border-radius:10px; }

.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; max-height:70vh; overflow-y:auto; }

.search-input{ width:100%; margin-bottom:6px; padding:4px; border:1px solid #ccc; border-radius:4px; }

  1. map-frame{

position:relative; }

  1. map-title{

position:absolute; top:10px; left:50%; transform:translateX(-50%); z-index:1000; background:rgba(255,255,255,0.85); padding:6px 14px; font-weight:bold; font-size:18px; border-radius:6px; box-shadow:0 0 6px rgba(0,0,0,0.3); }

  1. map-footer{

position:absolute; bottom:10px; left:10px; z-index:1000; background:rgba(255,255,255,0.85); padding:4px 10px; border-radius:6px; font-size:13px; box-shadow:0 0 6px rgba(0,0,0,0.3); }

  1. map-footer a{

color:red; text-decoration:none; font-weight:bold; }

</style>

<script>

document.addEventListener("DOMContentLoaded", function(){

var map = L.map('map',{ preferCanvas:true, zoomSnap:0.5, zoomDelta:0.5 }).setView([50.95,6.95],12);


var osm = L.tileLayer( 'https://tile.openstreetmap.org/{z}/{x}/{y}.png', {maxZoom:19, attribution:'© OpenStreetMap'} );

var satellite = L.tileLayer( 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {attribution:'Tiles © Esri'} );

osm.addTo(map);

L.control.layers( { "OpenStreetMap":osm, "Satellit":satellite } ).addTo(map);


L.Control.geocoder({ position:'topleft', placeholder:"Suche ..." }).addTo(map);


var nutzungColors={ 'Hof':'red', 'Mühle':'blue', 'Fabrik':'black', 'Gewerbe':'gray', 'Verwaltung':'orange', 'Bahn':'brown', 'Brücke':'navy', 'Hafen':'blue', 'Flughafen':'green', 'Versorgung':'gray', 'Tankstelle':'maroon', 'Brauerei':'yellow', 'Ziegelei':'red', 'Kloster':'orange', 'Kirche':'purple', 'Synagoge':'violet', 'Krankenhaus':'red', 'Friedhof':'green', 'Hochbunker':'black', 'Militär':'green', 'Wohnen':'brown', 'Schule':'red', 'Freizeit':'green' };


var geojsonLayer = L.geoJSON(null,{ renderer:L.canvas(), style:function(feature){ return{ color:nutzungColors[feature.properties.Nutzung] || "black", weight:2, fillOpacity:0.4 }; } }).addTo(map);


fetch('/alteskoeln/WasWarWo.geojson') .then(res=>res.json()) .then(data=>{ geojsonLayer.addData(data); buildLayerbox(data); });


function buildLayerbox(data){

var div = L.DomUtil.create('div','layerbox');

div.innerHTML=`

Layer

<input type="text" id="searchName" placeholder="Suche nach Name ..." class="search-input">

`;

L.DomEvent.disableClickPropagation(div);

var layerBox = L.control({position:'topright'}); layerBox.onAdd=function(){return div;}; layerBox.addTo(map);


var gruppenDiv=document.getElementById('gruppen');

var groups={};

data.features.forEach(f=>{ var g=f.properties.Gruppe || "Sonstiges"; var n=f.properties.Nutzung || "Unbekannt";

if(!groups[g]) groups[g]={}; if(!groups[g][n]) groups[g][n]=0;

groups[g][n]++; });


for(var g in groups){

var gDiv=document.createElement('div');

gDiv.innerHTML=`${g}
`;

for(var n in groups[g]){

var color=nutzungColors[n] || "black";

gDiv.innerHTML+=` <label style="display:flex;align-items:center;gap:4px;"> <input type="checkbox" class="layerNutzung" data-gruppe="${g}" data-nutzung="${n}" checked> ${n} (${groups[g][n]}) </label>
`;

}

gruppenDiv.appendChild(gDiv);

}


document.querySelectorAll('.layerNutzung').forEach(cb=>{

cb.addEventListener('change',function(){

var gruppe=this.dataset.gruppe; var nutzung=this.dataset.nutzung;

geojsonLayer.eachLayer(layer=>{

if(layer.feature.properties.Gruppe===gruppe && layer.feature.properties.Nutzung===nutzung){

if(cb.checked) map.addLayer(layer); else map.removeLayer(layer);

}

});

});

});


document.getElementById('searchName').addEventListener('input',function(){

var val=this.value.toLowerCase();

geojsonLayer.eachLayer(layer=>{

if(!layer.feature.properties.Name) return;

if(layer.feature.properties.Name.toLowerCase().includes(val)){

layer.setStyle({ color:'yellow', weight:4, fillOpacity:0.6 });

}else{

geojsonLayer.resetStyle(layer);

}

});

});

}

});

</script>