Perl Mapscript Problem

Stephen Woodbridge woodbri at SWOODBRIDGE.COM
Thu Sep 15 22:48:48 EDT 2005


Sean Gillies wrote:
> On Sep 15, 2005, at 9:27 AM, Stephen Woodbridge wrote:
> 
>> Sean Gillies wrote:
>>
>>> On Sep 13, 2005, at 7:09 PM, Stephen Woodbridge wrote:
>>>
>>>> Hi All,
>>>>
>>>> I had dynamic symbol manipulation working on MS 4.01 but can not get it
>>>> to work on 4.4.1 or 4.6.1. In the following code snippets every think
>>>> works with the default symbol that is defined in symbolset file, but 
>>>> the
>>>> code does not let me change the imagepath on the fly.
>>>>
>>>> Also, I can not get the label on the umarker layer to show unless I
>>>> specify     LABELCACHE FALSE    and umarker layer is the last in the
>>>> mapfile.
>>>>
>>>> Any ideas or help would be appreciated.
>>>>
>>>> -Steve W.
>>>>
>>>
>>> Steve,
>>>
>>> Perhaps mutating the imagepath has no effect due to caching of symbol
>>> images. About the labelcache, I would guess that the label is losing the
>>> battle against other in the map.
>>
>>
>> Sean,
>>
>> Thank you for your response. You are probably correct on the labelcache
>> issue now that I think about it. While it is the last layer and should
>> take priority in the cache, it is being drawn after all the other labels
>> in the cache are drawn so the only way to get it on top is to not use
>> the cache as it is too late in the process.
>>
>>> This is how I do dynamic symbols
>>>
>>>     # create a new symbol
>>>     new_symbol = mapscript.symbolObj('symbol_a', 
>>> '/path/to/symbol_a.png')
>>>
>>>     # add a *copy* of the symbol to the map symbolset and get the index
>>>     new_symbol_index = map.symbolset.appendSymbol(new_symbol)
>>>
>>> See http://zcologia.com/mapserver/mapscript#symbolobj and
>>> http://zcologia.com/mapserver/mapscript#symbolsetobj or the same docs on
>>> the new mapserver site.
>>>
>>> The symbolObj also has a method to set symbol imagery directly. See
>>> http://zcologia.com/mapserver/imagery-howto#images-and-symbols.
>>
>>
>> I will look at this, but my concern is that we generate a large number
>> of symbols (actually numbered dots on the map) and I'm concerned we will
>> exceed the hardcoded limit on symbols in map.h
>>
> 
> Numbered dots? I have an application that requires numbered symbols: 
> highway shields with the highway number. I'm simply using an annotation 
> type layer with an unnumbered shield image as a symbol and then using 
> the class label to render the highway number over the top. Works 
> perfectly. I don't know if this method is something you can use, but it 
> would be faster as well as simpler.
> 
>> I think that the mapscript API needs to fix the cached image if the
>> image file is changed. This is a bug. What good is it to change the
>> symbol name if it does not change the symbol also? Would you concur on 
>> this?
>>
> 
> Remember that mapscript is basically a mapfile as an object tree. In 
> theory, you can freely modify attributes of the objects, like a symbol's 
> imagepath. In practice, much of MapServer's code is still based on the 
> assumption that a mapfile is read only once at the very beginning and 
> afterwards remains immutable during execution. A similar issue is 
> arising in a discussion about layer feature source plugins. Many people, 
> it turns out, have been mutating layer.connectiontype in their scripts.
> 
> IMO, the right solution might be to implement a method for symbolObj 
> that loads imagery from disk and updates the cache, and to make 
> symbolObj.imagepath immutable. Explicit is better.

I would be happy with solution. This is a major regression from 4.01 
that I am just now finding because I am trying to migrate a client up to 
a more recent release. This is also a problem on 4.4. I have added a bug
http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=1472 to cover this issue.

>> Thank you for your suggestions, I will see if I can get them to work.
>>
>> -Steve
>>
> 
> You're welcome, Steve. I hope my highway shield suggestion is useful. 
> That would be the most efficient, and worth some data preprocessing.

Well yes, all the new code does it this way for the numbered dots, but 
we still have the need to allow user defined symbols to be dynamically 
added.

Thanks,
   -Steve

> Sean
> 
> -- 
> Sean Gillies
> sgillies at frii dot com
> http://zcologia.com
> 
> 



More information about the mapserver-users mailing list