我正在开发游戏 map 的扩展,它显示来自服务器的事件 map 。 map 可以使用,但不是我提供的。重要的是,他们使用简单的 CRS 来处理游戏坐标。
现在我想创建一个带有半径的圆。半径应该绑定(bind)到 map 单位(latlng)而不是像素,因此如果放大圆圈在屏幕上应该有更大的半径,但相对于世界地图具有相同的半径。
所以我有这个代码作为 map 的扩展:
var bla = L.circle([0,0], 1000, {'color': '#ffffff'}).addTo(map);
如您所见,这只是一个测试。现在应该有一个半径为 1000 的圆(我认为它在 map “单位”中,因为文档中的值被命名为“米”)。但我看到的只是一个圆圈,但它只不过是一个点。
如果我将半径设置为其他大小,则没有效果:
var bla = L.circle([0,0], 100000, {'color': '#ffffff'}).addTo(map);
即使是 1000000000000000 的半径对于半径计算也没有影响。 负半径也不起作用。
你有什么想法吗?
最佳答案
当您使用 0.7 传单和 L.CRS.Simple 投影时,会发生这种情况。
他们在 1.0 测试版中修复了这个问题,但添加了一堆新错误(例如 - 许多 leaflet.draw 插件功能拒绝与新版本一起使用)
我设法找到了两种解决方法:
选项 1:升级到 1.0 beta 或更高版本
选项 2:由于他们已将地球投影硬编码到 L.Circle 中,因此我们还可以像这样破解 leaflet-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;
},
希望这对某人有帮助
关于javascript - 传单圆半径并不重要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586577/