Leaflet 编辑非地理地图中的比例尺
我正在制作传单中的非地理地图。由于坐标是笛卡尔坐标,没有地理参考,因此默认情况下不应为Leaflet 编辑非地理地图中的比例尺,leaflet,Leaflet,我正在制作传单中的非地理地图。由于坐标是笛卡尔坐标,没有地理参考,因此默认情况下不应为m,如下所示(我已禁用比例尺中的英制单位): 是否有任何解决方案可以将比例尺中的100米转换为100米,甚至用其他东西替换m 您希望了解: 或 替换未记录的内部方法通常被视为肮脏的黑客行为,并可能导致混乱。根据我的经验,诺贝尔程序员倾向于信任黑客,而不了解JS原型继承是如何工作的 “稍微干净一点”的方法是读取,然后创建L.Control.Scale的子类,例如: L.Control.Scale.prototy
m
,如下所示(我已禁用比例尺中的英制单位):
是否有任何解决方案可以将比例尺中的100米
转换为100米
,甚至用其他东西替换m
您希望了解:
或
替换未记录的内部方法通常被视为肮脏的黑客行为,并可能导致混乱。根据我的经验,诺贝尔程序员倾向于信任黑客,而不了解JS原型继承是如何工作的
“稍微干净一点”的方法是读取,然后创建L.Control.Scale
的子类,例如:
L.Control.Scale.prototype._updateMetric = function (maxMeters) {
var meters = this._getRoundNum(maxMeters),
label = meters + ' units';
this._updateScale(this._mScale, label, meters / maxMeters);
};
var myScaleControl = L.control.scale().addTo(map);
L.Control.MeterlessScale = L.Control.Scale.extend({
_updateMetric: function (maxMeters) {
var meters = this._getRoundNum(maxMeters),
label = meters + ' units';
this._updateScale(this._mScale, label, meters / maxMeters);
}
});
var scale = (new L.Control.MeterlessScale()).addTo(map);
人们不应该害怕阅读传单的源代码。同时,在开始之前,请阅读JS原型继承,并阅读本手册自己的教程
同样,假定
L.CRS
的distance
方法返回的距离以米为单位,并且不能通知任何呼叫者该CRS的单位;因此,L.Control.Scale
假设距离以米为单位。从架构上讲,没有一种简单的方法可以根据CRS提取距离单位(很遗憾)。谢谢Ivan。但是,在向控件类添加新属性时,我遇到类型错误。我在Angular环境中创建应用程序。Angular(和typescript)不是我的专长。但是,请考虑执行<代码> var MealRealStase= L.Prime.Stand .Expand(…)<代码>,然后<代码>新的无量程(…)< /代码>。你将跳过一些传单惯例,但应该没问题。
var myScaleControl = L.control.scale();
myScaleControl._updateMetric = function (maxMeters) {
var meters = this._getRoundNum(maxMeters),
label = meters + ' units';
this._updateScale(this._mScale, label, meters / maxMeters);
};
myScaleControl.addTo(map);
L.Control.MeterlessScale = L.Control.Scale.extend({
_updateMetric: function (maxMeters) {
var meters = this._getRoundNum(maxMeters),
label = meters + ' units';
this._updateScale(this._mScale, label, meters / maxMeters);
}
});
var scale = (new L.Control.MeterlessScale()).addTo(map);