样式项javascript

作者

查尔斯-里克·布尔杰

联系

位于mapgears.com的cbourget

作者

艾伦布德罗

联系

地图齿轮网的Aboudreault

最后更新

2015-05-21

介绍

以这种方式使用StyleItem可以以编程方式而不是使用标准的MapServer表达式来设置功能的样式。

使用

只需通过以下方式声明javascript插件:

MAP
  ...
  LAYER
  ...
    STYLEITEM "javascript://myscript.js" # relative path
    CLASS
    END
  END
END

路径也可以是绝对的。

MAP
  ...
  LAYER
  ...
    STYLEITEM "javascript:///home/user/myscript.js" # absolute path
    CLASS
    END
  END
END

javascript插件必须实现一个名为 styleitem 这将被自动调用。此函数必须返回以下两个选项之一:

  • 样式定义(纯字符串)

  • 具有一个或多个样式的类定义(纯字符串)

备注

每次分析一个特性,每个特性都调用一个javascript插件。这意味着返回的样式或类仅应用于该特定功能。因此,类块不应包含表达式定义,相应的层不应包含类项定义。

备注

声明空类是必需的

对要素属性的访问通过 shape.attributes JavaScript对象。

可以使用以下javascript函数:

  • 警报(str1,str2,…,str)

    在MapServer日志中打印一些文本

  • 打印(str1,str2,…,str)

    在MapServer日志中打印一些文本

  • 需要(路径_to_lib1,路径_to_lib2,…,路径_to_lib)

    包括一个或多个javascript库

例1。单一样式定义

此示例返回单个样式定义…

function styleitem() {
  //Make symbol size 14 or 7
  var size = shape.attributes.NAME.length > 10 ? 14:7;

  var style = "STYLE SIZE " + size + " SYMBOL 'circle'";

  var red = Math.random()*255;
  var green = Math.random()*255;
  var blue = Math.random()*255;
  style += "COLOR " + red + " " + green + " " + blue + " END";

  //Return style to MapServer
  return style;
}

例2。用多种样式定义初始化

此示例返回具有多个样式定义的单个类…

function styleitem() {
  var cls = "CLASS";

  //Make symbol size 14 or 7
  var size = shape.attributes.NAME.length > 10 ? 14:7;

  var style1 = "STYLE SIZE " + size + " SYMBOL 'circle'";
  var style2 = "STYLE SIZE " + size + " SYMBOL 'cross'";

  var red = Math.random()*255;
  var green = Math.random()*255;
  var blue = Math.random()*255;
  style1 += "COLOR " + red + " " + green + " " + blue + " END";
  style2 += "COLOR " + red + " " + green + " " + blue + " END";

  cls += " " + style1 + " " + style2 + " END";

  //Return class to MapServer
  return cls;
}

例3。在MapServer日志中打印日志

此示例在mapserver日志中打印一些javascript日志。

MAP
  ...
  CONFIG  "MS_ERRORFILE" "/tmp/mapserver.log"
  DEBUG 1
  LAYER
  ...
    STYLEITEM "javascript://myscript.js"
    CLASS
    END
  END
END
function styleitem() {
  //Print some logs in MapServer logs
  alert("Processing feature " + shape.attributes.NAME)

  //Make symbol size 14 or 7
  var size = shape.attributes.NAME.length > 10 ? 14:7;

  var style = "STYLE SIZE " + size + " SYMBOL 'circle'";

  var red = Math.random()*255;
  var green = Math.random()*255;
  var blue = Math.random()*255;
  style += "COLOR " + red + " " + green + " " + blue + " END";

  //Return style to MapServer
  return style;
}