javascript - 传单 - 功能仅适用于缩放
问题描述
我创建了一个将带有文本(Alpha 加数字)的网格添加到地图的函数,但遇到了一个问题,即该函数最初仅在第一个用户缩放时加载。我已经尝试了几种解决方案,但没有什么可以让它在不强制缩放的情况下进行图层的初始加载。我尝试了几种 layer.on('add, function(eq)) 类型的解决方案,但到目前为止都没有奏效
添加图层时有没有办法调用该函数?
//Create variables and featuregroups, add feature group to overlay
var textgroup = L.featureGroup();
SGFull.addOverlay(textgroup);
SGBeta.addOverlay(textgroup);
SGBeta2.addOverlay(textgroup);
var ZT,ZY,ZTT,ZYY,ZYA = 0;
//Set Text and Grides to Group
function setgridtext(zoom1) {
console.log('zoom1:' + zoom1);
//Find Current Zoom Level and offset text
if (zoom1 == 0) {
ZT = 256;
ZTT = -32;
ZY = 256;
console.log('ZT' +ZT);
}
if(zoom1 == 1) {
ZT = 256;
ZTT = -32;
ZY = 256;
console.log('ZT' + ZT);
}
if(zoom1 == 2) {
ZT = 160;
ZY = 96;
ZYA = 16;
ZTT = -16;
console.log('ZT' +ZT);
}
if(zoom1 == 3) {
ZT = 100;
ZY = 55;
ZTT = -16;
console.log('ZT' +ZT);
}
if(zoom1 == 4) {
ZT = 70;
ZY = 35;
ZTT = -8;
console.log('ZT' +ZT);
}
if(zoom1 == 5) {
ZT = 35;
ZY = 20;
ZTT = -8;
console.log('ZT' +ZT);
}
console.log('ZTcheck' +ZT);
console.log('zoom1b:' +zoom1);
console.log('getzoom:' +map.getZoom());
//Set Text to group
for (let i = 0; i <16; i++) {
letter = String.fromCharCode(65 + i)
modi = 512 * i;
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+ZYA], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+1, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+512], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+2, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+1024], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+3, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+1536], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+4, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+2048], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+5, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+2560], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+6, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+3072], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+7, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+3584], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+8, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+ZTT+modi, ZY+4096], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+9, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+4608], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+10, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+5120], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+11, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+5632], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+12, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+6144], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+13, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+6656], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+14, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+7168], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+15, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
L.circleMarker(map.unproject([ZT+modi, ZY+7680], map.getMaxZoom()), {radius: 1,opacity: 0,}).bindTooltip(letter+16, {permanent: true, direction: "center", className: 'my-labels'}).openTooltip().addTo(textgroup);
};
//Set Grid lines to group
var hold = 0
for (let i = 0; i <17; i++) {
var pointA = map.unproject([hold, 0], map.getMaxZoom());
var pointB = map.unproject([hold, 8192], map.getMaxZoom());
var pointList = [pointA, pointB];
var firstpolyline = new L.Polyline(pointList, {
color: 'grey',
weight: 4,
opacity: 0.8,
smoothFactor: 1
});
firstpolyline.addTo(textgroup);
var pointA = map.unproject([0, hold], map.getMaxZoom());
var pointB = map.unproject([8192, hold], map.getMaxZoom());
var pointList = [pointA, pointB];
var firstpolyline = new L.Polyline(pointList, {
color: 'grey',
weight: 4,
opacity: 0.8,
smoothFactor: 1
});
firstpolyline.addTo(textgroup);
hold = hold + 512
}
}
//On Zoom update text size, remove current text and redrawn text including gridlines
map.on('zoomend', function(eq) {
textgroup.clearLayers();
setMarkerTextSize(map.getZoom());
setgridtext(map.getZoom());
});
// Text resize
// Function to get style of select CSS class
function getStyle(ruleClass) {
for (var s = 0; s < document.styleSheets.length; s++) {
var sheet = document.styleSheets[s];
if (sheet.href == null) {
var rules = sheet.cssRules ? sheet.cssRules : sheet.rules;
if (rules == null) return null;
for (var i = 0; i < rules.length; i++) {
if (rules[i].selectorText == ruleClass) {
return rules[i].style;
}
}
}
}
return null;
}
// Set font size for givem zoom
function setMarkerTextSize(zoom) {
console.log('textzoom:' + zoom)
getStyle('.leaflet-tooltip.my-labels').fontSize = 12 + ((zoom - 1) * 4) + 'px';
}
// Set inital font size
setMarkerTextSize(map.getZoom());
//on load populate the
window.onload = function() {
setgridtext(map.getZoom());
};
解决方案
推荐阅读
- typescript - 赛普拉斯,无论我尝试什么,如果声明都不起作用
- grafana - Graphite 函数按星期几分组/聚合,例如对时间段内的所有星期一求和
- r - 加载多个 .RData 并绑定到单个 data.frame
- ruby-on-rails - 将整数类型的所有主键更改为 bigint,包括引用
- php - 创建作业时出现 AWS Mediaconvert PHP Api 错误
- javascript - 如何为 javascript 重新加载 div?
- java - Heroku 部署错误:java.lang.OutOfMemoryError
- android - 如何修复被广告内容拒绝的安卓游戏?
- python - 单击 div 折叠表格并在 pandas 数据框中转换其内容
- javascript - 自动审核系统白名单 discord.js