Die kurze Antwort ist zu sehen, dass Sie nur Zoomstufen, für die Fliesen im Voraus gemacht haben zeigen können. Leaflet erstellt für Sie keine Zwischenzoomstufen.
Die lange Antwort ist, dass, um dies tun zu können, benötigen Sie Ihre eigene CRS Skala Methode zu definieren und an Ihre Karte weitergeben, zum Beispiel:
L.CRS.CustomZoom = L.extend({}, L.CRS.Simple, {
scale: function (zoom) {
// This method should return the tile grid size
// (which is always square) for a specific zoom
// We want 0 = 200px = 2 tiles @ 100x100px,
// 1 = 300px = 3 tiles @ 100x100px, etc.
// Ie.: (200 + zoom*100)/100 => 2 + zoom
return 2 + zoom;
}
});
var map = L.map('map', { crs: L.CRS.CustomZoom }).setView([0, 0], 0);
In diesem Beispiel habe ich verlängert L.CRS.Simple
, aber Sie können natürlich jedes CRS von der API, die Sie möchten, erweitern oder sogar Ihre eigenen von Grund auf neu erstellen.
Bei Verwendung eines Zoomfaktors, der zu einer Kartenpixelgröße führt, die kein Vielfaches Ihrer Kachelgröße ist, werden die Kacheln am rechten/unteren Rand nur teilweise mit Kartendaten gefüllt. Dies kann behoben werden, indem der Nicht-Map-Teil solcher Kacheln zu 100% transparent gemacht wird (oder die gleiche Farbe wie Ihr Hintergrund).
Allerdings ist es meiner Meinung nach eine viel bessere Idee, die Kachelgröße auf den kleinsten gemeinsamen Nenner zu setzen, in diesem Fall 100px. Denken Sie daran, dies zu reflektieren, indem Sie die Option tileSize
in Ihrer Kachelebene verwenden. Und natürlich müssen Sie Ihr Bild in Kacheln mit 100x100 Pixeln anstatt in den 256x256 Kacheln, die Sie gerade verwenden, neu rendern.
Ein Nachteil, die aktuelle Version von LeafletJS (0.5) hat einen Fehler, der verhindert, dass eine benutzerdefinierte scale() -Methode funktioniert, da die TileLayer-Klasse hardcodiert ist, um die Power-of-2-Zoomskalierung zu verwenden. Die Änderung, die Sie vornehmen müssen, ist jedoch geringfügig und hoffentlich wird dies in einer zukünftigen Version von Leaflet behandelt. Einfach TileLayer._getWrapTileNum()
von ändern:
_getWrapTileNum: function() {
// TODO refactor, limit is not valid for non-standard projections
return Math.pow(2, this._getZoomForUrl());
},
An:
_getWrapTileNum: function() {
return this._map.options.crs.scale(this._getZoomForUrl());
},
Wenn Sie nicht, für jede Zoomstufe vorge gemacht Fliesen haben irgendwie höher Fliesen Zoomstufe verwenden Prospekt und sie skalieren und diejenigen benutzen? Obwohl sie leicht verpixelt sein würden? –