MS RFC 106:支持geomtransform javascript插件¶
- 日期
2013/11
- 作者
艾伦布德罗
- 联系方式
- 状态
采用
- 版本
MAPServer 7
警告
这个特性是实验性的,随着功能的发展,向后兼容性可能在短期内被破坏。它是 MS RFC 102:支持StyleItem javascript插件 .
警告
参照 javascript 转换 最新文档。
1。概述¶
能够通过JavaScript以编程方式设计我们的特性是一个很好的特性。已将此添加到 MS RFC 102:支持StyleItem javascript插件 . 它允许我们避免在 Mapfile 中编写许多类和样式。javascript的另一个用例可能是基于输入几何体和/或其属性修改功能几何体的能力。
2。建议的解决方案¶
这个RFC建议添加一个geomtransform javascript插件。它将允许我们通过JavaScript以编程方式修改几何体。这类似于内置的geomtransform(buffer、centroid等),但允许您使用javascript实现自己的逻辑。此外,还可以根据几何体的属性值修改几何体。
三。实施细节¶
mapserver将有一个新的geomtransform关键字:javascript。这将指向一个javascript文件,该文件需要返回一个新的几何图形。将暴露以下物体:
形状对象
线路对象
彭波托基
但是,在javascript中只能使用有限的一组属性(目前)。geomtransform查找名为“geomtransform”的函数并调用它。
3.1内部实施细则¶
新的绑定V8文件结构:将位于mapscript/v8中。
升级V8绑定以使用V8 3.20。(与Nodejs同步,未来的可能性?)
将shapeobj、lineobj和pointobj公开到V8:
对象的暴露方式与我们在nodejs中暴露对象的方式相同。(未来的可能性?)
对象将有一个构造函数,因此“new pointobj()”是可能的。这对于创建新几何图形也是必需的。
修改内部以使用预先确定的样式项和geomtransform函数名,而不是在全局范围内编码。
3.2 mapfile和javascript示例¶
下面是一个geomtransform javascript示例。
Mapfile :
LAYER
NAME "my_vector_layer"
TYPE POINT
STATUS ON
GEOMTRANSFORM "javascript:///path/to/my/file.js"
CLASS
STYLE
...
END
END
END
javascript:
function geomtransform(shape) {
new_shape = new shapeObj(); // constructor
new_shape.add(new lineObj());
new_point = new pointObj();
new_point.x = clone_shape.line(0).point(0).x;
new_point.y = clone_shape.line(0).point(0).y+30000; // vertical translation in meters
new_shape.line(0).add(new_point);
return new_shape;
}
3.3在样式项javascript中修改几何图形¶
您可以结合使用样式项javascript和geomtransform javascript。但是,这会增加一些开销,因为每个形状都会执行两个JavaScript脚本。因此,也可以在样式项javascript方法中修改几何体,而不必使用geomtransform。样式项javascript的不同之处在于,我们不返回新的几何图形,而是修改现有的几何图形。不过,使用这种方法可能有一些限制。(也就是说,在这种情况下,不确定返回其他类型的几何图形是否安全)。
下面是一个例子:
javascript:
function styleitem(shape) {
new_shape = new shapeObj(); // constructor
new_shape.add(new lineObj());
new_point = new pointObj();
new_point.x = shape.line(0).point(0).x;
new_point.y = shape.line(0).point(0).y+30000; // vertical translation in meters
new_shape.line(0).add(new_point);
shape.setGeometry(new_shape);
return "STYLE SYMBOL 'star' COLOR 255 0 0 SIZE 10 END"; // or compute your style..
}
3.4受影响的文件¶
mapv8.cpp:V8支持的一般实现。
mapscript/v8:绑定的新mapscript目录。
3.5向后兼容性问题¶
新功能,但会影响一点点 MS RFC 102:支持StyleItem javascript插件 (我们不再返回全局范围内的值)。
3.6MapScript更改¶
新的mapscript绑定。
5。投票历史¶
与Stephen、Daniel、Thomas、Stephan、Tamas、Jeff、Mike、Assefa、Steve和Perry的+1一起通过