[OSM-dev] [OSM-talk] Another point in support of ways as ordered lists

Etienne 80n80n at gmail.com
Wed Sep 27 08:06:43 BST 2006


I've switched this conversation to dev, its probably a bit heavy for talk.

Looks like you've done the hard bit.  The same for nodes is easy:

<xsl:choose>
  <xsl:when test='name()="node"'>
     <xsl:variable name='lat' select='@lat' />
     <xsl:variable name='lon' select='@lon' />
  </xsl:when>
  <xsl:otherwise>
    <!-- get lat and lon from first and last segment as ou are currently
doing it -->
  </xsl:otherwise>
</xsl:choose>

(Written before my first cup of coffee and not tested anyway so don't expect
it to work).
Etienne

On 9/26/06, Robert Hart <Robert.Hart at burohappold.com> wrote:
>
> Yes, I don't have a problem with the names. Anyway, it was just a
> suggestion. The problem I have is finding the location. For a node the
> location is attributes of the node, but for a way, you have to dereference
> the segments then nodes, and find a mid point.
>
> My current code just does ways (see below), but I'd like to include nodes
> as
> way:
>
>   <xsl:template name='keyDraw'>
>     <xsl:for-each select="$data/osm/way/tag[@k='name']">
>       <xsl:sort select="@v"/>
>         <xsl:variable name="col" select="floor(position() div (($height -
> 40) div 6))" />
>         <xsl:variable name="row" select="position() - $col *
> floor(($height
> - 40) div 6)" />
>         <text font-family='Verdana' font-size='6px' fill='black'>
>           <xsl:attribute name='x'><xsl:value-of select='10 + $width +
> $col*80'/></xsl:attribute>
>           <xsl:attribute name='y'><xsl:value-of select='20 + 6 *
> $row'/></xsl:attribute>
>           <xsl:value-of select="@v"/>
>         </text>
>         <text font-family='Verdana' font-size='6px' fill='black'>
>           <xsl:attribute name='x'><xsl:value-of select='80 + $width +
> $col*80'/></xsl:attribute>
>           <xsl:attribute name='y'><xsl:value-of select='20 + 6 *
> $row'/></xsl:attribute>
>           <xsl:variable name='startseg' select='../seg[1]' />
>           <xsl:variable name='endseg' select='../seg[position()=last()]'
> />
>           <xsl:variable name='start'
> select='key("segmentById",$startseg/@id)' />
>           <xsl:variable name='end' select='key("segmentById",$endseg/@id)'
> />
>           <xsl:variable name='startNode'
> select='key("nodeById",$start/@from)'/>
>           <xsl:variable name='endNode'
> select='key("nodeById",$end/@from)'/>
>           <xsl:variable name='lat' select='($startNode/@lat +
> $endNode/@lat)
> div 2' />
>           <xsl:variable name='lon' select='($startNode/@lon +
> $endNode/@lon)
> div 2' />
>           <xsl:value-of select="floor(($lon - $bllon) div 0.0089928)"/>
>           <xsl:value-of
> select="substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ',floor((($lat - $bllat) div
> 0.0089928) * $projection),1)"/>
>           <!--<xsl:value-of select="$start" />,
>           <xsl:value-of select="$lat" />,
>           <xsl:value-of select="$lon" />-->
>         </text>
>      </xsl:for-each>
>   </xsl:template>
>
>
> -----Original Message-----
> From: Etienne
> To: Robert Hart
> Cc: Nick Whitelegg; talk-bounces at openstreetmap.org ;
> talk at openstreetmap.org
> Sent: 9/26/2006 9:29 PM
> Subject: Re: [OSM-talk] Another point in support of ways as ordered lists
>
> Rob
> An xpath expression like $elements[tag[@k="name"]] will select all nodes
> and ways with a name tag.  You don't need to do anything special to
> combine nodes and ways, because the $elements variable is already a set
> of nodes and ways that match the rule (assuming the rule is <rule
> e="node|way">).
>
> If you want all the names in alphabetical order try something like:
> <xsl:for-each select='$elements[[tag[@k="name"]]/@name''>
>   <xsl:sort order="ascending">
>   ...
>
> Etienne
>
>
>
> On 9/26/06, Robert Hart < Robert.Hart at burohappold.com
> <mailto:Robert.Hart at burohappold.com> > wrote:
>
> I just had a brain wave. If ways are ordered lists of nodes, then POIs
> can
> be ways containing only one node. This may sound odd, but I think it has
> real advantages (well at least one advantage anyway...)
>
> I've been playing around with creating map indices in osmarender. To do
> this
> I need to know the name and approximate location of everything that
> should
> be included in the index. This means I have to handle nodes and
> ways/areas
> seperately, which is going to be painful if I want the whole index in
> alphabetical order (as opposed to having separate indices for ways and
> nodes). If POIs were single-node ways, everything would just work with
> one
> code path.
>
> Rob
>
>
>
> This message has been scanned for viruses by MailControl -
> www.mailcontrol.com <http://www.mailcontrol.com>
>
> _______________________________________________
> talk mailing list
> <mailto:talk at openstreetmap.org> talk at openstreetmap.org
> http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk
> <http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/dev/attachments/20060927/45bd5d69/attachment.html>


More information about the dev mailing list