You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#151 2015-12-13 21:17:40
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Also nochmal für alle. Die Datei enthielt über 4000 POIs. Das wird für Leaflet definitiv zu viel.
Im Prinzip sollen so ziemlich alle POIs die eine Großstadt so hat dargestellt werden.
Ich habe ihm dazu geraten alle POIs nicht nicht zwangsläufig anklickbar sein müssen zu rendern. Eventuell auch als extra Layer, falls man den ausblenden können soll.
Alle anderen POIs müssten selectiv einschaltbar sein. Vielleicht hat da ja noch jemand Ideen, wie man das relativ performant in Leaflet umsetzen kann.
Offline
#152 2015-12-13 21:36:42
- SammysHP
- Member

- From: Celle, Germany
- Registered: 2012-02-27
- Posts: 1,707
- Website
Re: Eigene Karte für Spiel erstellen
Clustern und immer nur den aktuellen Ausschnitt laden.
Offline
#153 2015-12-13 21:54:43
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Clustern und immer nur den aktuellen Ausschnitt laden.
Ich hab schon mit dem MarkerCluster-Plugin rumgespielt. Das funktioniert auch ganz gut.
Clustern macht aber bei den POIs nicht viel Sinn. Allerdings läd das Plugin auch immer nur den aktuellen Ausschnitt, was schonmal viel hilft. Ich hab das jetzt erstmal so gemacht, dass ab Zoom 17 nicht mehr geclustert wird, und der Layer sich auch nur einschaltet wenn die Zoomstufe mindestens 17 ist. Das scheint auch schon eine ganz gute Lösung zu sein, allerdings gefällt mir das Ein- und Ausblenden des Layers via addLayer und removeLayer im "zoomend"-Event nicht so richtig.
Offline
#154 2015-12-14 00:01:54
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
allerdings gefällt mir das Ein- und Ausblenden des Layers via addLayer und removeLayer im "zoomend"-Event nicht so richtig.
Nimm bei der Layerdefinition die Optionen maxZoom und minZoom. Das sollte es eigentlich bringen.
Gruss
walter
Last edited by wambacher (2015-12-14 00:08:05)
Offline
#155 2015-12-14 12:26:56
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
TEL0000 wrote:allerdings gefällt mir das Ein- und Ausblenden des Layers via addLayer und removeLayer im "zoomend"-Event nicht so richtig.
Nimm bei der Layerdefinition die Optionen maxZoom und minZoom. Das sollte es eigentlich bringen.
Ich dachte das geht nur bei Tile-Layern. Wenn das auch bei Markern geht, wo müsste ich das minZoom denn unterbringen?
Offline
#156 2015-12-14 13:54:38
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
Ich dachte das geht nur bei Tile-Layern. Wenn das auch bei Markern geht, wo müsste ich das minZoom denn unterbringen?
Mit Markern hab ich noch nie was in Leaflet gemacht - und das hier auch übersehen. Häng es doch einfach mal als Option mit dazu - wenn das geht.
Schick doch mal die Layer-Definition als Snip rüber, dann brauch ich nicht bei Null anzufangen.
EDIT: Aus den Beispielen von MarkerCluster:
var markers = L.markerClusterGroup();
markers.addLayer(L.marker(getRandomLatLng(map)));
... Add more layers ...
map.addLayer(markers);würde ich
var markers = L.markerClusterGroup();
markers.addLayer(L.marker(getRandomLatLng(map),{minZoom:xx,maxZoom:xx}));
... Add more layers ...
map.addLayer(markers);machen. nagel mich jetzt nicht auf eine Klammer fest ![]()
Nachtrag: Mach ich in meinem Locator auch. Hier bei dem Adress-Layer als geoJson, das ab Zoom 15 aktiv wird. Sollte also überall gehen.
var LY_Adresses = L.geoJson(null,{style:addr_style, minZoom:15});
Overlays[4].layer = LY_Adresses;Nicht an dem "null" stören, das wird später im Programm gefüllt.
----------------------------------------
richtig toll wäre es dagegen, wenn ein "totes" Layer garnicht im Layer-Control erscheinen würde, aber dynamische Layer-Controls hab ich noch nicht hinbekommen.
Last edited by wambacher (2015-12-14 14:33:28)
Offline
#157 2015-12-14 14:29:26
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Bei mir sieht das momentan so aus:
var Layer = L.markerClusterGroup({ disableClusteringAtZoom: 17 });
var marker = new L.Marker(markerLocation);
Layer.addLayer(marker);
map.addLayer(Layer);Egal wo ich das hinzufüge, es will nicht funktionieren.
Offline
#158 2015-12-14 14:38:12
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Eigene Karte für Spiel erstellen
TEL0000 wrote:Ich dachte das geht nur bei Tile-Layern. Wenn das auch bei Markern geht, wo müsste ich das minZoom denn unterbringen?
Mit Markern hab ich noch nie was in Leaflet gemacht - und das hier auch übersehen. Häng es doch einfach mal als Option mit dazu - wenn das geht.
Wenn ich die Doku und meine Experimente richtig deute, dann geht minZoom und maxZoom nur bei tileLayer[1], nicht bei Vektorlayern.
[1] http://leafletjs.com/reference.html#tilelayer-options
Habt ihr euch wegen der Performance-Sachen auch mal http://leafletjs.com/reference.html#global angeguckt, speziell L_PREFER_CANVAS ? Könnte was bringen.
OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline
#159 2015-12-14 14:40:06
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
Egal wo ich das hinzufüge, es will nicht funktionieren.
var marker = new L.Marker(markerLocation, {
minZoom:17}
);
wäre für mich logisch. Kann aber sein, dass der Plugin da nicht mitmacht?
Last edited by wambacher (2015-12-14 14:40:37)
Offline
#160 2015-12-14 14:49:17
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
Ansonsten hätte ich noch einen völlig anderen Ansatz für die "Spielerei":
Man könnte die 4000 POI in ein lokales Shape packen, dieses mit einem Spatialen Index versehen und dann als Layer hinzufügen.
Leaflet sollte Shapes können und "vernünftige" Programme nutzen den Spatialen Index um nur die sichtbaren Daten auszuwerten/auszugeben (QGIS macht das). Das könnte fast die Speed einer - hier total unnötigen - GIS-Datenbank erreichen.
Wenn man auf die paar "könnte & sollte" hinwegsieht, ist das sicher "ganz einfach" ![]()
Gruss
walter
Offline
#161 2015-12-14 15:00:48
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Habt ihr euch wegen der Performance-Sachen auch mal http://leafletjs.com/reference.html#global angeguckt, speziell L_PREFER_CANVAS ? Könnte was bringen.
Die Option kannte ich noch nicht. Ich kann aber auch kein Performance-Unterschied feststellen. Woran kann ich denn erkennen ob das überhaupt richtig funktioniert? Und ist das nicht eher für das Zeichnen von Polygonen gedacht? (e.g. many thousands of circle markers)
var marker = new L.Marker(markerLocation, {
minZoom:17}
);wäre für mich logisch. Kann aber sein, dass der Plugin da nicht mitmacht?
Das funktioniert leider weder mit noch ohne Plugin.
Offline
#162 2015-12-14 15:08:50
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
Das funktioniert leider weder mit noch ohne Plugin.
Jo, dann schieb mal bitte das Codestück ohne Plugin rüber.
Offline
#163 2015-12-14 15:22:30
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Jo, dann schieb mal bitte das Codestück ohne Plugin rüber.
var Layer = new L.LayerGroup();
var marker = new L.Marker(markerLocation, { minZoom:17 });
Layer.addLayer(marker);
map.addLayer(Layer);Offline
#164 2015-12-14 18:01:12
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Eigene Karte für Spiel erstellen
Ich hab einen Workaround:
map.on('zoomend', function(event) {
if (map.getZoom() > 9) {
if (!map.hasLayer(jsonLayer)){
map.addLayer(jsonLayer);
}
} else {
map.removeLayer(jsonLayer);
}
});OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline
#165 2015-12-14 18:50:26
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Ich hab einen Workaround:
map.on('zoomend', function(event) { if (map.getZoom() > 9) { if (!map.hasLayer(jsonLayer)){ map.addLayer(jsonLayer); } } else { map.removeLayer(jsonLayer); } });
Das war ja meine Ursprungsversion.
Das Problem ist:
1. Man muss bereits beim Laden der Marker noch eine Abfrage für jeden Layer einbauen ob er angezeigt werden soll oder nicht.
2. Wenn man den Layer für den Benutzer ein und ausschaltbar macht, dann kann derjenige den Layer in jeden Zoomlevel einschalten.
Offline
#166 2015-12-14 21:39:59
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
Das war ja meine Ursprungsversion.
Klaro ![]()
ich werde mich Morgen mal richtig dranmachen. Marker als Cluster brauche ich irgendwann auch. Leider funzt das Beispiel vom marker-clustering-realworld.10000.html bei mir noch nicht. Ganz am Anfang gleich L. not found.
https://osm.wno-edv-service.de/locator/ … .10000.jsp
Gruss
walter
Last edited by wambacher (2015-12-14 21:40:59)
Offline
#167 2015-12-14 21:56:59
- TEL0000
- Moderator
- From: Berlin
- Registered: 2008-06-11
- Posts: 968
Re: Eigene Karte für Spiel erstellen
Ganz am Anfang gleich L. not found.
Kein Wunder. Die leaflet.js wird nicht geladen. (Failed to load resource: net::ERR_INSECURE_RESPONSE)
Chrome meint das Serverzertifikat von https://cdn.leafletjs.com/ stimmt nicht mit der URL überein.
Offline
#168 2015-12-14 23:49:54
- wambacher
- Member

