小叶圆半径不重要

Leaflet circle radius doesn't matter

本文关键字:不重要 叶圆半      更新时间:2023-09-26

我正在为显示来自服务器的活动地图的游戏地图的扩展工作。地图还能用,而且不是我送的。重要的是,他们正在使用简单的CRS来处理游戏坐标。

现在我想创建一个半径的圆。半径应该绑定到地图单位(latlng),而不是像素,所以如果你放大圆圈,屏幕上的半径应该更大,但相对于世界地图的半径是相同的。

我将这段代码作为map的扩展:

var bla = L.circle([0,0], 1000, {'color': '#ffffff'}).addTo(map);
如您所见,这只是一个测试。现在应该有一个半径为1000的圆(我认为它在地图"单位"中,因为文档中的值被命名为"米")。但是我看到的只是一个圆,只不过是一个点。

如果我将半径设置为另一个大小,则没有效果:

var bla = L.circle([0,0], 100000, {'color': '#ffffff'}).addTo(map);

即使是1000000000000000的半径对半径计算也没有影响。负半径也不行

你有什么想法吗?

当你使用L.CRS.Simple投影时,就会发生这种情况。

他们在1.0测试版中修复了这个问题,但增加了一堆新的错误(例如-大量的传单)。绘制插件功能拒绝与新版本一起工作)

我已经找到了2个解决方法:

选项1:升级到1.0测试版或更高版本

选项2:既然他们已经将地球投影硬编码到l圈中,我们也可以像这样破解leaf -src.js:

改变

_getLatRadius: function () {
    return (this._mRadius / 40075017) * 360;
},
_getLngRadius: function () {
    return this._getLatRadius() / Math.cos(L.LatLng.DEG_TO_RAD * this._latlng.lat);
},

_getLatRadius: function () {
    return this._mRadius;
},
_getLngRadius: function () {
    return this._mRadius;
},

希望对大家有所帮助

我有同样的问题,但Stas的答案不适合我(现在使用传单1.9)。

我设法使它工作通过强制_updateCircle接受我的参数。在leaflet-src.js中我修改了这个:

_updateCircle: function(t) {
                var e = t._point,
                    i = Math.max(Math.round(t._radius), 1),
                    n = "a" + i + "," + (Math.max(Math.round(t._radiusY), 1) || i) + " 0 1,0 ",
                    e = t._empty() ? "M0 0" : "M" + (e.x - i) + "," + e.y + n + 2 * i + ",0 " + n + 2 * -i + ",0 ";
                this._setPath(t, e)
            },

:

_updateCircle: function(t) {
                /******/
                t._radius = t._mRadius
                t._radiusY =  t._mRadius
                /******/
                var e = t._point,
                    i = Math.max(Math.round(t._radius), 1),
                    n = "a" + i + "," + (Math.max(Math.round(t._radiusY), 1) || i) + " 0 1,0 ",
                    e = t._empty() ? "M0 0" : "M" + (e.x - i) + "," + e.y + n + 2 * i + ",0 " + n + 2 * -i + ",0 ";
                this._setPath(t, e)
            },

你失去了在Y轴上拉伸圆的可能性(_radiusY总是等于_radius),但这是一个相当罕见的功能(坦率地说,我不知道如何控制它)。