Opened 17 years ago
Last modified 16 years ago
#2100 closed enhancement
Binding feature attributes to styles and labels — at Version 10
Reported by: | sdlime | Owned by: | sdlime |
---|---|---|---|
Priority: | normal | Milestone: | 5.0.4 release |
Component: | Documentation - MapServer | Version: | 5.0 |
Severity: | normal | Keywords: | |
Cc: | dmorissette |
Description (last modified by )
This bug will be used to track the implementation of the RFC 19 http://mapserver.gis.umn.edu/development/rfc/ms-rfc-19/ implementation.
As of the creation of this bug an initial implementation has been checked in to the main trunk. It supports:
- styles: color, outlinecolor, size and angle
- labels: color, outlinecolor, size and angle
The main remaining tasks are:
- adding a binding for a style symbol DONE
- add more test cases (e.g. what happens when you bind a string to a numeric parameter)
- removal of old properies (e.g. LABELITEMANGLE) and structure members in header files, code, lexer configuration and PHP/MapScript binding DONE
- update label and style copy routines to handle bindings DONE
- creation of setBinding and removeBinding MapScript methods for labelObj and styleObj objects (both Swig-based languages and PHP)
- update write functions in mapfile.c to look for a binding
- documentation
Change History (10)
comment:1 by , 17 years ago
Status: | new → assigned |
---|
comment:2 by , 17 years ago
Description: | modified (diff) |
---|---|
Type: | defect → enhancement |
comment:3 by , 17 years ago
comment:4 by , 17 years ago
Description: | modified (diff) |
---|
comment:5 by , 17 years ago
Cc: | added |
---|
comment:6 by , 17 years ago
Description: | modified (diff) |
---|
follow-up: 9 comment:7 by , 17 years ago
Steve,
Couple of points :
1) Can you describe a bit what the set/remove bindings should do ? looking into this we could have a mapscript function that cold look like this
$style->setBinding(MS_STYLE_BINDING_COLOR, "attribute_field")
There could either be 2 functions in maputil.c one for style, one for label which would essantally do something like :
msSetBindingStyle( MS_STYLE_BINDING_ENUM, field)
if (style->bindings[MS_STYLE_BINDING_COLOR].item) {
free(style->bindings[MS_STYLE_BINDING_COLOR].item)
style->numbindings--;
} style->bindings[MS_STYLE_BINDING_COLOR].item = strdup('field') style->numbindings++;
removeBinding can also be done the same way, either having a separate function in maputil or using msSetBindingStyle with a NULL,
Could this work ?
2) Is ther a possiblity to add the FONT parameter for binding ?
In both cases, I am will to add it and test with php mapscript since I need to use it for a client side tool.
Thanks
follow-up: 10 comment:8 by , 17 years ago
Another point I forgot : how would the save through mapscript work ? In my opinion, It would make sense to save the attribute bindings. Right now the it saves the last values that were using while rendering.
comment:9 by , 17 years ago
Replying to assefa:
Steve,
Couple of points :
1) Can you describe a bit what the set/remove bindings should do ? looking into this we could have a mapscript function that cold look like this
$style->setBinding(MS_STYLE_BINDING_COLOR, "attribute_field")
There could either be 2 functions in maputil.c one for style, one for label which would essantally do something like :
msSetBindingStyle( MS_STYLE_BINDING_ENUM, field)
if (style->bindings[MS_STYLE_BINDING_COLOR].item) {
free(style->bindings[MS_STYLE_BINDING_COLOR].item)
style->numbindings--;
} style->bindings[MS_STYLE_BINDING_COLOR].item = strdup('field') style->numbindings++;
removeBinding can also be done the same way, either having a separate function in maputil or using msSetBindingStyle with a NULL,
Could this work ?
Yes, that's all I was thinking. I was going to write them as helper methods in the swig interface files, so in style.i you'd see:
int addBinding(int binding, char *item) {
if(!item) return MS_FAILURE;
if(binding < 0 binding >= MS_STYLE_BINDING_LENGTH) return MS_FAILURE;
if(this->bindings[binding].item) {
free(this->bindings[binding].item) this->bindings[binding].index = -1; this->numbindings--;
}
this->bindings[bindings].item = strdup(item); this->numbindings++;
return MS_SUCCESS;
}
int removeBinding(int binding) {
if(binding < 0 binding >= MS_STYLE_BINDING_LENGTH) return MS_FAILURE;
if(this->bindings[binding].item) {
free(this->bindings[binding].item) this->bindings[binding].index = -1; this->numbindings--;
}
return MS_SUCCESS;
}
I hadn't planned on writing C functions to do it although we could. We'd need a seperate set/remove function for labels and styles unless we did something like:
int msSetBinding(void *obj, int binding, char *item, int max_bindings)
Would have to pass the MS_LABEL_BINDING_LENGTH or MS_STYLE_BINDING_LENGTH for max_bindings, or just ignore that test altogether (a bad idea I think).
The one problem I see is guaranteeing that the binding item index gets populated, which happens via msLayerWhichItems() at draw time. We'll see I guess.
2) Is ther a possiblity to add the FONT parameter for binding ?
Yes, assuming you're talking font name (e.g. arial). I can do that for you if you wish. It's not hard but there are like 3 places you have to touch.
In both cases, I am will to add it and test with php mapscript since I need to use it for a client side tool.
Thanks
comment:10 by , 17 years ago
Description: | modified (diff) |
---|
Replying to assefa:
Another point I forgot : how would the save through mapscript work ? In my opinion, It would make sense to save the attribute bindings. Right now the it saves the last values that were using while rendering.
Whoops, forgot to fix the writers to check for a binding. Will add to the todo in the main description.
r6126