nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

commit af0a4872001e620f2ed71d286e153442112c75d0
parent 8cbb4dbd8cb7dc0cebc8b4e28bcc2cf3059d8590
Author: Sergej Orlov <wladimirych@gmail.com>
Date:   Wed,  7 Nov 2018 21:30:19 +0100

fix print of canvasMarkers near 180 meridian  #156

Diffstat:
Msrc/lib/leaflet.layer.canvasMarkers/index.js | 34+++++++++++++++++++++++-----------
Msrc/lib/leaflet.layer.rasterize/CanvasMarkers.js | 2+-
2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/src/lib/leaflet.layer.canvasMarkers/index.js b/src/lib/leaflet.layer.canvasMarkers/index.js @@ -2,6 +2,7 @@ import L from 'leaflet'; import './canvasMarkers.css'; import rbush from 'rbush'; import loadImage from 'image-promise'; +import {wrapLatLngToTarget} from 'lib/leaflet.fixes/fixWorldCopyJump'; /* Marker definition: @@ -189,23 +190,34 @@ L.Layer.CanvasMarkers = L.GridLayer.extend({ markerJobs = {}; // used only to preload icons - const pointsForMarkers = this.rtree.search({ - minX: iconsBounds.getWest(), + const pointsForMarkers = []; + for (let shift of [-360, 0, 360]) { + pointsForMarkers.push(...this.rtree.search({ + minX: iconsBounds.getWest() + shift, minY: iconsBounds.getSouth(), - maxX: iconsBounds.getEast(), + maxX: iconsBounds.getEast() + shift, maxY: iconsBounds.getNorth() - } - ); + })); + } // used to place labels - const pointsForLabels = this.rtree.search({ - minX: labelsBounds.getWest(), minY: labelsBounds.getSouth(), - maxX: labelsBounds.getEast(), maxY: labelsBounds.getNorth() - } - ); + const pointsForLabels = []; + for (let shift of [-360, 0, 360]) { + pointsForLabels.push(...this.rtree.search({ + minX: labelsBounds.getWest() + shift, + minY: labelsBounds.getSouth(), + maxX: labelsBounds.getEast() + shift, + maxY: labelsBounds.getNorth() + })); + } + const tileMidLongitude = this._map.unproject([(tileE + tileW) / 2, tileN], zoom); for (let marker of pointsForMarkers) { - const p = this._map.project(marker.latlng, zoom); + let latlng = marker.latlng; + if (this.options.noWrap) { + latlng = wrapLatLngToTarget(latlng, tileMidLongitude); + } + const p = this._map.project(latlng, zoom); let icon = marker.icon; if (typeof icon === 'function') { icon = icon(marker); diff --git a/src/lib/leaflet.layer.rasterize/CanvasMarkers.js b/src/lib/leaflet.layer.rasterize/CanvasMarkers.js @@ -20,7 +20,7 @@ L.Layer.CanvasMarkers.include({ }, cloneForPrint: function(options) { - options = L.Util.extend({}, this.options); + options = L.Util.extend({}, this.options, {noWrap: true}); if (options.printIconsOpacity !== undefined) { options.iconsOpacity = options.printIconsOpacity; }