- From: Greg Sepesi <sepesi@eduneer.com>
- Date: Thu, 29 Jan 2004 01:20:18 -0500
- To: Andreas Neumann <neumann@karto.baug.ethz.ch>
- Cc: www-svg@w3.org
Hey Andreas,
Thanks for your suggestion.
I think for the task of geographical documentation, unmodified
geographic coordinates in the SVG document are probably the most
transparent (easy to understand) for users/contributors. So I did some
more testing and am now able to use scaled textPaths with unmodified
geographical coordinates. The technique I'm using is
* order geographic coordinates in (latitude,longitude) as opposed to
(longitude,latitude),
* translate the viewBox midpoint to the origin
* rotate by -90 degrees to get North pointing up
* scale longitude by cos(latitude of viewBox midpoint) to get an
equidistant projection
* translate back to the viewBox midpoint
In case you're interested, here is an example:
- - -
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg viewBox="20 -40 5 10"
preserveAspectRatio="xMidYMid"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<title>test19.svg</title>
<desc>
- use lat,lng order for coordinates as opposed to lng,lat
- translate viewbox midpoint to origin
- rotate by -90 degrees to get North pointing up
- scale longitude by cos(latitude of viewbox midpoint) to get
equidistant projection
- translate back to viewbox midpoint
</desc>
<defs>
<style type="text/css">
<![CDATA[
.TestFont { font-size:0.75; font-family:Verdana;
stroke:blue; stroke-width:0.05; fill:none; }
.TestLine { fill:none; stroke:black; stroke-width:2;
stroke-linecap:round; }
]]>
</style>
<path id="diagUL_LR" d="M 25 -40 L 20 -30"/>
<path id="diagLL_UR" d="M 20 -40 L 25 -30"/>
</defs>
<g transform="translate(22.5,-35) rotate(-90) scale(1,0.5)
translate(-22.5,35)" >
<g fill="none" stroke="red" stroke-width="3" >
<line x1="20.0" y1="-40" x2="20.0" y2="-30" />
<line x1="20.0" y1="-30" x2="25.0" y2="-30" />
<line x1="25.0" y1="-30" x2="25.0" y2="-40" />
<line x1="25.0" y1="-40" x2="20.0" y2="-40" />
</g>
<use xlink:href="#diagUL_LR" class="TestLine" title="UL to LR"
/>
<text class="TestFont">
<textPath xlink:href="#diagUL_LR">UL to LR</textPath>
</text>
<use xlink:href="#diagLL_UR" class="TestLine" title="LL to UR"
/>
<text class="TestFont">
<textPath xlink:href="#diagLL_UR">LL to UR</textPath>
</text>
</g>
</svg>
- - -
This doesn't address the skewing of the textPath. But knowing that is a
more difficult problem, I think I'll just try to develop a liking for
the skewed text ... or move closer to the equator. :*)
Greg
Andreas Neumann wrote:
>
> Hi Greg!
>
> My attempt to the problem is:
>
> * project the GIS data prior to translating it to SVG
> * use a negative y-axis during the conversion process.
> * adjust your viewBox to the negative y-axis.
>
> Due to all the problems with text, all the scaling approaches don't work well,
> as you experienced yourself.
>
> Usually I also use nested SVGs. A screen-oriented coordinate system for the
> Userinterface, title and legend of the map. Nested within I use a map coordinate
> system with a separate svg-element.
>
> Andreas
>
Received on Thursday, 29 January 2004 01:23:55 UTC