-
Notifications
You must be signed in to change notification settings - Fork 63
/
cartoframes.layer.html
346 lines (322 loc) · 23.6 KB
/
cartoframes.layer.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>cartoframes.layer module — cartoframes 0.3.0b5 documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '0.3.0b5',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</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>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="cartoframes.maps module" href="cartoframes.maps.html" />
<link rel="prev" title="cartoframes.credentials module" href="cartoframes.credentials.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head>
<body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-cartoframes.layer">
<span id="cartoframes-layer-module"></span><h1>cartoframes.layer module<a class="headerlink" href="#module-cartoframes.layer" title="Permalink to this headline">¶</a></h1>
<p>Layer classes for map creation. See examples in <a class="reference external" href="#layer.Layer">layer.Layer</a> and <a class="reference external" href="#layer.QueryLayer">layer.QueryLayer</a>
for example usage for data layers. See <a class="reference external" href="#layer.BaseMap">layer.BaseMap</a> for
basemap layers.</p>
<dl class="class">
<dt id="cartoframes.layer.AbstractLayer">
<em class="property">class </em><code class="descclassname">cartoframes.layer.</code><code class="descname">AbstractLayer</code><a class="headerlink" href="#cartoframes.layer.AbstractLayer" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
<p>Abstract Layer object</p>
<dl class="attribute">
<dt id="cartoframes.layer.AbstractLayer.is_basemap">
<code class="descname">is_basemap</code><em class="property"> = False</em><a class="headerlink" href="#cartoframes.layer.AbstractLayer.is_basemap" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="cartoframes.layer.BaseMap">
<em class="property">class </em><code class="descclassname">cartoframes.layer.</code><code class="descname">BaseMap</code><span class="sig-paren">(</span><em>source='voyager'</em>, <em>labels='back'</em>, <em>only_labels=False</em><span class="sig-paren">)</span><a class="headerlink" href="#cartoframes.layer.BaseMap" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <a class="reference internal" href="#cartoframes.layer.AbstractLayer" title="cartoframes.layer.AbstractLayer"><code class="xref py py-class docutils literal"><span class="pre">cartoframes.layer.AbstractLayer</span></code></a></p>
<p>Layer object for adding basemaps to a cartoframes map.</p>
<p class="rubric">Example</p>
<p>Add a custom basemap to a cartoframes map.</p>
<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cartoframes</span>
<span class="kn">from</span> <span class="nn">cartoframes</span> <span class="k">import</span> <span class="n">BaseMap</span><span class="p">,</span> <span class="n">Layer</span>
<span class="n">cc</span> <span class="o">=</span> <span class="n">cartoframes</span><span class="o">.</span><span class="n">CartoContext</span><span class="p">(</span><span class="n">BASEURL</span><span class="p">,</span> <span class="n">APIKEY</span><span class="p">)</span>
<span class="n">cc</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="n">BaseMap</span><span class="p">(</span><span class="n">source</span><span class="o">=</span><span class="s1">'light'</span><span class="p">,</span> <span class="n">labels</span><span class="o">=</span><span class="s1">'front'</span><span class="p">),</span>
<span class="n">Layer</span><span class="p">(</span><span class="s1">'acadia_biodiversity'</span><span class="p">)])</span>
</pre></div>
</div>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>source</strong> (<em>str</em><em>, </em><em>optional</em>) – One of <code class="docutils literal"><span class="pre">light</span></code> or <code class="docutils literal"><span class="pre">dark</span></code>. Defaults to
<code class="docutils literal"><span class="pre">voyager</span></code>. Basemaps come from
<a class="reference external" href="https://carto.com/location-data-services/basemaps/">https://carto.com/location-data-services/basemaps/</a></li>
<li><strong>labels</strong> (<em>str</em><em>, </em><em>optional</em>) – One of <code class="docutils literal"><span class="pre">back</span></code>, <code class="docutils literal"><span class="pre">front</span></code>, or None. Labels on
the front will be above the data layers. Labels on back will be
underneath the data layers but on top of the basemap. Setting
labels to <code class="docutils literal"><span class="pre">None</span></code> will only show the basemap.</li>
<li><strong>only_labels</strong> (<em>bool</em><em>, </em><em>optional</em>) – Whether to show labels or not.</li>
</ul>
</td>
</tr>
</tbody>
</table>
<dl class="attribute">
<dt id="cartoframes.layer.BaseMap.is_basemap">
<code class="descname">is_basemap</code><em class="property"> = True</em><a class="headerlink" href="#cartoframes.layer.BaseMap.is_basemap" title="Permalink to this definition">¶</a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="cartoframes.layer.BaseMap.is_basic">
<code class="descname">is_basic</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cartoframes.layer.BaseMap.is_basic" title="Permalink to this definition">¶</a></dt>
<dd><p>Does BaseMap pull from CARTO default basemaps?</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body"><cite>True</cite> if using a CARTO basemap (Dark Matter, Positron or
Voyager), <cite>False</cite> otherwise.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">bool</td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="cartoframes.layer.Layer">
<em class="property">class </em><code class="descclassname">cartoframes.layer.</code><code class="descname">Layer</code><span class="sig-paren">(</span><em>table_name</em>, <em>source=None</em>, <em>overwrite=False</em>, <em>time=None</em>, <em>color=None</em>, <em>size=None</em>, <em>tooltip=None</em>, <em>legend=None</em><span class="sig-paren">)</span><a class="headerlink" href="#cartoframes.layer.Layer" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <a class="reference internal" href="#cartoframes.layer.QueryLayer" title="cartoframes.layer.QueryLayer"><code class="xref py py-class docutils literal"><span class="pre">cartoframes.layer.QueryLayer</span></code></a></p>
<p>A cartoframes Data Layer based on a specific table in user’s CARTO
database. This layer class is used for visualizing individual datasets
with <a class="reference external" href="#context.CartoContext.map">CartoContext.map()</a>’s <code class="docutils literal"><span class="pre">layers</span></code>
keyword argument.</p>
<p class="rubric">Example</p>
<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cartoframes</span>
<span class="kn">from</span> <span class="nn">cartoframes</span> <span class="k">import</span> <span class="n">QueryLayer</span><span class="p">,</span> <span class="n">styling</span>
<span class="n">cc</span> <span class="o">=</span> <span class="n">cartoframes</span><span class="o">.</span><span class="n">CartoContext</span><span class="p">(</span><span class="n">BASEURL</span><span class="p">,</span> <span class="n">APIKEY</span><span class="p">)</span>
<span class="n">cc</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="n">Layer</span><span class="p">(</span><span class="s1">'fantastic_sql_table'</span><span class="p">,</span>
<span class="n">size</span><span class="o">=</span><span class="mi">7</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="p">{</span><span class="s1">'column'</span><span class="p">:</span> <span class="s1">'mr_fox_sightings'</span><span class="p">,</span>
<span class="s1">'scheme'</span><span class="p">:</span> <span class="n">styling</span><span class="o">.</span><span class="n">prism</span><span class="p">(</span><span class="mi">10</span><span class="p">)})])</span>
</pre></div>
</div>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>table_name</strong> (<em>str</em>) – Name of table in CARTO account</li>
<li><strong>Styling</strong> – See <a class="reference internal" href="#cartoframes.layer.QueryLayer" title="cartoframes.layer.QueryLayer"><code class="xref py py-obj docutils literal"><span class="pre">QueryLayer</span></code></a> for a full list of all arguments
arguments for styling this map data layer.</li>
<li><strong>source</strong> (<em>pandas.DataFrame</em><em>, </em><em>optional</em>) – Not currently implemented</li>
<li><strong>overwrite</strong> (<em>bool</em><em>, </em><em>optional</em>) – Not currently implemented</li>
</ul>
</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="class">
<dt id="cartoframes.layer.QueryLayer">
<em class="property">class </em><code class="descclassname">cartoframes.layer.</code><code class="descname">QueryLayer</code><span class="sig-paren">(</span><em>query</em>, <em>time=None</em>, <em>color=None</em>, <em>size=None</em>, <em>tooltip=None</em>, <em>legend=None</em><span class="sig-paren">)</span><a class="headerlink" href="#cartoframes.layer.QueryLayer" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <a class="reference internal" href="#cartoframes.layer.AbstractLayer" title="cartoframes.layer.AbstractLayer"><code class="xref py py-class docutils literal"><span class="pre">cartoframes.layer.AbstractLayer</span></code></a></p>
<p>cartoframes data layer based on an arbitrary query to the user’s CARTO
database. This layer class is useful for offloading processing to the cloud
to do some of the following:</p>
<ul class="simple">
<li>Visualizing spatial operations using <a class="reference external" href="http://postgis.net/">PostGIS</a>
and <a class="reference external" href="https://www.postgresql.org/">PostgreSQL</a>, which is the database
underlying CARTO</li>
<li>Performing arbitrary relational database queries (e.g., complex JOINs
in SQL instead of in pandas)</li>
<li>Visualizing a subset of the data (e.g., <code class="docutils literal"><span class="pre">SELECT</span> <span class="pre">*</span> <span class="pre">FROM</span> <span class="pre">table</span> <span class="pre">LIMIT</span>
<span class="pre">1000</span></code>)</li>
</ul>
<p>Used in the <cite>layers</cite> keyword in <a class="reference external" href="#context.CartoContext.map">CartoContext.map()</a>.</p>
<p class="rubric">Example</p>
<p>Underlay a QueryLayer with a complex query below a layer from a table.
The QueryLayer is colored by the calculated column <code class="docutils literal"><span class="pre">abs_diff</span></code>, and
points are sized by the column <code class="docutils literal"><span class="pre">i_measure</span></code>.</p>
<div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">cartoframes</span>
<span class="kn">from</span> <span class="nn">cartoframes</span> <span class="k">import</span> <span class="n">QueryLayer</span><span class="p">,</span> <span class="n">styling</span>
<span class="n">cc</span> <span class="o">=</span> <span class="n">cartoframes</span><span class="o">.</span><span class="n">CartoContext</span><span class="p">(</span><span class="n">BASEURL</span><span class="p">,</span> <span class="n">APIKEY</span><span class="p">)</span>
<span class="n">cc</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">layers</span><span class="o">=</span><span class="p">[</span><span class="n">QueryLayer</span><span class="p">(</span><span class="s1">'''</span>
<span class="s1"> WITH i_cte As (</span>
<span class="s1"> SELECT</span>
<span class="s1"> ST_Buffer(the_geom::geography, 500)::geometry As the_geom,</span>
<span class="s1"> cartodb_id,</span>
<span class="s1"> measure,</span>
<span class="s1"> date</span>
<span class="s1"> FROM interesting_data</span>
<span class="s1"> WHERE date > '2017-04-19'</span>
<span class="s1"> )</span>
<span class="s1"> SELECT</span>
<span class="s1"> i.cartodb_id, i.the_geom,</span>
<span class="s1"> ST_Transform(i.the_geom, 3857) AS the_geom_webmercator,</span>
<span class="s1"> abs(i.measure - j.measure) AS abs_diff,</span>
<span class="s1"> i.measure AS i_measure</span>
<span class="s1"> FROM i_cte AS i</span>
<span class="s1"> JOIN awesome_data AS j</span>
<span class="s1"> ON i.event_id = j.event_id</span>
<span class="s1"> WHERE j.measure IS NOT NULL</span>
<span class="s1"> AND j.date < '2017-04-29'</span>
<span class="s1"> '''</span><span class="p">,</span>
<span class="n">color</span><span class="o">=</span><span class="p">{</span><span class="s1">'column'</span><span class="p">:</span> <span class="s1">'abs_diff'</span><span class="p">,</span>
<span class="s1">'scheme'</span><span class="p">:</span> <span class="n">styling</span><span class="o">.</span><span class="n">sunsetDark</span><span class="p">(</span><span class="mi">7</span><span class="p">)},</span>
<span class="n">size</span><span class="o">=</span><span class="s1">'i_measure'</span><span class="p">),</span>
<span class="n">Layer</span><span class="p">(</span><span class="s1">'fantastic_sql_table'</span><span class="p">)])</span>
</pre></div>
</div>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>query</strong> (<em>str</em>) – Query to expose data on a map layer. At a minimum, a
query needs to have the columns <cite>cartodb_id</cite>, <cite>the_geom</cite>, and
<cite>the_geom_webmercator</cite> for the map to display. Read more about
queries in <a class="reference external" href="https://carto.com/docs/tips-and-tricks/geospatial-analysis">CARTO’s docs</a>.</li>
<li><strong>time</strong> (<em>dict</em><em> or </em><em>str</em><em>, </em><em>optional</em>) – <p>Time-based style to apply to layer.</p>
<p>If <cite>time</cite> is a <code class="xref py py-obj docutils literal"><span class="pre">str</span></code>, it must be the name of a column which
has a data type of <cite>datetime</cite> or <cite>float</cite>.</p>
<p>If <cite>time</cite> is a <code class="xref py py-obj docutils literal"><span class="pre">dict</span></code>, the following keys are options:</p>
<ul>
<li>column (<cite>str</cite>, required): Column for animating map, which must
be of type <cite>datetime</cite> or <cite>float</cite>.</li>
<li>method (<cite>str</cite>, optional): Type of aggregation method for
operating on <a class="reference external" href="https://github.com/CartoDB/torque">Torque TileCubes</a>. Must be one of <code class="docutils literal"><span class="pre">avg</span></code>,
<code class="docutils literal"><span class="pre">sum</span></code>, or another <a class="reference external" href="https://www.postgresql.org/docs/9.5/static/functions-aggregate.html">PostgreSQL aggregate functions</a>
with a numeric output. Defaults to <code class="docutils literal"><span class="pre">count</span></code>.</li>
<li>cumulative (<cite>bool</cite>, optional): Whether to accumulate points over
time (<code class="docutils literal"><span class="pre">True</span></code>) or not (<code class="docutils literal"><span class="pre">False</span></code>, default)</li>
<li>frames (<cite>int</cite>, optional): Number of frames in the animation.
Defaults to 256.</li>
<li>duration (<cite>int</cite>, optional): Number of seconds in the animation.
Defaults to 30.</li>
<li>trails (<cite>int</cite>, optional): Number of trails after the incidence of
a point. Defaults to 2.</li>
</ul>
</li>
<li><strong>color</strong> (<em>dict</em><em> or </em><em>str</em><em>, </em><em>optional</em>) – <p>Color style to apply to map. For
example, this can be used to change the color of all geometries
in this layer, or to create a graduated color or choropleth map.</p>
<p>If <cite>color</cite> is a <code class="xref py py-obj docutils literal"><span class="pre">str</span></code>, there are two options:</p>
<ul>
<li>A column name to style by to create, for example, a choropleth
map if working with polygons. The default classification is
<cite>quantiles</cite> for quantitative data and <cite>category</cite> for
qualitative data.</li>
<li>A hex value or <a class="reference external" href="https://www.w3.org/TR/css3-color/#svg-color">web color name</a>.</li>
</ul>
<p>If <cite>color</cite> is a <code class="xref py py-obj docutils literal"><span class="pre">dict</span></code>, the following keys are options, with
values described:</p>
<ul>
<li>column (<cite>str</cite>): Column used for the basis of styling</li>
<li>scheme (<cite>dict</cite>, optional): Scheme such as <cite>styling.sunset(7)</cite>
from the <a class="reference external" href="#module-styling">styling module</a> of cartoframes that
exposes <a class="reference external" href="https://github.com/CartoDB/CartoColor/wiki/CARTOColor-Scheme-Names">CartoColors</a>.
Defaults to <a class="reference external" href="#styling.mint">mint</a> scheme for quantitative
data and <cite>bold</cite> for qualitative data. More control is given by
using <a class="reference external" href="#styling.scheme">styling.scheme</a>.<p>If you wish to define a custom scheme outside of CartoColors, it
is recommended to use the <a class="reference external" href="#styling.custom">styling.custom</a>
utility function.</p>
</li>
</ul>
</li>
<li><strong>size</strong> (<em>dict</em><em> or </em><em>int</em><em>, </em><em>optional</em>) – <p>Size style to apply to point data.</p>
<p>If <cite>size</cite> is an <code class="xref py py-obj docutils literal"><span class="pre">int</span></code>, all points are sized by this value.</p>
<p>If <cite>size</cite> is a <code class="xref py py-obj docutils literal"><span class="pre">str</span></code>, this value is interpreted as a column,
and the points are sized by the value in this column. The
classification method defaults to <cite>quantiles</cite>, with a min size of
5, and a max size of 5. Use the <code class="xref py py-obj docutils literal"><span class="pre">dict</span></code> input to override these
values.</p>
<p>If <cite>size</cite> is a <code class="xref py py-obj docutils literal"><span class="pre">dict</span></code>, the follow keys are options, with
values described as:</p>
<ul>
<li>column (<cite>str</cite>): Column to base sizing of points on</li>
<li>bin_method (str, optional): Quantification method for dividing
data range into bins. Must be one of the methods in
<code class="xref py py-obj docutils literal"><span class="pre">BinMethod</span></code> (excluding <cite>category</cite>).</li>
<li>bins (<cite>int</cite>, optional): Number of bins to break data into.
Defaults to 5.</li>
<li>max (<cite>int</cite>, optional): Maximum point width (in pixels). Defaults
to 25.</li>
<li>min (<cite>int</cite>, optional): Minimum point width (in pixels). Defaults
to 5.</li>
</ul>
</li>
<li><strong>tooltip</strong> (<em>tuple</em><em>, </em><em>optional</em>) – <strong>Not yet implemented.</strong></li>
<li><strong>legend</strong> – <strong>Not yet implemented.</strong></li>
</ul>
</td>
</tr>
</tbody>
</table>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper"><div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">cartoframes</a><ul>
<li><a href="cartoframes.html">cartoframes package</a><ul>
<li>Previous: <a href="cartoframes.credentials.html" title="previous chapter">cartoframes.credentials module</a></li>
<li>Next: <a href="cartoframes.maps.html" title="next chapter">cartoframes.maps module</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div role="note" aria-label="source link">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/cartoframes.layer.rst.txt"
rel="nofollow">Show Source</a></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<div><input type="text" name="q" /></div>
<div><input type="submit" value="Go" /></div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
©2017, Andy Eschbacher, Stuart Lynn.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 1.6.5</a>
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.10</a>
|
<a href="_sources/cartoframes.layer.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>