Label Cache Performance
Stephen Woodbridge
woodbri at SWOODBRIDGE.COM
Tue Jan 2 11:25:49 EST 2007
Steve Lime wrote:
> Interesting idea. No, it's not been looked at before, not by me
> anyway. Frank might have some thoughts on performance. You'd still
> have to loop through the affected area to find collisions but I think
> your correct in that the search time would basically be constant
> (affected slightly by the size of the label).
>
> Wouldn't be that hard to implement. I wonder if GD holding the cache
> image could be useful or if a custom 2-D bit array would be faster-
> probably the latter...
I thin a 2-D bit array would be much faster and require significantly
less memory, but would require writing a little additional code. The
upside to this is that the code could be optimized for this specific
task, unless there are other potential uses for this.
Another idea I had related to this scheme would be that you could
implement a function could search for a placement position withing some
number of pixels. Here the idea would be that you use the polygon to
create a mask and see if the mask collides, if not you are done,
otherwise you do a spiral search outwards from the anchor point for some
number of pixels looking for a place the label will fit. This is easy to
do in some nested loops and very fast.
This idea of a moving mask is fundamental to a lot of the raster
manipulation algorithm and is easy to implement and very fast to execute.
-Steve W
> Steve
>
>>>> Stephen Woodbridge <woodbri at SWOODBRIDGE.COM> 1/2/2007 9:46:46
>>>> AM
>>>>
> HNY All,
>
> Last year I spent a fair amount of time optimizing a bunch of
> mapfiles
>
> for performance. One of the areas that seems to always be a
> performance
>
> hog if processing the Label Cache. I have been successful are
> thinning
>
> down the number of labels going into the cache, but I wondering if
> there might be a more efficient way of dealing with it. Since I have
> been playing with rasters over the holidays I was wondering if it
> might be possible to implement the label cache as a bitmap mask and
> us a raster
>
> OP to see if there is a collision?
>
> OK, I'm sure it is possible, I guess my real question(s) are:
>
> Has this approach been looked at before? Any thoughts on performance?
>
>
> My idea is:
>
> 1) create an label cache image 2) to check a label, get its bbox
> polyon check if it overlaps and set pixels 3) polygon fill the bbox
> of a label into the label cache image when a label is rendered
>
> we might be able to use a 2:1 or 4:1 reduced size label cache image
> with some thought about how to work around the issues.
>
> I would think that this would be much faster than searching a list of
> drawn labels and checking for intersections. And it should be linear
> with the number of labels in the cache.
>
> -Steve
More information about the mapserver-dev
mailing list