[OpenLayers-Users] Towards an eraser tool in OpenLayers

Dan Garland dan at dangarland.co.uk
Wed Jan 27 07:28:45 EST 2010


Any takers? Or am I on the wrong track here?

Thanks in advance,
Dan

Dan Garland wrote:
> Hi all,
> 
> I'm a Ruby on Rails developer working on my first project with 
> OpenLayers. I'm tasked with developing an free-hand eraser tool that can 
> erase features created by the drawFeatures tool. Amongst other things 
> we've tried, my thinking is moving towards creating a SVG mask, based on 
> the existing drawing tool, in which the 'erased' line is actually a 
> black line within a white, rectangular SVG mask, which when applied over 
> the top of the tile layer would mask any drawn features from underneath. 
> I anticipate something like this:
> 
> <svg width="8cm" height="8cm" viewBox="0 0 800 800" version="1.1"
>       xmlns="http://www.w3.org/2000/svg" 
> xmlns:xlink="http://www.w3.org/1999/xlink">
>    <defs>
>      <mask id="Mask" maskUnits="userSpaceOnUse" x="0" y="0" width="3968" 
> height="2964">
>        <rect x="0" y="0" width="3968" height="2964" fill="white" />
>        <!-- The 'eraser' line -->
>        <polyline fill="none" stroke="black" stroke-width="25" 
> points="400,0 400,800" />
>      </mask>
>    </defs>
> 
> <!-- Example drawn features -->
> 
>    <polyline id="myline" points="0,0 800,800" fill="none" 
> stroke-opacity="1" stroke-width="25" stroke-linecap="round" 
> stroke-linejoin="round" stroke-dasharray="none"/>
>    <polyline id="myline2" points="0,100 800,100" fill="none" 
> stroke-opacity="1" stroke-width="25" stroke-linecap="round" 
> stroke-linejoin="round" stroke-dasharray="none"/>
>    <polyline id="myline3" points="0,400 800,400" fill="none" 
> stroke-opacity="1" stroke-width="25" stroke-linecap="round" 
> stroke-linejoin="round" stroke-dasharray="none"/>
> 
>     <use xlink:href="#myline" stroke="red" mask="url(#Mask)" />
>     <use xlink:href="#myline2" stroke="red" mask="url(#Mask)" />
>     <use xlink:href="#myline3" stroke="red" mask="url(#Mask)" />
> 
> </svg>
> 
> The problems I face with this approach is knowing how best to manipulate 
> the existing SVG object being referenced by OpenLayers. I wonder whether 
> it is feasible in OpenLayers to develop a control based on the 
> drawFeature tool that
> 
> 1) Adds the mask <defs> section to the SVG Root at startup
> 2) Creates polyline elements with the mask
> 3) Adds <use> elements for each element in the tile layer to connect the 
> id and the mask
> 
> Before I dive in and spent hours in an unfamiliar area I wonder if any 
> OpenLayers developers have encountered this use case and have a better 
> solution, or can shed any light on this proposed approach.
> 
> Best Regards,
> Dan Garland
> 
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users



More information about the Users mailing list