javascript - 如何设置传单中的图像偏移?

标签 javascript leaflet mapbox openstreetmap mapbox-gl-js

是否可以使用传单根据偏移量移动图 block 层

问题是我使用 OSM 数据在 map 上显示标记和建筑轮廓,但由于我使用另一个图 block 提供程序,OSM 数据与卫星图像不同步

有没有一种简单的方法可以在传单中添加偏移量?

附上 openstreetmap 的 iD 编辑器的屏幕截图:

https://youtu.be/IRLyMKVERvo

最佳答案

Is it possible to use leaflet to move tile layer based on a offset?

Yes .

Is there a simple way of adding offset in leaflet?

No .


有多种方法可以偏移 Leaflet L.TileLayer,但它们并不简单。我建议阅读 extending Leaflet classes并在执行此类任务之前阅读 Leaflet 的源代码。

一种方法是使用 decorator pattern计算图 block CSS 偏移量的特定代码位,即 the internal _getTilePos() method of L.GridLayer :

_getTilePos: function (coords) {
    return coords.scaleBy(this.getTileSize()).subtract(this._level.origin);
},

该内部方法接受图 block 坐标,并返回相对于Leaflet所谓的原始像素像素坐标。这些概念是documented .

因此,我可以通过子类化 L.TileLayer 并使用 _getTilePos 的新实现创建一个新类来创建装饰器(但重用父类的实现),例如

var OffsetTileLayer = L.TileLayer.extend({
    _getTilePos: function (coords) {
        var pos = L.TileLayer.prototype._getTilePos.call(this, coords);
        return pos.add([25, 25]);
    },
});

var offsetTileLayer = new OffsetTileLayer(/* etc */);
offsetTileLayer.addTo(map);

查看working example .

这将使图 block 的 CSS 位置(由 L.Point 的实例表示)偏移 25 个水平和垂直像素。注意偏移量是CSS像素; 不是米,不是纬度/经度。

可以使该偏移量取决于图 block 坐标(可以从中导出纬度、经度和比例),但我怀疑如果涉及大地测量计算,则会出现伪影(例如图 block 之间的间隙) (即如何根据图 block 坐标计算米)没有仔细完成。

关于javascript - 如何设置传单中的图像偏移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62549502/

相关文章:

javascript - mapbox.js 没有完全在 Bootstrap Modal 中呈现

java - 将 GeoJson 转换为 mapbox Polygon 对象 (Android)

javascript - 添加新记录时如何附加委托(delegate)

javascript - ASP.NET MVC 3 - Ajax 更新表 - 模型

javascript - 如何无缝更改网站的网址

angularjs - LeafletJS 在移动 map 之前不会加载所有图 block

javascript - 如何将超链接添加到通过 Leaflet.Draw 创建的 Leaflet 折线?

ios - Mapbox SDK离线 map 下载

javascript - Chrome 似乎报告错误的错误行

mysql - 如何将完成的多边形点 leaflet.draw 保存到 mysql 表