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:
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;
}