MS RFC 102:支持StyleItem javascript插件

日期

2013/08

作者

艾伦布德罗

联系

aboudreault@mapgears.com

状态

采用

版本

MAPServer 7

警告

这个特性是实验性的,在短期内可能会破坏向后兼容性。

警告

参照 样式项javascript 最新文档。

1。概述

目前,我们可以通过使用mapfile中的类和样式来设置功能的样式。我们可以用mapserver表达式做很多样式设计。但是,根据数据的复杂性,最终可能会有数百个用于样式层的mapfile行。它也很难维护。我们还可以指定一个StyleItem选项(auto或[属性]),MapServer可以从中获得特性样式,但这是非常不灵活的。

2。建议的解决方案

此RFC建议添加一个StyleItem JavaScript插件。这个插件支持的目标是能够以编程方式设计我们的特性。这将通过使用V8引擎的JavaScript实现。

三。实施细节

MapServer将有一个新的补充:V8 JavaScript引擎集成。在MapServer中,将有一个通用的实现,其中包含V8引擎所需的内容:编译和执行JavaScript代码。如果需要,它还允许在mapserver代码的其他部分使用javascript。

3.1 V8基本实施

  • 编译javascript代码和文件。

  • 执行javascript代码。

  • mapserver内部javascript执行上下文:线程安全和性能。

  • 向V8公开要在JavaScript中使用的对象。(目前只有形状对象可用)

  • 为mapserver集成了一些处理程序:错误、调试和对javascript代码的回溯。

3.2样式项javascript

样式项javascript插件将类似于当前样式项选项。我们将指定要为特性样式执行的javascript文件,而不是在层定义中编写类。形状属性将向javascript公开。javascript插件必须返回以下两个选项之一:

  • 样式定义(纯字符串)

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

3.3 mapfile和javascript示例

Mapfile :

LAYER
    NAME "my_vector_layer"
    TYPE POINT
    STATUS ON
    STYLEITEM "javascript:///path/to/my/file.js"
    CLASS
    # empty class needed in current implementation of styleitem.
    END
END

JavaScript:

require('./global_variables.js'); // for symbols array

// random symbol
var symbol = symbols[Math.floor(Math.random()*symbols.length)];
var style = style = "STYLE SIZE 12 SYMBOL '"+symbol+"'";

if (shape.attributes.COULEUR != '#000000') {
    style += "COLOR '"+shape.attributes.COULEUR+"' END";
} else {
    // random color
    red = Math.random()*255;
    green = Math.random()*255;
    blue = Math.random()*255;
    style += "COLOR "+red+" "+green+" "+blue+" END";
}

// return the style to MapServer
style;

3.4受影响的文件

  • mapv8.cpp:V8支持的一般实现。

  • maplayer.c:javascript的样式项支持。

3.5向后兼容性问题

不需要,新功能。

3.6MapScript更改

没有

4。投票历史

与托马斯、丹尼尔、迈克、塔玛斯、斯蒂芬、佩里和斯蒂芬的+1一起通过