MS RFC 102:支持StyleItem javascript插件¶
- 日期
2013/08
- 作者
艾伦布德罗
- 联系方式
- 状态
采用
- 版本
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一起通过