Hi Simon,

> Hope you guys don't mind me asking another question about carto.net 
> tools here.

no problem

> 
> I would like to implement some "axes" to my "map" such that they 
scale 
> with the map yet are always visible at the top and sides.  It looks 
> like the loadProjectSpecific function is the place to do this. 
However, 
> I'm not sure where I should place the axes : as two more svg groups 
> outside the main map or within the main map.  Also, which 
attributes I 
> should change after the main is zoomed/panned.

Yes, loadProjectSpecific() is called after each zoom and pan and is 
the appropriate location to trigger any updates that need to happen 
after each zoom and pan, e.g. creating/replacing elements, changing 
stroke-widths, etc.

As indicated in the other mail I sent you (offlist) I would place the 
gridlines within the mainMap svg file and recreate the gridlines and 
labels after each zoom/pan.

This would be a possible group layout to accomplish this:

I would probably write a separate function, something like 
"drawGrid()" that draws the grid lines and labels after each zoom and 
pan. After each zoom and pan, the temporary gridlines and labels 
would be removed and recreated. This also allows to have a more dense 
grid when zooming in and a wider grid when zooming out.

I would propose the following group setup:

<svg id="mainMap">
   <g id="mainMapGroup">
       <g id="dataGroup">
         <!-- here is all the data (rects, etc.) -->
       </g>
      <g id="gridLines" pointer-events="none">
         <g id="gridLinesTemp">
            <! -- this group would contain the gridlines, 
gridLinesTemp would be removed and recreated after each zoom and pan -
->
         </g>
      </g>
   </g>
</svg>

<svg id="referenceMap">
   <use xlink:href="#dataGroup pointer-events="none" />
</svg>

You can also show the rects (data) in the reference map by linking 
the dataGroup into the referenceMap and setting the pointer-events to 
none, in order to supress the interactivity. Note that the id links 
to dataGroup and not to mainMapGroup, because mainMapGroup also has 
transformations attached sometimes, which you don't want to reflect 
in the referenceMap.

For creating the gridlines and labels you may want to use some factor 
in relation to the myMainMap.curWidth property for determining stroke-
width and font-size. First, the function would delete the group 
"gridLinesTemp", then it would create a new group "gridLinesTemp", 
create all the gridlines and labels, append them to gridLinesTemp and 
append gridLinesTemp to gridLines. In my experience it is faster to 
delete a whole group at once, rather than deleting individual 
elements. Also, note the use of the pointer-events attribute on the 
gridlines group. The gridlines are just visual reference and 
shouldn't react to mouse events. Since they are on top of the 
graphics, its better to set pointer-events to "none".

Note that this is just one approach, it might not be the best and 
only one.

Another approach would be to have several gridline/label groups with 
different densities (maybe 3 to 4) and after each zoom and pan you 
would display one or the other, depending on zoom level by setting 
the display attribute. Stroke-widths and font-sizes would have to be 
adjusted again, in relation to myMainMap.curWidth.

Hope this helps,
Andreas




-----
To unsubscribe send a message to: [EMAIL PROTECTED]
-or-
visit http://groups.yahoo.com/group/svg-developers and click "edit my 
membership"
---- 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/svg-developers/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/svg-developers/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[EMAIL PROTECTED] 
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
    [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 

Reply via email to