ich hatte gerade Kontakt mit einer Stolperstein-Gruppe und da war es so das ich den Link auf die Karte in Verbindung mit der Overpass-Api denen gegeben hatte.
Diese Karte wurde für den “nicht-OSM’ler” für unpassend angesehen. Stimmt auch.
Da Netzwolf seine Karte nicht mehr hat die Frage - gibt es eine Alternative die nur betankt werden muss … ?
@Netzwolf: wo Du Stolpersteine geschrieben hast ist es mir auch wieder in den Sinn gekommen. Damals gab es in der popupmarker.js für die zugehörige Karte eine Cluster-Funktion. Habe nochmal nachgesehen und meine es müßte nachfolgender Abschnitt gewesen sein:
------------------------------------------------------
createPopup: function (marker, nopan) {
this.destroyPopup ();
//---------------------------------------------------------
// check for overlapping icons
//---------------------------------------------------------
var cluster = [];
if (this.clusterSize>0) {
var limit = this.clusterSize/Math.pow(2,this.map.zoom)*156543;
for (var i=0; i<this.markers.length; i++) {
var member=this.markers[i];
if (Math.abs(marker.lonlat.lat-member.lonlat.lat)>limit) continue;
if (Math.abs(marker.lonlat.lon-member.lonlat.lon)>limit) continue;
cluster.push (member.data);
if (member.data.location && this.locations[member.data.location]) {
for (var j=0; j<this.locations[member.data.location].length; j++) {
cluster.push (this.locations[member.data.location][j]);
}
}
}
if (this.clusterSort) cluster.sort(this.clusterSort);
}
Leider kann ich den Code nicht ganz bildlich nachvollziehen - kannst Du mir den allg. verständlich übersetzen. War das nicht auch der Code der seiner Zeit die CSV entsprechend um die Cluster-Punkte erweitert hat - oder habe ich jetzt etwas völlig durcheinander gebracht ?
Der Code wird in Stolperstein- und Geschichtskarte verwendet. Er hat keinen Einfluss auf die Darstellung von Icons, sondern wird erst beim Erzeugen des Popups aktiviert (daher der listig gewählte Name “createPopup”): bei übereinanderliegenden Icons nimmt er die Detaildaten aller beteiligten Symbole ins Popup und nicht nur die des obersten Symbols.
Die naive Implementierung von Server-Side-Clusterung ist offensichtlich: man nehme eine Liste von Clustern, zuerst leer. Dann nimmt man nacheinander jeden POI, schaut, mit welchen bereits existierenden Clustern er überlappt, und wirft den Poi zusammen mit all diesen Clustern in einen neuen Cluster. Überlappt der POI mit keinem Cluster, so erzeugt man für ihn einen neuen. Optional kann man die POIs je Cluster mitzählen und zuletzt Cluster mit nur einem POI darin tilgen. Als Koordinaten für einen Cluster kann man den Mittelpunkt der BBOX oder den Schwerpunkt der POIs nehmen.
Der Teufel steckt im Detail:
ich will wissen, ob die Symbole zu zwei POIs auf der Karte überlappen. Dazu muss ich die verwendete Projektion und die Zoomstufe kennen, und (naiv betrachtet) die geographischen Koordinaten meiner POIs auf Pixel-Koordinaten umrechen.
die naive Implementierung braucht Zeit O(#Cluster * #POI). Mit O(#POI²) abgeschätzt, gäbe das bei der Geschichtskarte in der Größenordung von 100 Milliarden Operationen, bei 1µs je Vergleichsschritt also um 1 Tag Rechenzeit. Bei signifikanten Datenmengen braucht es offensichtlich einen listigeren Algorithmus.