#javascript #openlayers #qgis
#javascript #openlayers #qgis
Вопрос:
Я хочу, чтобы мои метки были видны и настраивались в плагине QGIS2web.
Мой код выглядит так:
var size = 0;
var placement = 'point';
function categories_Area5chamber_14(feature, value, size, resolution, labelText,
labelFont, labelFill, bufferColor, bufferWidth,
placement) {
switch(value.toString()) {case 'BT':
return [ new ol.style.Style({
stroke: new ol.style.Stroke({color: 'rgba(35,35,35,1.0)', lineDash: null, lineCap: 'butt',
lineJoin: 'miter', width: 0}),fill: new ol.style.Fill({color: 'rgba(0,0,0,1.0)'}),
text: createTextStyle(feature, resolution, labelText, labelFont,
labelFill, placement, bufferColor,
bufferWidth)
})];
break;
case 'Voneus':
return [ new ol.style.Style({
stroke: new ol.style.Stroke({color: 'rgba(35,35,35,1.0)', lineDash: null, lineCap: 'butt',
lineJoin: 'miter', width: 0}),fill: new ol.style.Fill({color: 'rgba(252,0,0,1.0)'}),
text: createTextStyle(feature, resolution, labelText, labelFont,
labelFill, placement, bufferColor,
bufferWidth)
})];
break;}};
var style_Area5chamber_14 = function(feature, resolution){
var context = {
feature: feature,
variables: {}
};
var value = feature.get("Chamber Type");
var labelText = "";
size = 1;
var labelFont = "15px, sans-serif";
var labelFill = "#787878";
var bufferColor = "";
var bufferWidth = 0;
var textAlign = "left";
var offsetX = 0;
var offsetY = 0;
var placement = 'point';
if (feature.get("Chamber No") !== null) {
labelText = String(feature.get("Chamber No"));
}
var style = categories_Area5chamber_14(feature, value, size, resolution, labelText,
labelFont, labelFill, bufferColor,
bufferWidth, placement);
return style;
};
Элементы, определяющие текст, вообще не работают. только labelFill
действителен.
Я нашел здесь какое-то решение:
но на самом деле это не соответствует моему примеру, потому что у меня:
var style = categories_Area5chamber_14(feature, value, size, resolution, labelText,
labelFont, labelFill, bufferColor,
bufferWidth, placement);
return style;
Как я могу решить эту проблему? Я хочу изменить шрифт, смещение и цвет, но работает только цвет labelFill
.
На изображении ниже вы можете увидеть мои 2 случая, перечисленные в коде. Один соответствует красному прямоугольнику без текста (я не знаю, почему?), А другой — черному прямоугольнику с меткой, которую нельзя редактировать, кроме цвета.
Ответ №1:
Решение аналогичной проблемы находится здесь:
https://github.com/tomchadwin/qgis2web/issues/627
Если labelFont не возвращает результат funt, мы можем добавить его после feature.get
in our labelText
.
var style_Area5chamber_14 = function(feature, resolution){
var context = {
feature: feature,
variables: {}
};
var value = feature.get("Chamber Type");
var labelText = "";
size = 0;
var labelFont = "15px 'MS Shell Dlg 2', sans-serif";
var labelFill = "#787878";
var bufferColor = "";
var bufferWidth = 0;
var textAlign = "center";
var offsetX = 0;
var offsetY = 0;
var placement = 'point';
if (feature.get("Chamber No") !== null) {
labelText = String(feature.get("Chamber No")); labelFont = "15px 'MS Shell Dlg
2', sans-serif"; //adding our font properties again ;
}
var style = categories_Area5chamber_14(feature, value, size, resolution,
labelText,
labelFont, labelFill, bufferColor,
bufferWidth, placement);
return style;
};
Чтобы текст исчез, мы должны знать наш уровень масштабирования, который мы устанавливаем для нашей карты. Если строка слишком длинная, она может не отображаться при превышении текстовой границы (при условии, что это размер красного прямоугольника).
Это происходит, когда вы решаете установить меньший уровень масштабирования. В плагине QGIS2web максимальный уровень масштабирования для нашей карты может составлять 28. Если вы уменьшите его, например, до 21 или 22, то более длинные строки могут быть нам не видны.