MS RFC 19:样式和标签属性绑定¶
- 日期
2006年6月7日
- 作者
史蒂夫·莱姆
- 联系方式
明尼苏达州第纳尔的史蒂夫·莱姆
- 状态
通过(进行中)
- 版本
MAPServer 5
说明:目前,MapServer支持对一些选定属性(如角度)绑定标签和样式属性。但是,添加新的绑定会导致不必要的复杂结构和难以维护的代码,这很麻烦。这个RFC提出了一些想法,为混乱带来一些秩序,并使这种能力的扩展更容易实现。
C结构变化¶
将添加名为attributeBindingObj的新结构:
typedef struct {
char *item;
char index;
} attributeBindingObj;
然后,几个新的枚举将定义可以绑定的属性:
#define MS_STYLE_BINDING_LENGTH ...
#define MS_STYLE_BINDING_ENUM { MS_STYLE_BINDING_SIZE, MS_STYLE_BINDING_ANGLE, ... };
#define MS_LABEL_BINDING_LENGTH ...
#define MS_LABEL_BINDING_ENUM { MS_LABEL_BINDING_SIZE, MS_LABEL_BINDING_ANGLE, ... };
将从layerobj和styleobj中删除几个元素。例如,将删除angleitem、angleitemindex和类似成员。StyleObj和Labelobj各有2名新成员:
char hasBindings;
attributeBindingObj bindings[MS_STYLE_BINDING_LENGTH];
mapfile/mapscript更改¶
像sizetem和angleitem这样的选项会消失。而是一种更符合逻辑的语法,例如:
STYLE
SIZE [mySizeItem]
ANGLE [myAngleItem]
COLOR 255 0 0
SYMBOL 'square'
END
在MapServer模板和表达式中,方括号用于绑定到属性,因此在这种情况下,方括号是表示属性绑定的自然选择。
同样,mapscript也会失去设置/获取xxxitem属性的能力。相反,样式和标签对象将获得setbinding和deletebinding方法:
(in Perl)
$style->setBinding($mapscript::MS_STYLE_BINDING_SIZE, 'mySizeItem');
$style->deleteBinding($mapscript::MS_STYLE_BINDING_COLOR);
受影响的文件¶
map.h=>结构更改、枚举和定义添加
maputil.c=>添加msStyleBindAttributes();
void msStyleBindAttributes(shapeObj *shape, styleObj *style)
{
if(style->bindings[MS_STYLE_BINDING_SIZE].item)
style->size = atoi(shape->values[style->bindings[MS_STYLE_BINDING_SIZE].index]);
if(style->bindings[MS_STYLE_BINDING_ANGLE].item)
style->angle = atoi(shape->values[style->bindings[MS_STYLE_BINDING_ANGLE].index]);
...
}
maplabel.c=>添加mslabelbindattributes();
maplayer.c=>修复mswhichitems()以填充绑定索引
mapdraw.c=>删除对xxxitem属性的引用,如果样式或标签具有绑定,则调用msStyleBindAttributes或msLabelBindAttributes
mapfile.c=>修复对hangle字符串的解析,除了所有支持的绑定的数字(符号已经允许这样做),如果定义了绑定,请翻转hasbindings标志,删除对xxxitem属性的所有引用,更改样式和标签写入代码,以将绑定作为输出的一部分。
mapcopy.c=>修复样式和标记复制
maplexer.l/mapfile.h=>删除XXXitem定义和lexer引用,并定义一个新的原始类型(类似于ms_字符串),称为ms_绑定
mapscript/swiginc/style.i=>添加setbinding和deletebinding方法(类似于php/mapscript)
测试¶
python套件:需要测试来设置和删除绑定
MSAutoTest套件:将开发测试各种绑定的 Mapfile (DNR测试有一个标签示例)
向后兼容性问题¶
这确实会影响许多参数,但是它们使用得很轻,因此这可能是值得冒险的。主要风险是破坏 Mapfile 而不是脚本。考虑到这肯定会打破一些东西,我认为这是最合适的5.0变化。
投票历史¶
+1莱姆、莫里塞特、伍德布里奇