UNPKG

carto

Version:

Mapnik Stylesheet Compiler

386 lines (278 loc) 23.2 kB
<!DOCTYPE html> <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Language Elements &mdash; carto documentation</title> <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> <link rel="index" title="Index" href="genindex.html"/> <link rel="search" title="Search" href="search.html"/> <link rel="top" title="carto documentation" href="index.html"/> <link rel="next" title="Styling Concepts" href="styling_concepts.html"/> <link rel="prev" title="Installation &amp; Usage" href="installation_usage.html"/> <script src="_static/js/modernizr.min.js"></script> </head> <body class="wy-body-for-nav" role="document"> <div class="wy-grid-for-nav"> <nav data-toggle="wy-nav-shift" class="wy-nav-side"> <div class="wy-side-scroll"> <div class="wy-side-nav-search"> <a href="index.html" class="icon icon-home"> carto </a> <div role="search"> <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> <input type="text" name="q" placeholder="Search docs" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div> <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> <p class="caption"><span class="caption-text">Contents:</span></p> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="installation_usage.html">Installation &amp; Usage</a></li> <li class="toctree-l1 current"><a class="current reference internal" href="#">Language Elements</a><ul> <li class="toctree-l2"><a class="reference internal" href="#color">Color</a></li> <li class="toctree-l2"><a class="reference internal" href="#float">Float</a></li> <li class="toctree-l2"><a class="reference internal" href="#uri">URI</a></li> <li class="toctree-l2"><a class="reference internal" href="#string">String</a></li> <li class="toctree-l2"><a class="reference internal" href="#boolean">Boolean</a></li> <li class="toctree-l2"><a class="reference internal" href="#expressions">Expressions</a></li> <li class="toctree-l2"><a class="reference internal" href="#numbers">Numbers</a></li> <li class="toctree-l2"><a class="reference internal" href="#percentages">Percentages</a></li> <li class="toctree-l2"><a class="reference internal" href="#functions">Functions</a></li> <li class="toctree-l2"><a class="reference internal" href="#mapnik-render-time-variables">Mapnik Render-Time Variables</a></li> <li class="toctree-l2"><a class="reference internal" href="#resetting-properties">Resetting properties</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="styling_concepts.html">Styling Concepts</a></li> <li class="toctree-l1"><a class="reference internal" href="mapnik_api.html">Mapnik API documentation</a></li> </ul> </div> </div> </nav> <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> <nav class="wy-nav-top" role="navigation" aria-label="top navigation"> <i data-toggle="wy-nav-top" class="fa fa-bars"></i> <a href="index.html">carto</a> </nav> <div class="wy-nav-content"> <div class="rst-content"> <div role="navigation" aria-label="breadcrumbs navigation"> <ul class="wy-breadcrumbs"> <li><a href="index.html">Docs</a> &raquo;</li> <li>Language Elements</li> <li class="wy-breadcrumbs-aside"> <a href="_sources/language_elements.rst.txt" rel="nofollow"> View page source</a> </li> </ul> <hr/> </div> <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> <div itemprop="articleBody"> <div class="section" id="language-elements"> <h1>Language Elements<a class="headerlink" href="#language-elements" title="Permalink to this headline"></a></h1> <p>Below is a list of values and an explanation of any expression that can be applied to properties in CartoCSS.</p> <div class="section" id="color"> <h2>Color<a class="headerlink" href="#color" title="Permalink to this headline"></a></h2> <p>CartoCSS accepts a variety of syntaxes for colors - HTML-style hex values, rgb, rgba, hsl, hsla, hsluv, and hsluva. It also supports the predefined HTML colors names, like <cite>yellow</cite> and <cite>blue</cite>.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#line {</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="c1">#ff0;</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="c1">#ffff00;</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">rgb</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">rgba</span><span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">hsl</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">);</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">hsla</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">hsluv</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">);</span> <span class="o">//</span> <span class="n">same</span> <span class="n">values</span> <span class="k">yield</span> <span class="n">different</span> <span class="n">color</span> <span class="n">than</span> <span class="n">HSL</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">hsluva</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span> <span class="n">line</span><span class="o">-</span><span class="n">color</span><span class="p">:</span> <span class="n">yellow</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> <p>Especially of note is the support for HSL and HSLuv, which can be easier to reason about than RGB. CartoCSS also includes several color operation functions <a class="reference external" href="http://lesscss.org/functions/#color-operations">borrowed from LessCSS</a>:</p> <div class="highlight-default"><div class="highlight"><pre><span class="o">//</span> <span class="n">lighten</span> <span class="ow">and</span> <span class="n">darken</span> <span class="n">colors</span> <span class="n">lighten</span><span class="p">(</span><span class="c1">#ace, 10%);</span> <span class="n">darken</span><span class="p">(</span><span class="c1">#ace, 10%);</span> <span class="o">//</span> <span class="n">saturate</span> <span class="ow">and</span> <span class="n">desaturate</span> <span class="n">saturate</span><span class="p">(</span><span class="c1">#550000, 10%);</span> <span class="n">desaturate</span><span class="p">(</span><span class="c1">#00ff00, 10%);</span> <span class="o">//</span> <span class="n">increase</span> <span class="ow">or</span> <span class="n">decrease</span> <span class="n">the</span> <span class="n">opacity</span> <span class="n">of</span> <span class="n">a</span> <span class="n">color</span> <span class="n">fadein</span><span class="p">(</span><span class="c1">#fafafa, 10%);</span> <span class="n">fadeout</span><span class="p">(</span><span class="c1">#fefefe, 14%);</span> <span class="o">//</span> <span class="n">spin</span> <span class="n">rotates</span> <span class="n">a</span> <span class="n">color</span> <span class="n">around</span> <span class="n">the</span> <span class="n">color</span> <span class="n">wheel</span> <span class="n">by</span> <span class="n">degrees</span> <span class="n">spin</span><span class="p">(</span><span class="c1">#ff00ff, 10);</span> <span class="o">//</span> <span class="n">mix</span> <span class="n">generates</span> <span class="n">a</span> <span class="n">color</span> <span class="ow">in</span> <span class="n">between</span> <span class="n">two</span> <span class="n">other</span> <span class="n">colors</span><span class="o">.</span> <span class="n">mix</span><span class="p">(</span><span class="c1">#fff, #000, 50%);</span> <span class="o">//</span> <span class="n">get</span> <span class="n">color</span> <span class="n">components</span> <span class="n">hue</span><span class="p">(</span><span class="c1">#ff00ff);</span> <span class="n">saturation</span><span class="p">(</span><span class="c1">#ff00ff);</span> <span class="n">lightness</span><span class="p">(</span><span class="c1">#ff00ff);</span> <span class="n">alpha</span><span class="p">(</span><span class="n">hsla</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mi">50</span><span class="o">%</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">));</span> </pre></div> </div> <p>These functions all take arguments which can be color variables, literal colors, or the results of other functions operating on colors. All the above mentioned functions also come in a <em>functionp</em>-variant (e.g. <code class="docutils literal"><span class="pre">lightenp</span></code>), which force a given color into HSLuv color space.</p> </div> <div class="section" id="float"> <h2>Float<a class="headerlink" href="#float" title="Permalink to this headline"></a></h2> <p>Float is a fancy way of saying &#8216;number&#8217;. In CartoCSS, you specify <em>just a number</em> - unlike CSS, there are no units, but everything is specified in pixels.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#line {</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="mi">2</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> <p>It&#8217;s also possible to do simple math with number values:</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#line {</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="mi">4</span> <span class="o">/</span> <span class="mi">2</span><span class="p">;</span> <span class="o">//</span> <span class="n">division</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="mi">4</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span> <span class="o">//</span> <span class="n">addition</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="mi">4</span> <span class="o">-</span> <span class="mi">2</span><span class="p">;</span> <span class="o">//</span> <span class="n">subtraction</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="mi">4</span> <span class="o">*</span> <span class="mi">2</span><span class="p">;</span> <span class="o">//</span> <span class="n">multiplication</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="mi">4</span> <span class="o">%</span> <span class="mi">2</span><span class="p">;</span> <span class="o">//</span> <span class="n">modulus</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="uri"> <h2>URI<a class="headerlink" href="#uri" title="Permalink to this headline"></a></h2> <p>URI is a fancy way of saying URL. When an argument is a URI, you use the same kind of <code class="docutils literal"><span class="pre">url('place.png')</span></code> notation that you would with HTML. Quotes around the URL aren&#8217;t required, but are highly recommended. URIs can be paths to places on your computer, or on the internet.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#markers {</span> <span class="n">marker</span><span class="o">-</span><span class="n">file</span><span class="p">:</span> <span class="n">url</span><span class="p">(</span><span class="s1">&#39;marker.png&#39;</span><span class="p">);</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="string"> <h2>String<a class="headerlink" href="#string" title="Permalink to this headline"></a></h2> <p>A string is basically just text. In the case of CartoCSS, you&#8217;re going to put it in quotes. Strings can be anything, though pay attention to the cases of <code class="docutils literal"><span class="pre">text-name</span></code> and <code class="docutils literal"><span class="pre">shield-name</span></code> - they actually will refer to features, which you refer to by putting them in brackets, as seen in the example below.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#labels {</span> <span class="n">text</span><span class="o">-</span><span class="n">name</span><span class="p">:</span> <span class="s2">&quot;[MY_FIELD]&quot;</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="boolean"> <h2>Boolean<a class="headerlink" href="#boolean" title="Permalink to this headline"></a></h2> <p>Boolean means yes or no, so it accepts the values <code class="docutils literal"><span class="pre">true</span></code> or <code class="docutils literal"><span class="pre">false</span></code>.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#markers {</span> <span class="n">marker</span><span class="o">-</span><span class="n">allow</span><span class="o">-</span><span class="n">overlap</span><span class="p">:</span> <span class="n">true</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="expressions"> <h2>Expressions<a class="headerlink" href="#expressions" title="Permalink to this headline"></a></h2> <p>Expressions are statements that can include fields, numbers, and other types in a really flexible way. You have run into expressions before, in the realm of &#8216;fields&#8217;, where you&#8217;d specify <code class="docutils literal"><span class="pre">&quot;[FIELD]&quot;</span></code>, but expressions allow you to drop the quotes and also do quick addition, division, multiplication, and concatenation from within CartoCSS syntax.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#buildings {</span> <span class="n">building</span><span class="o">-</span><span class="n">height</span><span class="p">:</span> <span class="p">[</span><span class="n">HEIGHT_FIELD</span><span class="p">]</span> <span class="o">*</span> <span class="mi">10</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="numbers"> <h2>Numbers<a class="headerlink" href="#numbers" title="Permalink to this headline"></a></h2> <p>Numbers are comma-separated lists of one or more number in a specific order. They&#8217;re used in line dash arrays, in which the numbers specify intervals of line, break, and line again.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#disputedboundary {</span> <span class="n">line</span><span class="o">-</span><span class="n">dasharray</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="percentages"> <h2>Percentages<a class="headerlink" href="#percentages" title="Permalink to this headline"></a></h2> <p>In CartoCSS, the percentage symbol, <code class="docutils literal"><span class="pre">%</span></code> universally means <code class="docutils literal"><span class="pre">value/100</span></code>. It&#8217;s meant to be used with ratio-related properties, like opacity rules.</p> <div class="admonition attention"> <p class="first admonition-title">Attention</p> <p class="last">You should not use percentages as widths, heights, or other properties - unlike CSS, percentages are not relative to cascaded classes or page size, they&#8217;re, as stated, simply the value divided by one hundred.</p> </div> <p>In an example:</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#world {</span> <span class="o">//</span> <span class="n">this</span> <span class="n">syntax</span> <span class="n">polygon</span><span class="o">-</span><span class="n">opacity</span><span class="p">:</span> <span class="mi">50</span><span class="o">%</span><span class="p">;</span> <span class="o">//</span> <span class="ow">is</span> <span class="n">equivalent</span> <span class="n">to</span> <span class="n">polygon</span><span class="o">-</span><span class="n">opacity</span><span class="p">:</span> <span class="mf">0.5</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="functions"> <h2>Functions<a class="headerlink" href="#functions" title="Permalink to this headline"></a></h2> <p>Functions are comma-separated lists of one or more functions. For instance, transforms use the <code class="docutils literal"><span class="pre">functions</span></code> type to allow for transforms within CartoCSS, which are optionally chainable.</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#point {</span> <span class="n">point</span><span class="o">-</span><span class="n">transform</span><span class="p">:</span> <span class="n">scale</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span> <span class="p">}</span> </pre></div> </div> </div> <div class="section" id="mapnik-render-time-variables"> <h2>Mapnik Render-Time Variables<a class="headerlink" href="#mapnik-render-time-variables" title="Permalink to this headline"></a></h2> <p>Mapnik &gt;= 3.0.0 supports variables of the form <code class="docutils literal"><span class="pre">&#64;var</span></code>. These can be used from CartoCSS by specifying them as strings. For example:</p> <div class="highlight-default"><div class="highlight"><pre><span class="c1">#layer {</span> <span class="n">line</span><span class="o">-</span><span class="n">width</span><span class="p">:</span> <span class="s1">&#39;@zoom&#39;</span><span class="p">;</span> <span class="p">}</span> </pre></div> </div> <p>For this to have any effect you have to pass the variables to Mapnik at render time in a hashmap of the form <code class="docutils literal"><span class="pre">variable_name:variable_value</span></code>.</p> </div> <div class="section" id="resetting-properties"> <h2>Resetting properties<a class="headerlink" href="#resetting-properties" title="Permalink to this headline"></a></h2> <p>You can reset properties by specifying them with the keyword <code class="docutils literal"><span class="pre">none</span></code>. They will then be removed from the symbolizer thus using their default value or not using them at all. This does not work or makes sense for all properties like e.g. not for <code class="docutils literal"><span class="pre">text-face-name</span></code>. For an overview over properties where this works or makes sense see <a class="reference external" href="https://github.com/mapbox/carto/blob/master/test/rendering-mss/issue_214.mss">this list</a>.</p> </div> </div> </div> </div> <footer> <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> <a href="styling_concepts.html" class="btn btn-neutral float-right" title="Styling Concepts" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a> <a href="installation_usage.html" class="btn btn-neutral" title="Installation &amp; Usage" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> <hr/> <div role="contentinfo"> <p> &copy; Copyright 2017, Carto contributors. </p> </div> Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. </footer> </div> </div> </section> </div> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT:'./', VERSION:'', COLLAPSE_INDEX:false, FILE_SUFFIX:'.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/underscore.js"></script> <script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/js/theme.js"></script> <script type="text/javascript"> jQuery(function () { SphinxRtdTheme.StickyNav.enable(); }); </script> </body> </html>