- From: Schlangenbad/Wambach, Germany
- Registered: 2009-12-16
- Posts: 16,769
- Website
Re: Eigene Karte für Spiel erstellen
wambacher wrote:Ganz am Anfang gleich L. not found.
Kein Wunder. Die leaflet.js wird nicht geladen. (Failed to load resource: net::ERR_INSECURE_RESPONSE)
Chrome meint das Serverzertifikat von https://cdn.leafletjs.com/ stimmt nicht mit der URL überein.
Naja, FF motzte darüber net, es lief einfach nicht.
Habe mal die beiden leaflet-links ausgetausch und nehme jetzt die Remote-Links, die ich bei meinen anderen LL-Seiten auch verwende - und dieser Fehler ist weg. Nachher noch ein wenig mehr auf HTTPS umstellen und dann sollte das Teil laufen. Hab es halt 1 zu 1 von der Demosite kopiert.
Danke und Gruss
walter
EDIT: So, hab das Demoteil zum Laufen bekommen und mich nochmals reingekniet - und auch endlich die Doku gelesen: es geht nicht anders als ihr es schon macht. Dass das bei geoJson funzt, liegt daran, dass der Server entscheidet, was zu sehen ist und nicht etwa Leaflet.
Last edited by wambacher (2015-12-15 01:49:49)
Offline
#169 2015-12-15 08:57:14
- gormo
- Member
- Registered: 2013-08-01
- Posts: 2,119
- Website
Re: Eigene Karte für Spiel erstellen
EDIT: So, hab das Demoteil zum Laufen bekommen und mich nochmals reingekniet - und auch endlich die Doku gelesen: es geht nicht anders als ihr es schon macht. Dass das bei geoJson funzt, liegt daran, dass der Server entscheidet, was zu sehen ist und nicht etwa Leaflet.
Puh, ich wollte schon an meiner geistigen Gesundheit zweifeln (also mehr als das Huhn auf meinem Kopf mir immer einredet ;-) ).
edit: Ich hab nochmal ein bisschen was für "Angeben mit leaflet": JSON per AJAX von github gist holen, und ein bisschen Styling auf JSON-Layern, und "Marker selektieren": http://jsfiddle.net/8p2o4qn6/6/
Last edited by gormo (2015-12-15 13:56:51)
OSM hat nicht das Ziel bis Ende des Monats einen vollständigen Datensatz der Welt zu enthalten.
(nach S.W.) - Aber weil die Welt vielfältig ist, weil sie auch im Detail interessant ist, mag ich genaue Karten (nach C.)
Offline