OsmarenderRules.xml

From OpenStreetMap Wiki
Jump to navigation Jump to search

This file is a bit obsolete now. The file osm-map-features.xml does a much better job.

An OsmarenderRules.xml controls the way Osmarender does it's stuff. See Osmarender/Rules#Rule_file_grammar for details of the file structure.

You can define your own rendering rules file, but the following yields reasonably good rendering results. It supports a mixture of the commonly used class tags and some of the highway, waterway and railway tag values from Map Features.

<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet type="text/xsl" href="osmarender.xsl"?>

<rules 
  data="data.xml"
  scale="2"
  xml-stylesheet="rules.css">

  <style type="text/css">
    .highway-motorway-casing {
      stroke-width: 5; 
      stroke-linecap: round; 
      stroke: #000000;
      }

    .highway-motorway-core {
      stroke-width: 3; 
      stroke-linecap: round; 
      stroke: #809BC0;
      }

    .hotel {
       fill: green;
       stroke: black;
       stroke-width: 1;
       }
  </style>

  <!-- draw residential shading first -->
  <rule k="abutters" v="residential">
    <line style="stroke-width: 18; stroke-linecap: round; stroke: #f2f2f2;"/> 
  </rule>
  <rule k="class" v="residential">
    <line style="stroke-width: 18; stroke-linecap: round; stroke: #f2f2f2;"/> 
  </rule>

  <!-- Shading for parking areas -->
  <rule k="highway" v="parking">
    <line style="stroke-width: 6; stroke-linecap: round; stroke: #f3f282;"/>
  </rule>

  <!-- draw waterway casings -->
  <rule k="class" v="river">
    <line style="stroke-width: 8; stroke-linecap: round; stroke: #aaaaaa;"/> 
  </rule>
  <rule k="waterway" v="river">
    <line style="stroke-width: 8; stroke-linecap: round; stroke: #aaaaaa;"/> 
  </rule>
  <rule k="waterway" v="canal">
    <line style="stroke-width: 4; stroke-linecap: round; stroke: #aaaaaa;"/> 
  </rule>


  <!-- draw waterway cores -->
  <rule k="class" v="river">
    <line style="stroke-width: 6; stroke-linecap: round; stroke: #89bac6;"/> 
  </rule>
  <rule k="waterway" v="river">
    <line style="stroke-width: 6; stroke-linecap: round; stroke: #89bac6;"/> 
  </rule>
  <rule k="waterway" v="canal">
    <line style="stroke-width: 2; stroke-linecap: round; stroke: #89bac6;"/> 
  </rule>


  <!-- next draw footpaths -->
  <rule k="class" v="path">
    <line style="stroke-width: 1; stroke-linecap: round; stroke: #d79331;"/> 
  </rule>
  <rule k="highway" v="footway">
    <line style="stroke-width: 1; stroke-linecap: round; stroke: #d79331;"/> 
  </rule>


  <!-- draw highway casings for minor roads -->
  <rule k="class" v="~">  <!-- Any segment without a class key -->
    <line style="stroke-width: 3; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="highway" v="unclassified">
    <line style="stroke-width: 3; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="class" v="residential">
    <line style="stroke-width: 3; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="highway" v="residential">
    <line style="stroke-width: 3; stroke-linecap: round; stroke: #000000;"/>
  </rule>


  <!-- draw highway cores for minor roads -->
  <rule k="class" v="~">  <!-- Any segment without a class key -->
    <line style="stroke-width: 2; stroke-linecap: round; stroke: #E6E6E6;"/>
  </rule>
  <rule k="highway" v="unclassified">
    <line style="stroke-width: 2; stroke-linecap: round; stroke: #E6E6E6;"/>
  </rule>
  <rule k="class" v="residential">
    <line style="stroke-width: 2; stroke-linecap: round; stroke: #E6E6E6;"/>
  </rule>
  <rule k="highway" v="residential">
    <line style="stroke-width: 2; stroke-linecap: round; stroke: #E6E6E6;"/>
  </rule>


  <!-- draw railway lines -->
  <rule k="railway" v="rail">
    <line style="stroke-width: 3; stroke-linecap: round; stroke: #000000;"/>
  </rule>


  <!-- draw highway casings for major roads -->
  <rule k="class" v="secondary">
      <line style="stroke-width: 4; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="highway" v="secondary">
      <line style="stroke-width: 4; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="class" v="primary">
      <line style="stroke-width: 4; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="highway" v="primary">
      <line style="stroke-width: 4; stroke-linecap: round; stroke: #000000;"/>
  </rule>
  <rule k="class" v="motorway">
      <line class='highway-motorway-casing'/>
  </rule>
  <rule k="highway" v="motorway">
      <line class='highway-motorway-casing'/>
  </rule>


  <!-- draw highway cores for major roads -->
  <rule k="class" v="secondary">
      <line style="stroke-width: 2; stroke-linecap: round; stroke: #FDBF6F;"/>
  </rule>
  <rule k="highway" v="secondary">
      <line style="stroke-width: 2; stroke-linecap: round; stroke: #FDBF6F;"/>
  </rule>
  <rule k="class" v="primary">
      <line style="stroke-width: 2; stroke-linecap: round; stroke: #7FC97F;"/>
  </rule>
  <rule k="highway" v="primary">
      <line style="stroke-width: 2; stroke-linecap: round; stroke: #7FC97F;"/>
      <text k="ref" font-family='Verdana' font-size='10px' fill='black'/>
  </rule>
  <rule k="class" v="motorway">
      <line class='highway-motorway-core'/>
  </rule>
  <rule k="highway" v="motorway">
      <line class='highway-motorway-core'/>
  </rule>
  

  <!-- draw nodes -->
  <rule k="class" v="village">
    <text k="name" font-family='Verdana' font-size='10px' fill='black'/>
  </rule>

  <rule k="class" v="town">
    <text k="name" font-family='Verdana' font-size='14px' font-style='bold' fill='black'/>
  </rule>

  <rule k="class" v="school">
    <circle r='3' fill='red' stroke='black' stroke-width='1'/>
    <text k="name" font-family='Verdana' font-size='10px' fill='black' x-offset='4' y-offset='4'/>
  </rule>

  <rule k="class" v="hotel">
    <circle r='3' class='hotel'/>
    <text k="name" font-family='Verdana' font-size='10px' fill='black' x-offset='4' y-offset='4'/>
  </rule>

  <rule k="class" v="church">
    <circle r='3' fill='black' stroke='black' stroke-width='1'/>
    <text k="name" font-family='Verdana' font-size='10px' fill='black' x-offset='4' y-offset='4'/>
  </rule>

  <rule k="class" v="historic-name">
    <text k="name" font-family='Verdana' font-size='16px' fill='black' font-style='italic'/>
  </rule>

  <rule k="class" v="clockwise-roundabout">
    <circle r='3' fill='white' stroke='black' stroke-width='1'/>
  </rule>

  <rule k="class" v="anti-clockwise-roundabout">
    <circle r='3' fill='white' stroke='black' stroke-width='1'/>
  </rule>

 </rules>