MS RFC 106:支持geomtransform javascript插件

日期

2013/11

作者

艾伦布德罗

联系

aboudreault@mapgears.com

状态

采用

版本

MAPServer 7

警告

这个特性是实验性的,随着功能的发展,向后兼容性可能在短期内被破坏。它是 MS RFC 102:支持StyleItem javascript插件 .

警告

参照 javascript转换 最新文档。

1。概述

能够通过JavaScript以编程方式设计我们的特性是一个很好的特性。已将此添加到 MS RFC 102:支持StyleItem javascript插件 . 它允许我们避免在映射文件中编写许多类和样式。javascript的另一个用例可能是基于输入几何体和/或其属性修改功能几何体的能力。

2。建议的解决方案

这个RFC建议添加一个geomtransform javascript插件。它将允许我们通过JavaScript以编程方式修改几何体。这类似于内置的geomtransform(buffer、centroid等),但允许您使用javascript实现自己的逻辑。此外,还可以根据几何体的属性值修改几何体。

三。实施细节

javascript.

  • 形状对象

  • 线路对象

  • 彭波托基

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绑定。

4。臭虫识别码

5。投票历史

与Stephen、Daniel、Thomas、Stephan、Tamas、Jeff、Mike、Assefa、Steve和Perry的+1一起通过