PageSourceSearch

https://fizzics.netlify.app/posts/2024-06-25-postcodes-arcgisgeocode/

html fizzics.netlify.app collected 2026-10-03 10:44:11 UTC 81,400 bytes, 2,764 lines download raw bytes

1<!DOCTYPE html>
2
3<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
4
5<head>
6  <meta charset="utf-8"/>
7  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
9  <meta name="generator" content="distill" />
10
11  <style type="text/css">
12  /* Hide doc at startup (prevent jankiness while JS renders/transforms) */
13  body {
14    visibility: hidden;
15  }
16  </style>
17
18 <!--radix_placeholder_import_source-->
19 <!--/radix_placeholder_import_source-->
20
21<style type="text/css">code{white-space: pre;}</style>
22<style type="text/css" data-origin="pandoc">
23pre > code.sourceCode { white-space: pre; position: relative; }
24pre > code.sourceCode > span { line-height: 1.25; }
25pre > code.sourceCode > span:empty { height: 1.2em; }
26.sourceCode { overflow: visible; }
27code.sourceCode > span { color: inherit; text-decoration: inherit; }
28div.sourceCode { margin: 1em 0; }
29pre.sourceCode { margin: 0; }
30@media screen {
31div.sourceCode { overflow: auto; }
32}
33@media print {
34pre > code.sourceCode { white-space: pre-wrap; }
35pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
36}
37pre.numberSource code
38  { counter-reset: source-line 0; }
39pre.numberSource code > span
40  { position: relative; left: -4em; counter-increment: source-line; }
41pre.numberSource code > span > a:first-child::before
42  { content: counter(source-line);
43    position: relative; left: -1em; text-align: right; vertical-align: baseline;
44    border: none; display: inline-block;
45    -webkit-touch-callout: none; -webkit-user-select: none;
46    -khtml-user-select: none; -moz-user-select: none;
47    -ms-user-select: none; user-select: none;
48    padding: 0 4px; width: 4em;
49    color: #aaaaaa;
50  }
51pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
52div.sourceCode
53  { color: #00769e; background-color: #f1f3f5; }
54@media screen {
55pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
56}
57code span { color: #00769e; } /* Normal */
58code span.al { color: #ad0000; } /* Alert */
59code span.an { color: #5e5e5e; } /* Annotation */
60code span.at { color: #657422; } /* Attribute */
61code span.bn { color: #ad0000; } /* BaseN */
62code span.bu { } /* BuiltIn */
63code span.cf { color: #00769e; } /* ControlFlow */
64code span.ch { color: #20794d; } /* Char */
65code span.cn { color: #8f5902; } /* Constant */
66code span.co { color: #5e5e5e; } /* Comment */
67code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
68code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
69code span.dt { color: #ad0000; } /* DataType */
70code span.dv { color: #ad0000; } /* DecVal */
71code span.er { color: #ad0000; } /* Error */
72code span.ex { } /* Extension */
73code span.fl { color: #ad0000; } /* Float */
74code span.fu { color: #4758ab; } /* Function */
75code span.im { } /* Import */
76code span.in { color: #5e5e5e; } /* Information */
77code span.kw { color: #00769e; } /* Keyword */
78code span.op { color: #5e5e5e; } /* Operator */
79code span.ot { color: #00769e; } /* Other */
80code span.pp { color: #ad0000; } /* Preprocessor */
81code span.sc { color: #5e5e5e; } /* SpecialChar */
82code span.ss { color: #20794d; } /* SpecialString */
83code span.st { color: #20794d; } /* String */
84code span.va { color: #111111; } /* Variable */
85code span.vs { color: #20794d; } /* VerbatimString */
86code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
87</style>
88
89
90  <!--radix_placeholder_meta_tags-->
91<title>Euge: Finding Postcodes using `arcgisgeocode`</title>
92
93<meta property="description" itemprop="description" content="Using the arcgiscoder package to find postal codes, making a shiny app using leaflet."/>
94
95<link rel="canonical" href="https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/"/>
96<link rel="license" href="https://creativecommons.org/licenses/by/4.0/"/>
97<link rel="icon" type="image/vnd.microsoft.icon" href="../../images/favicon.ico"/>
98
99<!--  https://schema.org/Article -->
100<meta property="article:published" itemprop="datePublished" content="2024-06-25"/>
101<meta property="article:created" itemprop="dateCreated" content="2024-06-25"/>
102<meta name="article:author" content="Eugene"/>
103
104<!--  https://developers.facebook.com/docs/sharing/webmasters#markup -->
105<meta property="og:title" content="Euge: Finding Postcodes using `arcgisgeocode`"/>
106<meta property="og:type" content="article"/>
107<meta property="og:description" content="Using the arcgiscoder package to find postal codes, making a shiny app using leaflet."/>
108<meta property="og:url" content="https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/"/>
109<meta property="og:image" content="https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/images/sheephaven.png"/>
110<meta property="og:image:width" content="1233"/>
111<meta property="og:image:height" content="956"/>
112<meta property="og:locale" content="en_US"/>
113<meta property="og:site_name" content="Euge"/>
114
115<!--  https://dev.twitter.com/cards/types/summary -->
116<meta property="twitter:card" content="summary_large_image"/>
117<meta property="twitter:title" content="Euge: Finding Postcodes using `arcgisgeocode`"/>
118<meta property="twitter:description" content="Using the arcgiscoder package to find postal codes, making a shiny app using leaflet."/>
119<meta property="twitter:url" content="https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/"/>
120<meta property="twitter:image" content="https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/images/sheephaven.png"/>
121<meta property="twitter:image:width" content="1233"/>
122<meta property="twitter:image:height" content="956"/>
123<meta property="twitter:site" content="@eugene100hickey"/>
124
125<!--  https://scholar.google.com/intl/en/scholar/inclusion.html#indexing -->
126<meta name="citation_title" content="Euge: Finding Postcodes using `arcgisgeocode`"/>
127<meta name="citation_fulltext_html_url" content="https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/"/>
128<meta name="citation_fulltext_world_readable" content=""/>
129<meta name="citation_online_date" content="2024/06/25"/>
130<meta name="citation_publication_date" content="2024/06/25"/>
131<meta name="citation_author" content="Eugene"/>
132<!--/radix_placeholder_meta_tags-->
133  <!--radix_placeholder_rmarkdown_metadata-->
134
135<script type="text/json" id="radix-rmarkdown-metadata">
136{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["creative_commons","title","description","author","date","preview","output","citation_url","canonical_url"]}},"value":[{"type":"character","attributes":{},"value":["CC BY"]},{"type":"character","attributes":{},"value":["Finding Postcodes using `arcgisgeocode`"]},{"type":"character","attributes":{},"value":["Using the arcgiscoder package to find postal codes, making a shiny app using leaflet."]},{"type":"list","attributes":{},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["name","url"]}},"value":[{"type":"character","attributes":{},"value":["Eugene"]},{"type":"character","attributes":{},"value":["https://www.fizzics.ie"]}]}]},{"type":"character","attributes":{},"value":["2024-06-25"]},{"type":"character","attributes":{},"value":["images/sheephaven.png"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained"]}},"value":[{"type":"logical","attributes":{},"value":[false]}]}]},{"type":"character","attributes":{},"value":["https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/"]},{"type":"character","attributes":{},"value":["https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/"]}]}
137</script>
137
138<!--/radix_placeholder_rmarkdown_metadata-->
139  
140  
140<script type="text/json" id="radix-resource-manifest">
141  {"type":"character","attributes":{},"value":["finding-postcodes-using-arcgisgeocode_files/anchor-4.2.2/anchor.min.js","finding-postcodes-using-arcgisgeocode_files/bowser-1.9.3/bowser.min.js","finding-postcodes-using-arcgisgeocode_files/distill-2.2.21/template.v2.js","finding-postcodes-using-arcgisgeocode_files/header-attrs-2.27/header-attrs.js","finding-postcodes-using-arcgisgeocode_files/jquery-3.6.0/jquery-3.6.0.js","finding-postcodes-using-arcgisgeocode_files/jquery-3.6.0/jquery-3.6.0.min.js","finding-postcodes-using-arcgisgeocode_files/jquery-3.6.0/jquery-3.6.0.min.map","finding-postcodes-using-arcgisgeocode_files/popper-2.6.0/popper.min.js","finding-postcodes-using-arcgisgeocode_files/tippy-6.2.7/tippy-bundle.umd.min.js","finding-postcodes-using-arcgisgeocode_files/tippy-6.2.7/tippy-light-border.css","finding-postcodes-using-arcgisgeocode_files/tippy-6.2.7/tippy.css","finding-postcodes-using-arcgisgeocode_files/tippy-6.2.7/tippy.umd.min.js","finding-postcodes-using-arcgisgeocode_files/webcomponents-2.0.0/webcomponents.js","images/sheephaven.png","postal-coding/postal-coding.R"]}
142  </script>
142
143  <!--radix_placeholder_navigation_in_header-->
144<meta name="distill:offset" content="../.."/>
145
146<script type="application/javascript">
147
148  window.headroom_prevent_pin = false;
149
150  window.document.addEventListener("DOMContentLoaded", function (event) {
151
152    // initialize headroom for banner
153    var header = $('header').get(0);
154    var headerHeight = header.offsetHeight;
155    var headroom = new Headroom(header, {
156      tolerance: 5,
157      onPin : function() {
158        if (window.headroom_prevent_pin) {
159          window.headroom_prevent_pin = false;
160          headroom.unpin();
161        }
162      }
163    });
164    headroom.init();
165    if(window.location.hash)
166      headroom.unpin();
167    $(header).addClass('headroom--transition');
168
169    // offset scroll location for banner on hash change
170    // (see: https://github.com/WickyNilliams/headroom.js/issues/38)
171    window.addEventListener("hashchange", function(event) {
172      window.scrollTo(0, window.pageYOffset - (headerHeight + 25));
173    });
174
175    // responsive menu
176    $('.distill-site-header').each(function(i, val) {
177      var topnav = $(this);
178      var toggle = topnav.find('.nav-toggle');
179      toggle.on('click', function() {
180        topnav.toggleClass('responsive');
181      });
182    });
183
184    // nav dropdowns
185    $('.nav-dropbtn').click(function(e) {
186      $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active');
187      $(this).parent().siblings('.nav-dropdown')
188         .children('.nav-dropdown-content').removeClass('nav-dropdown-active');
189    });
190    $("body").click(function(e){
191      $('.nav-dropdown-content').removeClass('nav-dropdown-active');
192    });
193    $(".nav-dropdown").click(function(e){
194      e.stopPropagation();
195    });
196  });
197</script>
197
198
199<style type="text/css">
200
201/* Theme (user-documented overrideables for nav appearance) */
202
203.distill-site-nav {
204  color: rgba(255, 255, 255, 0.8);
205  background-color: #0F2E3D;
206  font-size: 15px;
207  font-weight: 300;
208}
209
210.distill-site-nav a {
211  color: inherit;
212  text-decoration: none;
213}
214
215.distill-site-nav a:hover {
216  color: white;
217}
218
219@media print {
220  .distill-site-nav {
221    display: none;
222  }
223}
224
225.distill-site-header {
226
227}
228
229.distill-site-footer {
230
231}
232
233
234/* Site Header */
235
236.distill-site-header {
237  width: 100%;
238  box-sizing: border-box;
239  z-index: 3;
240}
241
242.distill-site-header .nav-left {
243  display: inline-block;
244  margin-left: 8px;
245}
246
247@media screen and (max-width: 768px) {
248  .distill-site-header .nav-left {
249    margin-left: 0;
250  }
251}
252
253
254.distill-site-header .nav-right {
255  float: right;
256  margin-right: 8px;
257}
258
259.distill-site-header a,
260.distill-site-header .title {
261  display: inline-block;
262  text-align: center;
263  padding: 14px 10px 14px 10px;
264}
265
266.distill-site-header .title {
267  font-size: 18px;
268  min-width: 150px;
269}
270
271.distill-site-header .logo {
272  padding: 0;
273}
274
275.distill-site-header .logo img {
276  display: none;
277  max-height: 20px;
278  width: auto;
279  margin-bottom: -4px;
280}
281
282.distill-site-header .nav-image img {
283  max-height: 18px;
284  width: auto;
285  display: inline-block;
286  margin-bottom: -3px;
287}
288
289
290
291@media screen and (min-width: 1000px) {
292  .distill-site-header .logo img {
293    display: inline-block;
294  }
295  .distill-site-header .nav-left {
296    margin-left: 20px;
297  }
298  .distill-site-header .nav-right {
299    margin-right: 20px;
300  }
301  .distill-site-header .title {
302    padding-left: 12px;
303  }
304}
305
306
307.distill-site-header .nav-toggle {
308  display: none;
309}
310
311.nav-dropdown {
312  display: inline-block;
313  position: relative;
314}
315
316.nav-dropdown .nav-dropbtn {
317  border: none;
318  outline: none;
319  color: rgba(255, 255, 255, 0.8);
320  padding: 16px 10px;
321  background-color: transparent;
322  font-family: inherit;
323  font-size: inherit;
324  font-weight: inherit;
325  margin: 0;
326  margin-top: 1px;
327  z-index: 2;
328}
329
330.nav-dropdown-content {
331  display: none;
332  position: absolute;
333  background-color: white;
334  min-width: 200px;
335  border: 1px solid rgba(0,0,0,0.15);
336  border-radius: 4px;
337  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1);
338  z-index: 1;
339  margin-top: 2px;
340  white-space: nowrap;
341  padding-top: 4px;
342  padding-bottom: 4px;
343}
344
345.nav-dropdown-content hr {
346  margin-top: 4px;
347  margin-bottom: 4px;
348  border: none;
349  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
350}
351
352.nav-dropdown-active {
353  display: block;
354}
355
356.nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header {
357  color: black;
358  padding: 6px 24px;
359  text-decoration: none;
360  display: block;
361  text-align: left;
362}
363
364.nav-dropdown-content .nav-dropdown-header {
365  display: block;
366  padding: 5px 24px;
367  padding-bottom: 0;
368  text-transform: uppercase;
369  font-size: 14px;
370  color: #999999;
371  white-space: nowrap;
372}
373
374.nav-dropdown:hover .nav-dropbtn {
375  color: white;
376}
377
378.nav-dropdown-content a:hover {
379  background-color: #ddd;
380  color: black;
381}
382
383.nav-right .nav-dropdown-content {
384  margin-left: -45%;
385  right: 0;
386}
387
388@media screen and (max-width: 768px) {
389  .distill-site-header a, .distill-site-header .nav-dropdown  {display: none;}
390  .distill-site-header a.nav-toggle {
391    float: right;
392    display: block;
393  }
394  .distill-site-header .title {
395    margin-left: 0;
396  }
397  .distill-site-header .nav-right {
398    margin-right: 0;
399  }
400  .distill-site-header {
401    overflow: hidden;
402  }
403  .nav-right .nav-dropdown-content {
404    margin-left: 0;
405  }
406}
407
408
409@media screen and (max-width: 768px) {
410  .distill-site-header.responsive {position: relative; min-height: 500px; }
411  .distill-site-header.responsive a.nav-toggle {
412    position: absolute;
413    right: 0;
414    top: 0;
415  }
416  .distill-site-header.responsive a,
417  .distill-site-header.responsive .nav-dropdown {
418    display: block;
419    text-align: left;
420  }
421  .distill-site-header.responsive .nav-left,
422  .distill-site-header.responsive .nav-right {
423    width: 100%;
424  }
425  .distill-site-header.responsive .nav-dropdown {float: none;}
426  .distill-site-header.responsive .nav-dropdown-content {position: relative;}
427  .distill-site-header.responsive .nav-dropdown .nav-dropbtn {
428    display: block;
429    width: 100%;
430    text-align: left;
431  }
432}
433
434/* Site Footer */
435
436.distill-site-footer {
437  width: 100%;
438  overflow: hidden;
439  box-sizing: border-box;
440  z-index: 3;
441  margin-top: 30px;
442  padding-top: 30px;
443  padding-bottom: 30px;
444  text-align: center;
445}
446
447/* Headroom */
448
449d-title {
450  padding-top: 6rem;
451}
452
453@media print {
454  d-title {
455    padding-top: 4rem;
456  }
457}
458
459.headroom {
460  z-index: 1000;
461  position: fixed;
462  top: 0;
463  left: 0;
464  right: 0;
465}
466
467.headroom--transition {
468  transition: all .4s ease-in-out;
469}
470
471.headroom--unpinned {
472  top: -100px;
473}
474
475.headroom--pinned {
476  top: 0;
477}
478
479/* adjust viewport for navbar height */
480/* helps vertically center bootstrap (non-distill) content */
481.min-vh-100 {
482  min-height: calc(100vh - 100px) !important;
483}
484
485</style>
486
487<script src="../../site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
487
488<link href="../../site_libs/font-awesome-6.5.2/css/all.min.css" rel="stylesheet"/>
489<link href="../../site_libs/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet"/>
490<script src="../../site_libs/headroom-0.9.4/headroom.min.js"></script>
vendor: 1 bytes, line 490
490
491<script src="../../site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
vendor: 1 bytes, line 491
491
492<script src="../../site_libs/fuse-6.4.1/fuse.min.js"></script>
492
493
494<script type="application/javascript">
495
496function getMeta(metaName) {
497  var metas = document.getElementsByTagName('meta');
498  for (let i = 0; i < metas.length; i++) {
499    if (metas[i].getAttribute('name') === metaName) {
500      return metas[i].getAttribute('content');
501    }
502  }
503  return '';
504}
505
506function offsetURL(url) {
507  var offset = getMeta('distill:offset');
508  return offset ? offset + '/' + url : url;
509}
510
511function createFuseIndex() {
512
513  // create fuse index
514  var options = {
515    keys: [
516      { name: 'title', weight: 20 },
517      { name: 'categories', weight: 15 },
518      { name: 'description', weight: 10 },
519      { name: 'contents', weight: 5 },
520    ],
521    ignoreLocation: true,
522    threshold: 0
523  };
524  var fuse = new window.Fuse([], options);
525
526  // fetch the main search.json
527  return fetch(offsetURL('search.json'))
528    .then(function(response) {
529      if (response.status == 200) {
530        return response.json().then(function(json) {
531          // index main articles
532          json.articles.forEach(function(article) {
533            fuse.add(article);
534          });
535          // download collections and index their articles
536          return Promise.all(json.collections.map(function(collection) {
537            return fetch(offsetURL(collection)).then(function(response) {
538              if (response.status === 200) {
539                return response.json().then(function(articles) {
540                  articles.forEach(function(article) {
541                    fuse.add(article);
542                  });
543                })
544              } else {
545                return Promise.reject(
546                  new Error('Unexpected status from search index request: ' +
547                            response.status)
548                );
549              }
550            });
551          })).then(function() {
552            return fuse;
553          });
554        });
555
556      } else {
557        return Promise.reject(
558          new Error('Unexpected status from search index request: ' +
559                      response.status)
560        );
561      }
562    });
563}
564
565window.document.addEventListener("DOMContentLoaded", function (event) {
566
567  // get search element (bail if we don't have one)
568  var searchEl = window.document.getElementById('distill-search');
569  if (!searchEl)
570    return;
571
572  createFuseIndex()
573    .then(function(fuse) {
574
575      // make search box visible
576      searchEl.classList.remove('hidden');
577
578      // initialize autocomplete
579      var options = {
580        autoselect: true,
581        hint: false,
582        minLength: 2,
583      };
584      window.autocomplete(searchEl, options, [{
585        source: function(query, callback) {
586          const searchOptions = {
587            isCaseSensitive: false,
588            shouldSort: true,
589            minMatchCharLength: 2,
590            limit: 10,
591          };
592          var results = fuse.search(query, searchOptions);
593          callback(results
594            .map(function(result) { return result.item; })
595          );
596        },
597        templates: {
598          suggestion: function(suggestion) {
599            var img = suggestion.preview && Object.keys(suggestion.preview).length > 0
600              ? `<img src="${offsetURL(suggestion.preview)}"</img>`
601              : '';
602            var html = `
603              <div class="search-item">
604                <h3>${suggestion.title}</h3>
605                <div class="search-item-description">
606                  ${suggestion.description || ''}
607                </div>
608                <div class="search-item-preview">
609                  ${img}
610                </div>
611              </div>
612            `;
613            return html;
614          }
615        }
616      }]).on('autocomplete:selected', function(event, suggestion) {
617        window.location.href = offsetURL(suggestion.path);
618      });
619      // remove inline display style on autocompleter (we want to
620      // manage responsive display via css)
621      $('.algolia-autocomplete').css("display", "");
622    })
623    .catch(function(error) {
624      console.log(error);
625    });
626
627});
628
629</script>
629
630
631<style type="text/css">
632
633.nav-search {
634  font-size: x-small;
635}
636
637/* Algolioa Autocomplete */
638
639.algolia-autocomplete {
640  display: inline-block;
641  margin-left: 10px;
642  vertical-align: sub;
643  background-color: white;
644  color: black;
645  padding: 6px;
646  padding-top: 8px;
647  padding-bottom: 0;
648  border-radius: 6px;
649  border: 1px #0F2E3D solid;
650  width: 180px;
651}
652
653
654@media screen and (max-width: 768px) {
655  .distill-site-nav .algolia-autocomplete {
656    display: none;
657    visibility: hidden;
658  }
659  .distill-site-nav.responsive .algolia-autocomplete {
660    display: inline-block;
661    visibility: visible;
662  }
663  .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu {
664    margin-left: 0;
665    width: 400px;
666    max-height: 400px;
667  }
668}
669
670.algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
671  width: 90%;
672  outline: none;
673  border: none;
674}
675
676.algolia-autocomplete .aa-hint {
677  color: #999;
678}
679.algolia-autocomplete .aa-dropdown-menu {
680  width: 550px;
681  max-height: 70vh;
682  overflow-x: visible;
683  overflow-y: scroll;
684  padding: 5px;
685  margin-top: 3px;
686  margin-left: -150px;
687  background-color: #fff;
688  border-radius: 5px;
689  border: 1px solid #999;
690  border-top: none;
691}
692
693.algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
694  cursor: pointer;
695  padding: 5px 4px;
696  border-bottom: 1px solid #eee;
697}
698
699.algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type {
700  border-bottom: none;
701  margin-bottom: 2px;
702}
703
704.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item {
705  overflow: hidden;
706  font-size: 0.8em;
707  line-height: 1.4em;
708}
709
710.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 {
711  font-size: 1rem;
712  margin-block-start: 0;
713  margin-block-end: 5px;
714}
715
716.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description {
717  display: inline-block;
718  overflow: hidden;
719  height: 2.8em;
720  width: 80%;
721  margin-right: 4%;
722}
723
724.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview {
725  display: inline-block;
726  width: 15%;
727}
728
729.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img {
730  height: 3em;
731  width: auto;
732  display: none;
733}
734
735.algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] {
736  display: initial;
737}
738
739.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
740  background-color: #eee;
741}
742.algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
743  font-weight: bold;
744  font-style: normal;
745}
746
747</style>
748
749
750<!--/radix_placeholder_navigation_in_header-->
751  <!--radix_placeholder_distill-->
752
753<style type="text/css">
754
755body {
756  background-color: white;
757}
758
759.pandoc-table {
760  width: 100%;
761}
762
763.pandoc-table>caption {
764  margin-bottom: 10px;
765}
766
767.pandoc-table th:not([align]) {
768  text-align: left;
769}
770
771.pagedtable-footer {
772  font-size: 15px;
773}
774
775d-byline .byline {
776  grid-template-columns: 2fr 2fr;
777}
778
779d-byline .byline h3 {
780  margin-block-start: 1.5em;
781}
782
783d-byline .byline .authors-affiliations h3 {
784  margin-block-start: 0.5em;
785}
786
787.authors-affiliations .orcid-id {
788  width: 16px;
789  height:16px;
790  margin-left: 4px;
791  margin-right: 4px;
792  vertical-align: middle;
793  padding-bottom: 2px;
794}
795
796d-title .dt-tags {
797  margin-top: 1em;
798  grid-column: text;
799}
800
801.dt-tags .dt-tag {
802  text-decoration: none;
803  display: inline-block;
804  color: rgba(0,0,0,0.6);
805  padding: 0em 0.4em;
806  margin-right: 0.5em;
807  margin-bottom: 0.4em;
808  font-size: 70%;
809  border: 1px solid rgba(0,0,0,0.2);
810  border-radius: 3px;
811  text-transform: uppercase;
812  font-weight: 500;
813}
814
815d-article table.gt_table td,
816d-article table.gt_table th {
817  border-bottom: none;
818  font-size: 100%;
819}
820
821.html-widget {
822  margin-bottom: 2.0em;
823}
824
825.l-screen-inset {
826  padding-right: 16px;
827}
828
829.l-screen .caption {
830  margin-left: 10px;
831}
832
833.shaded {
834  background: rgb(247, 247, 247);
835  padding-top: 20px;
836  padding-bottom: 20px;
837  border-top: 1px solid rgba(0, 0, 0, 0.1);
838  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
839}
840
841.shaded .html-widget {
842  margin-bottom: 0;
843  border: 1px solid rgba(0, 0, 0, 0.1);
844}
845
846.shaded .shaded-content {
847  background: white;
848}
849
850.text-output {
851  margin-top: 0;
852  line-height: 1.5em;
853}
854
855.hidden {
856  display: none !important;
857}
858
859hr.section-separator {
860  border: none;
861  border-top: 1px solid rgba(0, 0, 0, 0.1);
862  margin: 0px;
863}
864
865
866d-byline {
867  border-top: none;
868}
869
870d-article {
871  padding-top: 2.5rem;
872  padding-bottom: 30px;
873  border-top: none;
874}
875
876d-appendix {
877  padding-top: 30px;
878}
879
880d-article>p>img {
881  width: 100%;
882}
883
884d-article h2 {
885  margin: 1rem 0 1.5rem 0;
886}
887
888d-article h3 {
889  margin-top: 1.5rem;
890}
891
892d-article iframe {
893  border: 1px solid rgba(0, 0, 0, 0.1);
894  margin-bottom: 2.0em;
895  width: 100%;
896}
897
898/* Tweak code blocks */
899
900d-article div.sourceCode code,
901d-article pre code {
902  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
903}
904
905d-article pre,
906d-article div.sourceCode,
907d-article div.sourceCode pre {
908  overflow: auto;
909}
910
911d-article div.sourceCode {
912  background-color: white;
913}
914
915d-article div.sourceCode pre {
916  padding-left: 10px;
917  font-size: 12px;
918  border-left: 2px solid rgba(0,0,0,0.1);
919}
920
921d-article pre {
922  font-size: 12px;
923  color: black;
924  background: none;
925  margin-top: 0;
926  text-align: left;
927  white-space: pre;
928  word-spacing: normal;
929  word-break: normal;
930  word-wrap: normal;
931  line-height: 1.5;
932
933  -moz-tab-size: 4;
934  -o-tab-size: 4;
935  tab-size: 4;
936
937  -webkit-hyphens: none;
938  -moz-hyphens: none;
939  -ms-hyphens: none;
940  hyphens: none;
941}
942
943d-article pre a {
944  border-bottom: none;
945}
946
947d-article pre a:hover {
948  border-bottom: none;
949  text-decoration: underline;
950}
951
952d-article details {
953  grid-column: text;
954  margin-bottom: 0.8em;
955}
956
957@media(min-width: 768px) {
958
959d-article pre,
960d-article div.sourceCode,
961d-article div.sourceCode pre {
962  overflow: visible !important;
963}
964
965d-article div.sourceCode pre {
966  padding-left: 18px;
967  font-size: 14px;
968}
969
970/* tweak for Pandoc numbered line within distill */
971d-article pre.numberSource code > span {
972    left: -2em;
973}
974
975d-article pre {
976  font-size: 14px;
977}
978
979}
980
981figure img.external {
982  background: white;
983  border: 1px solid rgba(0, 0, 0, 0.1);
984  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
985  padding: 18px;
986  box-sizing: border-box;
987}
988
989/* CSS for d-contents */
990
991.d-contents {
992  grid-column: text;
993  color: rgba(0,0,0,0.8);
994  font-size: 0.9em;
995  padding-bottom: 1em;
996  margin-bottom: 1em;
997  padding-bottom: 0.5em;
998  margin-bottom: 1em;
999  padding-left: 0.25em;
1000  justify-self: start;
1001}
1002
1003@media(min-width: 1000px) {
1004  .d-contents.d-contents-float {
1005    height: 0;
1006    grid-column-start: 1;
1007    grid-column-end: 4;
1008    justify-self: center;
1009    padding-right: 3em;
1010    padding-left: 2em;
1011  }
1012}
1013
1014.d-contents nav h3 {
1015  font-size: 18px;
1016  margin-top: 0;
1017  margin-bottom: 1em;
1018}
1019
1020.d-contents li {
1021  list-style-type: none
1022}
1023
1024.d-contents nav > ul {
1025  padding-left: 0;
1026}
1027
1028.d-contents ul {
1029  padding-left: 1em
1030}
1031
1032.d-contents nav ul li {
1033  margin-top: 0.6em;
1034  margin-bottom: 0.2em;
1035}
1036
1037.d-contents nav a {
1038  font-size: 13px;
1039  border-bottom: none;
1040  text-decoration: none
1041  color: rgba(0, 0, 0, 0.8);
1042}
1043
1044.d-contents nav a:hover {
1045  text-decoration: underline solid rgba(0, 0, 0, 0.6)
1046}
1047
1048.d-contents nav > ul > li > a {
1049  font-weight: 600;
1050}
1051
1052.d-contents nav > ul > li > ul {
1053  font-weight: inherit;
1054}
1055
1056.d-contents nav > ul > li > ul > li {
1057  margin-top: 0.2em;
1058}
1059
1060
1061.d-contents nav ul {
1062  margin-top: 0;
1063  margin-bottom: 0.25em;
1064}
1065
1066.d-article-with-toc h2:nth-child(2) {
1067  margin-top: 0;
1068}
1069
1070
1071/* Figure */
1072
1073.figure {
1074  position: relative;
1075  margin-bottom: 2.5em;
1076  margin-top: 1.5em;
1077}
1078
1079.figure .caption {
1080  color: rgba(0, 0, 0, 0.6);
1081  font-size: 12px;
1082  line-height: 1.5em;
1083}
1084
1085.figure img.external {
1086  background: white;
1087  border: 1px solid rgba(0, 0, 0, 0.1);
1088  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
1089  padding: 18px;
1090  box-sizing: border-box;
1091}
1092
1093.figure .caption a {
1094  color: rgba(0, 0, 0, 0.6);
1095}
1096
1097.figure .caption b,
1098.figure .caption strong, {
1099  font-weight: 600;
1100  color: rgba(0, 0, 0, 1.0);
1101}
1102
1103/* Citations */
1104
1105d-article .citation {
1106  color: inherit;
1107  cursor: inherit;
1108}
1109
1110div.hanging-indent{
1111  margin-left: 1em; text-indent: -1em;
1112}
1113
1114/* Citation hover box */
1115
1116.tippy-box[data-theme~=light-border] {
1117  background-color: rgba(250, 250, 250, 0.95);
1118}
1119
1120.tippy-content > p {
1121  margin-bottom: 0;
1122  padding: 2px;
1123}
1124
1125
1126/* Tweak 1000px media break to show more text */
1127
1128@media(min-width: 1000px) {
1129  .base-grid,
1130  distill-header,
1131  d-title,
1132  d-abstract,
1133  d-article,
1134  d-appendix,
1135  distill-appendix,
1136  d-byline,
1137  d-footnote-list,
1138  d-citation-list,
1139  distill-footer {
1140    grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end];
1141    grid-column-gap: 16px;
1142  }
1143
1144  .grid {
1145    grid-column-gap: 16px;
1146  }
1147
1148  d-article {
1149    font-size: 1.06rem;
1150    line-height: 1.7em;
1151  }
1152  figure .caption, .figure .caption, figure figcaption {
1153    font-size: 13px;
1154  }
1155}
1156
1157@media(min-width: 1180px) {
1158  .base-grid,
1159  distill-header,
1160  d-title,
1161  d-abstract,
1162  d-article,
1163  d-appendix,
1164  distill-appendix,
1165  d-byline,
1166  d-footnote-list,
1167  d-citation-list,
1168  distill-footer {
1169    grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];
1170    grid-column-gap: 32px;
1171  }
1172
1173  .grid {
1174    grid-column-gap: 32px;
1175  }
1176}
1177
1178
1179/* Get the citation styles for the appendix (not auto-injected on render since
1180   we do our own rendering of the citation appendix) */
1181
1182d-appendix .citation-appendix,
1183.d-appendix .citation-appendix {
1184  font-size: 11px;
1185  line-height: 15px;
1186  border-left: 1px solid rgba(0, 0, 0, 0.1);
1187  padding-left: 18px;
1188  border: 1px solid rgba(0,0,0,0.1);
1189  background: rgba(0, 0, 0, 0.02);
1190  padding: 10px 18px;
1191  border-radius: 3px;
1192  color: rgba(150, 150, 150, 1);
1193  overflow: hidden;
1194  margin-top: -12px;
1195  white-space: pre-wrap;
1196  word-wrap: break-word;
1197}
1198
1199/* Include appendix styles here so they can be overridden */
1200
1201d-appendix {
1202  contain: layout style;
1203  font-size: 0.8em;
1204  line-height: 1.7em;
1205  margin-top: 60px;
1206  margin-bottom: 0;
1207  border-top: 1px solid rgba(0, 0, 0, 0.1);
1208  color: rgba(0,0,0,0.5);
1209  padding-top: 60px;
1210  padding-bottom: 48px;
1211}
1212
1213d-appendix h3 {
1214  grid-column: page-start / text-start;
1215  font-size: 15px;
1216  font-weight: 500;
1217  margin-top: 1em;
1218  margin-bottom: 0;
1219  color: rgba(0,0,0,0.65);
1220}
1221
1222d-appendix h3 + * {
1223  margin-top: 1em;
1224}
1225
1226d-appendix ol {
1227  padding: 0 0 0 15px;
1228}
1229
1230@media (min-width: 768px) {
1231  d-appendix ol {
1232    padding: 0 0 0 30px;
1233    margin-left: -30px;
1234  }
1235}
1236
1237d-appendix li {
1238  margin-bottom: 1em;
1239}
1240
1241d-appendix a {
1242  color: rgba(0, 0, 0, 0.6);
1243}
1244
1245d-appendix > * {
1246  grid-column: text;
1247}
1248
1249d-appendix > d-footnote-list,
1250d-appendix > d-citation-list,
1251d-appendix > distill-appendix {
1252  grid-column: screen;
1253}
1254
1255/* Include footnote styles here so they can be overridden */
1256
1257d-footnote-list {
1258  contain: layout style;
1259}
1260
1261d-footnote-list > * {
1262  grid-column: text;
1263}
1264
1265d-footnote-list a.footnote-backlink {
1266  color: rgba(0,0,0,0.3);
1267  padding-left: 0.5em;
1268}
1269
1270
1271
1272/* Anchor.js */
1273
1274.anchorjs-link {
1275  /*transition: all .25s linear; */
1276  text-decoration: none;
1277  border-bottom: none;
1278}
1279*:hover > .anchorjs-link {
1280  margin-left: -1.125em !important;
1281  text-decoration: none;
1282  border-bottom: none;
1283}
1284
1285/* Social footer */
1286
1287.social_footer {
1288  margin-top: 30px;
1289  margin-bottom: 0;
1290  color: rgba(0,0,0,0.67);
1291}
1292
1293.disqus-comments {
1294  margin-right: 30px;
1295}
1296
1297.disqus-comment-count {
1298  border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1299  cursor: pointer;
1300}
1301
1302#disqus_thread {
1303  margin-top: 30px;
1304}
1305
1306.article-sharing a {
1307  border-bottom: none;
1308  margin-right: 8px;
1309}
1310
1311.article-sharing a:hover {
1312  border-bottom: none;
1313}
1314
1315.sidebar-section.subscribe {
1316  font-size: 12px;
1317  line-height: 1.6em;
1318}
1319
1320.subscribe p {
1321  margin-bottom: 0.5em;
1322}
1323
1324
1325.article-footer .subscribe {
1326  font-size: 15px;
1327  margin-top: 45px;
1328}
1329
1330
1331.sidebar-section.custom {
1332  font-size: 12px;
1333  line-height: 1.6em;
1334}
1335
1336.custom p {
1337  margin-bottom: 0.5em;
1338}
1339
1340/* Styles for listing layout (hide title) */
1341.layout-listing d-title, .layout-listing .d-title {
1342  display: none;
1343}
1344
1345/* Styles for posts lists (not auto-injected) */
1346
1347
1348.posts-with-sidebar {
1349  padding-left: 45px;
1350  padding-right: 45px;
1351}
1352
1353.posts-list .description h2,
1354.posts-list .description p {
1355  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1356}
1357
1358.posts-list .description h2 {
1359  font-weight: 700;
1360  border-bottom: none;
1361  padding-bottom: 0;
1362}
1363
1364.posts-list h2.post-tag {
1365  border-bottom: 1px solid rgba(0, 0, 0, 0.2);
1366  padding-bottom: 12px;
1367}
1368.posts-list {
1369  margin-top: 60px;
1370  margin-bottom: 24px;
1371}
1372
1373.posts-list .post-preview {
1374  text-decoration: none;
1375  overflow: hidden;
1376  display: block;
1377  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
1378  padding: 24px 0;
1379}
1380
1381.post-preview-last {
1382  border-bottom: none !important;
1383}
1384
1385.posts-list .posts-list-caption {
1386  grid-column: screen;
1387  font-weight: 400;
1388}
1389
1390.posts-list .post-preview h2 {
1391  margin: 0 0 6px 0;
1392  line-height: 1.2em;
1393  font-style: normal;
1394  font-size: 24px;
1395}
1396
1397.posts-list .post-preview p {
1398  margin: 0 0 12px 0;
1399  line-height: 1.4em;
1400  font-size: 16px;
1401}
1402
1403.posts-list .post-preview .thumbnail {
1404  box-sizing: border-box;
1405  margin-bottom: 24px;
1406  position: relative;
1407  max-width: 500px;
1408}
1409.posts-list .post-preview img {
1410  width: 100%;
1411  display: block;
1412}
1413
1414.posts-list .metadata {
1415  font-size: 12px;
1416  line-height: 1.4em;
1417  margin-bottom: 18px;
1418}
1419
1420.posts-list .metadata > * {
1421  display: inline-block;
1422}
1423
1424.posts-list .metadata .publishedDate {
1425  margin-right: 2em;
1426}
1427
1428.posts-list .metadata .dt-authors {
1429  display: block;
1430  margin-top: 0.3em;
1431  margin-right: 2em;
1432}
1433
1434.posts-list .dt-tags {
1435  display: block;
1436  line-height: 1em;
1437}
1438
1439.posts-list .dt-tags .dt-tag {
1440  display: inline-block;
1441  color: rgba(0,0,0,0.6);
1442  padding: 0.3em 0.4em;
1443  margin-right: 0.2em;
1444  margin-bottom: 0.4em;
1445  font-size: 60%;
1446  border: 1px solid rgba(0,0,0,0.2);
1447  border-radius: 3px;
1448  text-transform: uppercase;
1449  font-weight: 500;
1450}
1451
1452.posts-list img {
1453  opacity: 1;
1454}
1455
1456.posts-list img[data-src] {
1457  opacity: 0;
1458}
1459
1460.posts-more {
1461  clear: both;
1462}
1463
1464
1465.posts-sidebar {
1466  font-size: 16px;
1467}
1468
1469.posts-sidebar h3 {
1470  font-size: 16px;
1471  margin-top: 0;
1472  margin-bottom: 0.5em;
1473  font-weight: 400;
1474  text-transform: uppercase;
1475}
1476
1477.sidebar-section {
1478  margin-bottom: 30px;
1479}
1480
1481.categories ul {
1482  list-style-type: none;
1483  margin: 0;
1484  padding: 0;
1485}
1486
1487.categories li {
1488  color: rgba(0, 0, 0, 0.8);
1489  margin-bottom: 0;
1490}
1491
1492.categories li>a {
1493  border-bottom: none;
1494}
1495
1496.categories li>a:hover {
1497  border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1498}
1499
1500.categories .active {
1501  font-weight: 600;
1502}
1503
1504.categories .category-count {
1505  color: rgba(0, 0, 0, 0.4);
1506}
1507
1508
1509@media(min-width: 768px) {
1510  .posts-list .post-preview h2 {
1511    font-size: 26px;
1512  }
1513  .posts-list .post-preview .thumbnail {
1514    float: right;
1515    width: 30%;
1516    margin-bottom: 0;
1517  }
1518  .posts-list .post-preview .description {
1519    float: left;
1520    width: 45%;
1521  }
1522  .posts-list .post-preview .metadata {
1523    float: left;
1524    width: 20%;
1525    margin-top: 8px;
1526  }
1527  .posts-list .post-preview p {
1528    margin: 0 0 12px 0;
1529    line-height: 1.5em;
1530    font-size: 16px;
1531  }
1532  .posts-with-sidebar .posts-list {
1533    float: left;
1534    width: 75%;
1535  }
1536  .posts-with-sidebar .posts-sidebar {
1537    float: right;
1538    width: 20%;
1539    margin-top: 60px;
1540    padding-top: 24px;
1541    padding-bottom: 24px;
1542  }
1543}
1544
1545
1546/* Improve display for browsers without grid (IE/Edge <= 15) */
1547
1548.downlevel {
1549  line-height: 1.6em;
1550  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1551  margin: 0;
1552}
1553
1554.downlevel .d-title {
1555  padding-top: 6rem;
1556  padding-bottom: 1.5rem;
1557}
1558
1559.downlevel .d-title h1 {
1560  font-size: 50px;
1561  font-weight: 700;
1562  line-height: 1.1em;
1563  margin: 0 0 0.5rem;
1564}
1565
1566.downlevel .d-title p {
1567  font-weight: 300;
1568  font-size: 1.2rem;
1569  line-height: 1.55em;
1570  margin-top: 0;
1571}
1572
1573.downlevel .d-byline {
1574  padding-top: 0.8em;
1575  padding-bottom: 0.8em;
1576  font-size: 0.8rem;
1577  line-height: 1.8em;
1578}
1579
1580.downlevel .section-separator {
1581  border: none;
1582  border-top: 1px solid rgba(0, 0, 0, 0.1);
1583}
1584
1585.downlevel .d-article {
1586  font-size: 1.06rem;
1587  line-height: 1.7em;
1588  padding-top: 1rem;
1589  padding-bottom: 2rem;
1590}
1591
1592
1593.downlevel .d-appendix {
1594  padding-left: 0;
1595  padding-right: 0;
1596  max-width: none;
1597  font-size: 0.8em;
1598  line-height: 1.7em;
1599  margin-bottom: 0;
1600  color: rgba(0,0,0,0.5);
1601  padding-top: 40px;
1602  padding-bottom: 48px;
1603}
1604
1605.downlevel .footnotes ol {
1606  padding-left: 13px;
1607}
1608
1609.downlevel .base-grid,
1610.downlevel .distill-header,
1611.downlevel .d-title,
1612.downlevel .d-abstract,
1613.downlevel .d-article,
1614.downlevel .d-appendix,
1615.downlevel .distill-appendix,
1616.downlevel .d-byline,
1617.downlevel .d-footnote-list,
1618.downlevel .d-citation-list,
1619.downlevel .distill-footer,
1620.downlevel .appendix-bottom,
1621.downlevel .posts-container {
1622  padding-left: 40px;
1623  padding-right: 40px;
1624}
1625
1626@media(min-width: 768px) {
1627  .downlevel .base-grid,
1628  .downlevel .distill-header,
1629  .downlevel .d-title,
1630  .downlevel .d-abstract,
1631  .downlevel .d-article,
1632  .downlevel .d-appendix,
1633  .downlevel .distill-appendix,
1634  .downlevel .d-byline,
1635  .downlevel .d-footnote-list,
1636  .downlevel .d-citation-list,
1637  .downlevel .distill-footer,
1638  .downlevel .appendix-bottom,
1639  .downlevel .posts-container {
1640  padding-left: 150px;
1641  padding-right: 150px;
1642  max-width: 900px;
1643}
1644}
1645
1646.downlevel pre code {
1647  display: block;
1648  border-left: 2px solid rgba(0, 0, 0, .1);
1649  padding: 0 0 0 20px;
1650  font-size: 14px;
1651}
1652
1653.downlevel code, .downlevel pre {
1654  color: black;
1655  background: none;
1656  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
1657  text-align: left;
1658  white-space: pre;
1659  word-spacing: normal;
1660  word-break: normal;
1661  word-wrap: normal;
1662  line-height: 1.5;
1663
1664  -moz-tab-size: 4;
1665  -o-tab-size: 4;
1666  tab-size: 4;
1667
1668  -webkit-hyphens: none;
1669  -moz-hyphens: none;
1670  -ms-hyphens: none;
1671  hyphens: none;
1672}
1673
1674.downlevel .posts-list .post-preview {
1675  color: inherit;
1676}
1677
1678
1679
1680</style>
1681
1682<script type="application/javascript">
1683
1684function is_downlevel_browser() {
1685  if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"},
1686                                 window.navigator.userAgent)) {
1687    return true;
1688  } else {
1689    return window.load_distill_framework === undefined;
1690  }
1691}
1692
1693// show body when load is complete
1694function on_load_complete() {
1695
1696  // add anchors
1697  if (window.anchors) {
1698    window.anchors.options.placement = 'left';
1699    window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5');
1700  }
1701
1702
1703  // set body to visible
1704  document.body.style.visibility = 'visible';
1705
1706  // force redraw for leaflet widgets
1707  if (window.HTMLWidgets) {
1708    var maps = window.HTMLWidgets.findAll(".leaflet");
1709    $.each(maps, function(i, el) {
1710      var map = this.getMap();
1711      map.invalidateSize();
1712      map.eachLayer(function(layer) {
1713        if (layer instanceof L.TileLayer)
1714          layer.redraw();
1715      });
1716    });
1717  }
1718
1719  // trigger 'shown' so htmlwidgets resize
1720  $('d-article').trigger('shown');
1721}
1722
1723function init_distill() {
1724
1725  init_common();
1726
1727  // create front matter
1728  var front_matter = $('<d-front-matter></d-front-matter>');
1729  $('#distill-front-matter').wrap(front_matter);
1730
1731  // create d-title
1732  $('.d-title').changeElementType('d-title');
1733
1734  // separator
1735  var separator = '<hr class="section-separator" style="clear: both"/>';
1736  // prepend separator above appendix
1737  $('.d-byline').before(separator);
1738  $('.d-article').before(separator);
1739
1740  // create d-byline
1741  var byline = $('<d-byline></d-byline>');
1742  $('.d-byline').replaceWith(byline);
1743
1744  // create d-article
1745  var article = $('<d-article></d-article>');
1746  $('.d-article').wrap(article).children().unwrap();
1747
1748  // move posts container into article
1749  $('.posts-container').appendTo($('d-article'));
1750
1751  // create d-appendix
1752  $('.d-appendix').changeElementType('d-appendix');
1753
1754  // flag indicating that we have appendix items
1755  var appendix = $('.appendix-bottom').children('h3').length > 0;
1756
1757  // replace footnotes with <d-footnote>
1758  $('.footnote-ref').each(function(i, val) {
1759    appendix = true;
1760    var href = $(this).attr('href');
1761    var id = href.replace('#', '');
1762    var fn = $('#' + id);
1763    var fn_p = $('#' + id + '>p');
1764    fn_p.find('.footnote-back').remove();
1765    var text = fn_p.html();
1766    var dtfn = $('<d-footnote></d-footnote>');
1767    dtfn.html(text);
1768    $(this).replaceWith(dtfn);
1769  });
1770  // remove footnotes
1771  $('.footnotes').remove();
1772
1773  // move refs into #references-listing
1774  $('#references-listing').replaceWith($('#refs'));
1775
1776  $('h1.appendix, h2.appendix').each(function(i, val) {
1777    $(this).changeElementType('h3');
1778  });
1779  $('h3.appendix').each(function(i, val) {
1780    var id = $(this).attr('id');
1781    $('.d-contents a[href="#' + id + '"]').parent().remove();
1782    appendix = true;
1783    $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix'));
1784  });
1785
1786  // show d-appendix if we have appendix content
1787  $("d-appendix").css('display', appendix ? 'grid' : 'none');
1788
1789  // localize layout chunks to just output
1790  $('.layout-chunk').each(function(i, val) {
1791
1792    // capture layout
1793    var layout = $(this).attr('data-layout');
1794
1795    // apply layout to markdown level block elements
1796    var elements = $(this).children().not('details, div.sourceCode, pre, script');
1797    elements.each(function(i, el) {
1798      var layout_div = $('<div class="' + layout + '"></div>');
1799      if (layout_div.hasClass('shaded')) {
1800        var shaded_content = $('<div class="shaded-content"></div>');
1801        $(this).wrap(shaded_content);
1802        $(this).parent().wrap(layout_div);
1803      } else {
1804        $(this).wrap(layout_div);
1805      }
1806    });
1807
1808
1809    // unwrap the layout-chunk div
1810    $(this).children().unwrap();
1811  });
1812
1813  // remove code block used to force  highlighting css
1814  $('.distill-force-highlighting-css').parent().remove();
1815
1816  // remove empty line numbers inserted by pandoc when using a
1817  // custom syntax highlighting theme, except when numbering line
1818  // in code chunk
1819  $('pre:not(.numberLines) code.sourceCode a:empty').remove();
1820
1821  // load distill framework
1822  load_distill_framework();
1823
1824  // wait for window.distillRunlevel == 4 to do post processing
1825  function distill_post_process() {
1826
1827    if (!window.distillRunlevel || window.distillRunlevel < 4)
1828      return;
1829
1830    // hide author/affiliations entirely if we have no authors
1831    var front_matter = JSON.parse($("#distill-front-matter").html());
1832    var have_authors = front_matter.authors && front_matter.authors.length > 0;
1833    if (!have_authors)
1834      $('d-byline').addClass('hidden');
1835
1836    // article with toc class
1837    $('.d-contents').parent().addClass('d-article-with-toc');
1838
1839    // strip links that point to #
1840    $('.authors-affiliations').find('a[href="#"]').removeAttr('href');
1841
1842    // add orcid ids
1843    $('.authors-affiliations').find('.author').each(function(i, el) {
1844      var orcid_id = front_matter.authors[i].orcidID;
1845      var author_name = front_matter.authors[i].author
1846      if (orcid_id) {
1847        var a = $('<a></a>');
1848        a.attr('href', 'https://orcid.org/' + orcid_id);
1849        var img = $('<img></img>');
1850        img.addClass('orcid-id');
1851        img.attr('alt', author_name ? 'ORCID ID for ' + author_name : 'ORCID ID');
1852        img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==');
1853        a.append(img);
1854        $(this).append(a);
1855      }
1856    });
1857
1858    // hide elements of author/affiliations grid that have no value
1859    function hide_byline_column(caption) {
1860      $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden');
1861    }
1862
1863    // affiliations
1864    var have_affiliations = false;
1865    for (var i = 0; i<front_matter.authors.length; ++i) {
1866      var author = front_matter.authors[i];
1867      if (author.affiliation !== "&nbsp;") {
1868        have_affiliations = true;
1869        break;
1870      }
1871    }
1872    if (!have_affiliations)
1873      $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden');
1874
1875    // published date
1876    if (!front_matter.publishedDate)
1877      hide_byline_column("Published");
1878
1879    // document object identifier
1880    var doi = $('d-byline').find('h3:contains("DOI")');
1881    var doi_p = doi.next().empty();
1882    if (!front_matter.doi) {
1883      // if we have a citation and valid citationText then link to that
1884      if ($('#citation').length > 0 && front_matter.citationText) {
1885        doi.html('Citation');
1886        $('<a href="#citation"></a>')
1887          .text(front_matter.citationText)
1888          .appendTo(doi_p);
1889      } else {
1890        hide_byline_column("DOI");
1891      }
1892    } else {
1893      $('<a></a>')
1894         .attr('href', "https://doi.org/" + front_matter.doi)
1895         .html(front_matter.doi)
1896         .appendTo(doi_p);
1897    }
1898
1899     // change plural form of authors/affiliations
1900    if (front_matter.authors.length === 1) {
1901      var grid = $('.authors-affiliations');
1902      grid.children('h3:contains("Authors")').text('Author');
1903      grid.children('h3:contains("Affiliations")').text('Affiliation');
1904    }
1905
1906    // remove d-appendix and d-footnote-list local styles
1907    $('d-appendix > style:first-child').remove();
1908    $('d-footnote-list > style:first-child').remove();
1909
1910    // move appendix-bottom entries to the bottom
1911    $('.appendix-bottom').appendTo('d-appendix').children().unwrap();
1912    $('.appendix-bottom').remove();
1913
1914    // hoverable references
1915    $('span.citation[data-cites]').each(function() {
1916      const citeChild = $(this).children()[0]
1917      // Do not process if @xyz has been used without escaping and without bibliography activated
1918      // https://github.com/rstudio/distill/issues/466
1919      if (citeChild === undefined) return true
1920
1921      if (citeChild.nodeName == "D-FOOTNOTE") {
1922        var fn = citeChild
1923        $(this).html(fn.shadowRoot.querySelector("sup"))
1924        $(this).id = fn.id
1925        fn.remove()
1926      }
1927      var refs = $(this).attr('data-cites').split(" ");
1928      var refHtml = refs.map(function(ref) {
1929        // Could use CSS.escape too here, we insure backward compatibility in navigator
1930        return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>";
1931      }).join("\n");
1932      window.tippy(this, {
1933        allowHTML: true,
1934        content: refHtml,
1935        maxWidth: 500,
1936        interactive: true,
1937        interactiveBorder: 10,
1938        theme: 'light-border',
1939        placement: 'bottom-start'
1940      });
1941    });
1942
1943    // fix footnotes in tables (#411)
1944    // replacing broken distill.pub feature
1945    $('table d-footnote').each(function() {
1946      // we replace internal showAtNode methode which is triggered when hovering a footnote
1947      this.hoverBox.showAtNode = function(node) {
1948        // ported from https://github.com/distillpub/template/pull/105/files
1949        calcOffset = function(elem) {
1950            let x = elem.offsetLeft;
1951            let y = elem.offsetTop;
1952            // Traverse upwards until an `absolute` element is found or `elem`
1953            // becomes null.
1954            while (elem = elem.offsetParent && elem.style.position != 'absolute') {
1955                x += elem.offsetLeft;
1956                y += elem.offsetTop;
1957            }
1958
1959            return { left: x, top: y };
1960        }
1961        // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
1962        const bbox = node.getBoundingClientRect();
1963        const offset = calcOffset(node);
1964        this.show([offset.left + bbox.width, offset.top + bbox.height]);
1965      }
1966    })
1967
1968    // clear polling timer
1969    clearInterval(tid);
1970
1971    // show body now that everything is ready
1972    on_load_complete();
1973  }
1974
1975  var tid = setInterval(distill_post_process, 50);
1976  distill_post_process();
1977
1978}
1979
1980function init_downlevel() {
1981
1982  init_common();
1983
1984   // insert hr after d-title
1985  $('.d-title').after($('<hr class="section-separator"/>'));
1986
1987  // check if we have authors
1988  var front_matter = JSON.parse($("#distill-front-matter").html());
1989  var have_authors = front_matter.authors && front_matter.authors.length > 0;
1990
1991  // manage byline/border
1992  if (!have_authors)
1993    $('.d-byline').remove();
1994  $('.d-byline').after($('<hr class="section-separator"/>'));
1995  $('.d-byline a').remove();
1996
1997  // remove toc
1998  $('.d-contents').remove();
1999
2000  // move appendix elements
2001  $('h1.appendix, h2.appendix').each(function(i, val) {
2002    $(this).changeElementType('h3');
2003  });
2004  $('h3.appendix').each(function(i, val) {
2005    $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix'));
2006  });
2007
2008
2009  // inject headers into references and footnotes
2010  var refs_header = $('<h3></h3>');
2011  refs_header.text('References');
2012  $('#refs').prepend(refs_header);
2013
2014  var footnotes_header = $('<h3></h3');
2015  footnotes_header.text('Footnotes');
2016  $('.footnotes').children('hr').first().replaceWith(footnotes_header);
2017
2018  // move appendix-bottom entries to the bottom
2019  $('.appendix-bottom').appendTo('.d-appendix').children().unwrap();
2020  $('.appendix-bottom').remove();
2021
2022  // remove appendix if it's empty
2023  if ($('.d-appendix').children().length === 0)
2024    $('.d-appendix').remove();
2025
2026  // prepend separator above appendix
2027  $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>'));
2028
2029  // trim code
2030  $('pre>code').each(function(i, val) {
2031    $(this).html($.trim($(this).html()));
2032  });
2033
2034  // move posts-container right before article
2035  $('.posts-container').insertBefore($('.d-article'));
2036
2037  $('body').addClass('downlevel');
2038
2039  on_load_complete();
2040}
2041
2042
2043function init_common() {
2044
2045  // jquery plugin to change element types
2046  (function($) {
2047    $.fn.changeElementType = function(newType) {
2048      var attrs = {};
2049
2050      $.each(this[0].attributes, function(idx, attr) {
2051        attrs[attr.nodeName] = attr.nodeValue;
2052      });
2053
2054      this.replaceWith(function() {
2055        return $("<" + newType + "/>", attrs).append($(this).contents());
2056      });
2057    };
2058  })(jQuery);
2059
2060  // prevent underline for linked images
2061  $('a > img').parent().css({'border-bottom' : 'none'});
2062
2063  // mark non-body figures created by knitr chunks as 100% width
2064  $('.layout-chunk').each(function(i, val) {
2065    var figures = $(this).find('img, .html-widget');
2066    // ignore leaflet img layers (#106)
2067    figures = figures.filter(':not(img[class*="leaflet"])')
2068    if ($(this).attr('data-layout') !== "l-body") {
2069      figures.css('width', '100%');
2070    } else {
2071      figures.css('max-width', '100%');
2072      figures.filter("[width]").each(function(i, val) {
2073        var fig = $(this);
2074        fig.css('width', fig.attr('width') + 'px');
2075      });
2076
2077    }
2078  });
2079
2080  // auto-append index.html to post-preview links in file: protocol
2081  // and in rstudio ide preview
2082  $('.post-preview').each(function(i, val) {
2083    if (window.location.protocol === "file:")
2084      $(this).attr('href', $(this).attr('href') + "index.html");
2085  });
2086
2087  // get rid of index.html references in header
2088  if (window.location.protocol !== "file:") {
2089    $('.distill-site-header a[href]').each(function(i,val) {
2090      $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./"));
2091    });
2092  }
2093
2094  // add class to pandoc style tables
2095  $('tr.header').parent('thead').parent('table').addClass('pandoc-table');
2096  $('.kable-table').children('table').addClass('pandoc-table');
2097
2098  // add figcaption style to table captions
2099  $('caption').parent('table').addClass("figcaption");
2100
2101  // initialize posts list
2102  if (window.init_posts_list)
2103    window.init_posts_list();
2104
2105  // implmement disqus comment link
2106  $('.disqus-comment-count').click(function() {
2107    window.headroom_prevent_pin = true;
2108    $('#disqus_thread').toggleClass('hidden');
2109    if (!$('#disqus_thread').hasClass('hidden')) {
2110      var offset = $(this).offset();
2111      $(window).resize();
2112      $('html, body').animate({
2113        scrollTop: offset.top - 35
2114      });
2115    }
2116  });
2117}
2118
2119document.addEventListener('DOMContentLoaded', function() {
2120  if (is_downlevel_browser())
2121    init_downlevel();
2122  else
2123    window.addEventListener('WebComponentsReady', init_distill);
2124});
2125
2126</script>
2126
2127
2128<style type="text/css">
2129/* base variables */
2130
2131/* Edit the CSS properties in this file to create a custom
2132   Distill theme. Only edit values in the right column
2133   for each row; values shown are the CSS defaults.
2134   To return any property to the default,
2135   you may set its value to: unset
2136   All rows must end with a semi-colon.                      */
2137
2138/* Optional: embed custom fonts here with `@import`          */
2139/* This must remain at the top of this file.                 */
2140
2141
2142
2143html {
2144  /*-- Main font sizes --*/
2145  --title-size:      50px;
2146  --body-size:       1.06rem;
2147  --code-size:       14px;
2148  --aside-size:      12px;
2149  --fig-cap-size:    13px;
2150  /*-- Main font colors --*/
2151  --title-color:     #000000;
2152  --header-color:    rgba(0, 0, 0, 0.8);
2153  --body-color:      rgba(0, 0, 0, 0.8);
2154  --aside-color:     rgba(0, 0, 0, 0.6);
2155  --fig-cap-color:   rgba(0, 0, 0, 0.6);
2156  /*-- Specify custom fonts ~~~ must be imported above   --*/
2157  --heading-font:    sans-serif;
2158  --mono-font:       monospace;
2159  --body-font:       sans-serif;
2160  --navbar-font:     sans-serif;  /* websites + blogs only */
2161}
2162
2163/*-- ARTICLE METADATA --*/
2164d-byline {
2165  --heading-size:    0.6rem;
2166  --heading-color:   rgba(0, 0, 0, 0.5);
2167  --body-size:       0.8rem;
2168  --body-color:      rgba(0, 0, 0, 0.8);
2169}
2170
2171/*-- ARTICLE TABLE OF CONTENTS --*/
2172.d-contents {
2173  --heading-size:    18px;
2174  --contents-size:   13px;
2175}
2176
2177/*-- ARTICLE APPENDIX --*/
2178d-appendix {
2179  --heading-size:    15px;
2180  --heading-color:   rgba(0, 0, 0, 0.65);
2181  --text-size:       0.8em;
2182  --text-color:      rgba(0, 0, 0, 0.5);
2183}
2184
2185/*-- WEBSITE HEADER + FOOTER --*/
2186/* These properties only apply to Distill sites and blogs  */
2187
2188.distill-site-header {
2189  --title-size:       18px;
2190  --text-color:       rgba(255, 255, 255, 0.8);
2191  --text-size:        15px;
2192  --hover-color:      white;
2193  --bkgd-color:       #0F2E3D;
2194}
2195
2196.distill-site-footer {
2197  --text-color:       rgba(255, 255, 255, 0.8);
2198  --text-size:        15px;
2199  --hover-color:      white;
2200  --bkgd-color:       #0F2E3D;
2201}
2202
2203/*-- Additional custom styles --*/
2204/* Add any additional CSS rules below                      */
2205</style>
2206<style type="text/css">@import url('https://fonts.googleapis.com/css2?family=Annie+Use+Your+Telescope&family=Fuzzy+Bubbles&family=Shizuru&display=swap');
2207
2208/* Edit the CSS properties in this file to create a custom
2209   Distill theme. Only edit values in the right column
2210   for each row; values shown are the CSS defaults.
2211   To return any property to the default,
2212   you may set its value to: unset
2213   All rows must end with a semi-colon.                      */
2214
2215/* Optional: embed custom fonts here with `@import`          */
2216/* This must remain at the top of this file.                 */
2217
2218
2219  
2220  html {
2221    /*-- Main font sizes --*/
2222    --title-size:      50px;
2223    --text-size:       20px;
2224  /*  --body-size:       1.06rem; */
2225    --code-size:       14px;
2226    --aside-size:      12px;
2227    --fig-cap-size:    13px;
2228    /*-- Main font colors --*/
2229    --title-color:     white;
2230    --header-color:    rgba(0, 0, 0, 0.8);
2231    --body-color:      rgba(0, 0, 0, 0.8);
2232    --aside-color:     rgba(0, 0, 0, 0.6);
2233    --fig-cap-color:   rgba(0, 0, 0, 0.6);
2234    /*-- Specify custom fonts ~~~ must be imported above   --*/
2235    --heading-font:    Atma;
2236    --mono-font:       monospace;
2237    --body-font:       sans-serif;
2238    --navbar-font:     "Annie Use Your Telescope", serif;
2239  }
2240
2241  .distill-site-header {
2242    --title-size:       50px;
2243    --text-color:       #176940;
2244    --text-size:        22px;
2245    --hover-color:      black;
2246    --bkgd-color:       #eeeeee;
2247  }
2248
2249/*-- Additional custom styles --*/
2250  /* Add any additional CSS rules below                      */
2251  
2252.distill-site-nav  { /* shdow line under banner */
2253  border-bottom: 2px solid #DECF40;
2254  -webkit-box-shadow: 1px 1px 18px #4d4d4d;
2255  -moz-box-shadow: 1px 1px 18px #4d4d4d;
2256  box-shadow: 1px 1px 18px #4d4d4d;
2257}
2258
2259.distill-site-header .logo img { /* logo size */
2260   max-height: 50px;
2261   width: auto;
2262   margin-top: 10px;
2263}
2264
2265
2266.posts-list > h1 {
2267  color: black!important; /* prints "Test Blog" */
2268} 
2269
2270
2271p a { /* underlines links */
2272  text-decoration: none;
2273  color: black;
2274  border-bottom: 3px solid #9ae28f;
2275  box-shadow: inset 0 -4px 0 #9ae28f;
2276  background: transparent;
2277  transition: background 150ms ease;
2278  font-style: italic;
2279  font-family: menu;
2280  font-stretch: extra-expanded;
2281}
2282
2283p a:hover { /* makes links go green on hover */
2284  text-decoration: none;
2285  --bg-opacity: 1;
2286  background-color: #9ae28f;
2287  background-color: rgba(154, 226, 143, var(--bg-opacity));
2288}
2289
2290
2291.thumbnail {
2292    padding: 0px!important;
2293    margin: 0px!important;
2294    max-width: 25%!important;
2295    height: 10%!important;
2296    vertical-align: text-top!important;
2297}</style>
2298<style type="text/css">
2299/* base style */
2300
2301/* FONT FAMILIES */
2302
2303:root {
2304  --heading-default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
2305  --mono-default: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
2306  --body-default: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
2307}
2308
2309body,
2310.posts-list .post-preview p,
2311.posts-list .description p {
2312  font-family: var(--body-font), var(--body-default);
2313}
2314
2315h1, h2, h3, h4, h5, h6,
2316.posts-list .post-preview h2,
2317.posts-list .description h2 {
2318  font-family: var(--heading-font), var(--heading-default);
2319}
2320
2321d-article div.sourceCode code,
2322d-article pre code {
2323  font-family: var(--mono-font), var(--mono-default);
2324}
2325
2326
2327/*-- TITLE --*/
2328d-title h1,
2329.posts-list > h1 {
2330  color: var(--title-color, black);
2331}
2332
2333d-title h1 {
2334  font-size: var(--title-size, 50px);
2335}
2336
2337/*-- HEADERS --*/
2338d-article h1,
2339d-article h2,
2340d-article h3,
2341d-article h4,
2342d-article h5,
2343d-article h6 {
2344  color: var(--header-color, rgba(0, 0, 0, 0.8));
2345}
2346
2347/*-- BODY --*/
2348d-article > p,  /* only text inside of <p> tags */
2349d-article > ul, /* lists */
2350d-article > ol {
2351  color: var(--body-color, rgba(0, 0, 0, 0.8));
2352  font-size: var(--body-size, 1.06rem);
2353}
2354
2355
2356/*-- CODE --*/
2357d-article div.sourceCode code,
2358d-article pre code {
2359  font-size: var(--code-size, 14px);
2360}
2361
2362/*-- ASIDE --*/
2363d-article aside {
2364  font-size: var(--aside-size, 12px);
2365  color: var(--aside-color, rgba(0, 0, 0, 0.6));
2366}
2367
2368/*-- FIGURE CAPTIONS --*/
2369figure .caption,
2370figure figcaption,
2371.figure .caption {
2372  font-size: var(--fig-cap-size, 13px);
2373  color: var(--fig-cap-color, rgba(0, 0, 0, 0.6));
2374}
2375
2376/*-- METADATA --*/
2377d-byline h3 {
2378  font-size: var(--heading-size, 0.6rem);
2379  color: var(--heading-color, rgba(0, 0, 0, 0.5));
2380}
2381
2382d-byline {
2383  font-size: var(--body-size, 0.8rem);
2384  color: var(--body-color, rgba(0, 0, 0, 0.8));
2385}
2386
2387d-byline a,
2388d-article d-byline a {
2389  color: var(--body-color, rgba(0, 0, 0, 0.8));
2390}
2391
2392/*-- TABLE OF CONTENTS --*/
2393.d-contents nav h3 {
2394  font-size: var(--heading-size, 18px);
2395}
2396
2397.d-contents nav a {
2398  font-size: var(--contents-size, 13px);
2399}
2400
2401/*-- APPENDIX --*/
2402d-appendix h3 {
2403  font-size: var(--heading-size, 15px);
2404  color: var(--heading-color, rgba(0, 0, 0, 0.65));
2405}
2406
2407d-appendix {
2408  font-size: var(--text-size, 0.8em);
2409  color: var(--text-color, rgba(0, 0, 0, 0.5));
2410}
2411
2412d-appendix d-footnote-list a.footnote-backlink {
2413  color: var(--text-color, rgba(0, 0, 0, 0.5));
2414}
2415
2416/*-- WEBSITE HEADER + FOOTER --*/
2417.distill-site-header .title {
2418  font-size: var(--title-size, 18px);
2419  font-family: var(--navbar-font), var(--heading-default);
2420}
2421
2422.distill-site-header a,
2423.nav-dropdown .nav-dropbtn {
2424  font-family: var(--navbar-font), var(--heading-default);
2425}
2426
2427.nav-dropdown .nav-dropbtn {
2428  color: var(--text-color, rgba(255, 255, 255, 0.8));
2429  font-size: var(--text-size, 15px);
2430}
2431
2432.distill-site-header a:hover,
2433.nav-dropdown:hover .nav-dropbtn {
2434  color: var(--hover-color, white);
2435}
2436
2437.distill-site-header {
2438  font-size: var(--text-size, 15px);
2439  color: var(--text-color, rgba(255, 255, 255, 0.8));
2440  background-color: var(--bkgd-color, #0F2E3D);
2441}
2442
2443.distill-site-footer {
2444  font-size: var(--text-size, 15px);
2445  color: var(--text-color, rgba(255, 255, 255, 0.8));
2446  background-color: var(--bkgd-color, #0F2E3D);
2447}
2448
2449.distill-site-footer a:hover {
2450  color: var(--hover-color, white);
2451}</style>
2452<!--/radix_placeholder_distill-->
2453  
2453<script src="../../site_libs/header-attrs-2.27/header-attrs.js"></script>
2453
2454  
2454<script src="../../site_libs/fitvids-2.1.1/fitvids.min.js"></script>
2454
2455  
2455<script src="../../site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
2455
2456  
2456<script src="../../site_libs/popper-2.6.0/popper.min.js"></script>
2456
2457  <link href="../../site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" />
2458  <link href="../../site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" />
2459  
2459<script src="../../site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2459
2460  
2460<script src="../../site_libs/anchor-4.2.2/anchor.min.js"></script>
2460
2461  
2461<script src="../../site_libs/bowser-1.9.3/bowser.min.js"></script>
2461
2462  
2462<script src="../../site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2462
2463  
2463<script src="../../site_libs/distill-2.2.21/template.v2.js"></script>
2463
2464  <!--radix_placeholder_site_in_header-->
2465<style type="text/css">
2466@import url('https://fonts.googleapis.com/css2?family=Annie+Use+Your+Telescope&family=Fuzzy+Bubbles&family=Shizuru&display=swap');
2467
2468/* Edit the CSS properties in this file to create a custom
2469   Distill theme. Only edit values in the right column
2470   for each row; values shown are the CSS defaults.
2471   To return any property to the default,
2472   you may set its value to: unset
2473   All rows must end with a semi-colon.                      */
2474
2475/* Optional: embed custom fonts here with `@import`          */
2476/* This must remain at the top of this file.                 */
2477
2478
2479  
2480  html {
2481    /*-- Main font sizes --*/
2482    --title-size:      50px;
2483    --text-size:       20px;
2484  /*  --body-size:       1.06rem; */
2485    --code-size:       14px;
2486    --aside-size:      12px;
2487    --fig-cap-size:    13px;
2488    /*-- Main font colors --*/
2489    --title-color:     white;
2490    --header-color:    rgba(0, 0, 0, 0.8);
2491    --body-color:      rgba(0, 0, 0, 0.8);
2492    --aside-color:     rgba(0, 0, 0, 0.6);
2493    --fig-cap-color:   rgba(0, 0, 0, 0.6);
2494    /*-- Specify custom fonts ~~~ must be imported above   --*/
2495    --heading-font:    Atma;
2496    --mono-font:       monospace;
2497    --body-font:       sans-serif;
2498    --navbar-font:     "Annie Use Your Telescope", serif;
2499  }
2500
2501  .distill-site-header {
2502    --title-size:       50px;
2503    --text-color:       #176940;
2504    --text-size:        22px;
2505    --hover-color:      black;
2506    --bkgd-color:       #eeeeee;
2507  }
2508
2509/*-- Additional custom styles --*/
2510  /* Add any additional CSS rules below                      */
2511  
2512.distill-site-nav  { /* shdow line under banner */
2513  border-bottom: 2px solid #DECF40;
2514  -webkit-box-shadow: 1px 1px 18px #4d4d4d;
2515  -moz-box-shadow: 1px 1px 18px #4d4d4d;
2516  box-shadow: 1px 1px 18px #4d4d4d;
2517}
2518
2519.distill-site-header .logo img { /* logo size */
2520   max-height: 50px;
2521   width: auto;
2522   margin-top: 10px;
2523}
2524
2525
2526.posts-list > h1 {
2527  color: black!important; /* prints "Test Blog" */
2528} 
2529
2530
2531p a { /* underlines links */
2532  text-decoration: none;
2533  color: black;
2534  border-bottom: 3px solid #9ae28f;
2535  box-shadow: inset 0 -4px 0 #9ae28f;
2536  background: transparent;
2537  transition: background 150ms ease;
2538  font-style: italic;
2539  font-family: menu;
2540  font-stretch: extra-expanded;
2541}
2542
2543p a:hover { /* makes links go green on hover */
2544  text-decoration: none;
2545  --bg-opacity: 1;
2546  background-color: #9ae28f;
2547  background-color: rgba(154, 226, 143, var(--bg-opacity));
2548}
2549
2550
2551.thumbnail {
2552    padding: 0px!important;
2553    margin: 0px!important;
2554    max-width: 25%!important;
2555    height: 10%!important;
2556    vertical-align: text-top!important;
2557}
2558</style>
2559<!--/radix_placeholder_site_in_header-->
2560
2561
2562</head>
2563
2564<body>
2565
2566<!--radix_placeholder_front_matter-->
2567
2568<script id="distill-front-matter" type="text/json">
2569{"title":"Finding Postcodes using `arcgisgeocode`","description":"Using the arcgiscoder package to find postal codes, making a shiny app using leaflet.","authors":[{"author":"Eugene","authorURL":"https://www.fizzics.ie","affiliation":"&nbsp;","affiliationURL":"#","orcidID":""}],"publishedDate":"2024-06-25T00:00:00.000+01:00","citationText":"Eugene, 2024"}
2570</script>
2570
2571
2572<!--/radix_placeholder_front_matter-->
2573<!--radix_placeholder_navigation_before_body-->
2574<header class="header header--fixed" role="banner">
2575<nav class="distill-site-nav distill-site-header">
2576<div class="nav-left">
2577<a class="logo" href="https://www.fizzics.ie/">
2578<img src="../../images/atlantic.png" alt="Logo"/>
2579</a>
2580<a class='title' href='/'>Euge</a>
2581<a href='/'>Home</a>
2582<a href='/projects'>Projects</a>
2583<a href='/teaching'>Teaching</a>
2584<a href='/talks'>Talks</a>
2585<a href='/publications'>Publications</a>
2586<a href='/resources'>Resources</a>
2587<a href='/about'>About</a>
2588<input id="distill-search" class="nav-search hidden" type="text" placeholder="Search..."/>
2589</div>
2590<div class="nav-right">
2591<a href="https://github.com/eugene100hickey">
2592<i class="fab fa-github" aria-hidden="true"></i>
2593</a>
2594<a href="https://mastodon.social/@eugene100hickey">
2595<i class="fab fa-mastodon" aria-hidden="true"></i>
2596</a>
2597<a href="https://www.linkedin.com/in/eugene100hickey/">
2598<i class="fab fa-linkedin" aria-hidden="true"></i>
2599</a>
2600<a href="https://orcid.org/my-orcid?orcid=0000-0001-9813-9323">
2601<i class="fab fa-orcid" aria-hidden="true"></i>
2602</a>
2603<a href="../../blog.xml">
2604<i class="fa fa-rss" aria-hidden="true"></i>
2605</a>
2606<a href="javascript:void(0);" class="nav-toggle">&#9776;</a>
2607</div>
2608</nav>
2609</header>
2610<!--/radix_placeholder_navigation_before_body-->
2611<!--radix_placeholder_site_before_body-->
2612<!--/radix_placeholder_site_before_body-->
2613
2614<div class="d-title">
2615<h1>Finding Postcodes using arcgisgeocode</h1>
2616
2617<!--radix_placeholder_categories-->
2618<!--/radix_placeholder_categories-->
2619<p><p>Using the arcgiscoder package to find postal codes, making a shiny app using leaflet.</p></p>
2620</div>
2621
2622<div class="d-byline">
2623  Eugene <a href="https://www.fizzics.ie" class="uri">https://www.fizzics.ie</a> 
2624  
2625<br/>2024-06-25
2626</div>
2627
2628<div class="d-article">
2629<p>I’m old fashioned in a lot of ways, one of which is that I like to send postcards when on holidays. This means making sure they make their way to the intended recipients. And while I can usually remember an address, coming up with the corresponding postcode is at best hit-and-miss. There’s no telling how many postcards down the years are still out there drifting through mail-sorting limbo.</p>
2630<p>Then I listened to a presentation by <a href="">Josiah Parry</a> and felt I had a solution to my problem. He introduced a package called <code>arcgisgeocoder</code> he’s been working on, part of the <code>arcgis</code> system. One of its capabilities is to take a geographic location and feed back details about the address, including the postal code. Kind of what I need. Josiah went on to incorporate this into a <code>shiny</code> app using <code>leaflet</code>, something I’m going to copy here. Then, when you scroll around the map and click on the location, it gives you the address and postal code.</p>
2631<p>Let’s see how this works. First, we’ll need some packages:</p>
2632<div class="layout-chunk" data-layout="l-body">
2633<div class="sourceCode">
2634<pre class="sourceCode r"><code class="sourceCode r"><span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://tidyverse.tidyverse.org'>tidyverse</a></span><span class='op'>)</span></span>
2635<span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://r-spatial.github.io/sf/'>sf</a></span><span class='op'>)</span></span>
2636<span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://rstudio.github.io/leaflet/'>leaflet</a></span><span class='op'>)</span></span>
2637<span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://shiny.posit.co/'>shiny</a></span><span class='op'>)</span></span>
2638<span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://rstudio.github.io/bslib/'>bslib</a></span><span class='op'>)</span></span>
2639<span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://r-spatial.github.io/sf/'>sf</a></span><span class='op'>)</span></span>
2640<span><span class='kw'><a href='https://rdrr.io/r/base/library.html'>library</a></span><span class='op'>(</span><span class='va'><a href='https://github.com/r-arcgis/arcgisgeocode'>arcgisgeocode</a></span><span class='op'>)</span></span></code></pre>
2641</div>
2642</div>
2643<p>Then we create our <code>shiny</code> app itself. Note the function <code>reverse_geocode</code> from <code>arcgisgeocode</code>. This does all the heavy lifting. The rest is fairly standard map interaction; displaying a map and capturing the latitude and longitude of a point clicked.</p>
2644<div class="layout-chunk" data-layout="l-body">
2645<div class="sourceCode">
2646<pre class="sourceCode r"><code class="sourceCode r"><span><span class='va'>ui</span> <span class='op'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/pkg/bslib/man/page_fillable.html'>page_fillable</a></span><span class='op'>(</span></span>
2647<span>  <span class='fu'><a href='https://rdrr.io/pkg/bslib/man/card.html'>card</a></span><span class='op'>(</span></span>
2648<span>    <span class='fu'><a href='https://rdrr.io/pkg/bslib/man/card_body.html'>card_title</a></span><span class='op'>(</span><span class='fu'><a href='https://rdrr.io/pkg/shiny/man/textOutput.html'>textOutput</a></span><span class='op'>(</span><span class='st'>"rev_result"</span><span class='op'>)</span><span class='op'>)</span>,</span>
2649<span>    <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/map-shiny.html'>leafletOutput</a></span><span class='op'>(</span><span class='st'>"map"</span>, width <span class='op'>=</span> <span class='st'>"100%"</span>, height <span class='op'>=</span> <span class='st'>"100%"</span><span class='op'>)</span>,</span>
2650<span>  <span class='op'>)</span></span>
2651<span><span class='op'>)</span></span>
2652<span></span>
2653<span><span class='va'>server</span> <span class='op'>&lt;-</span> <span class='kw'>function</span><span class='op'>(</span><span class='va'>input</span>, <span class='va'>output</span>, <span class='va'>session</span><span class='op'>)</span><span class='op'>{</span></span>
2654<span>  <span class='fu'><a href='https://rdrr.io/pkg/shiny/man/observeEvent.html'>observeEvent</a></span><span class='op'>(</span><span class='va'>input</span><span class='op'>$</span><span class='va'>map_click</span>, <span class='op'>{</span></span>
2655<span>    <span class='va'>click</span> <span class='op'>&lt;-</span> <span class='va'>input</span><span class='op'>$</span><span class='va'>map_click</span></span>
2656<span>    <span class='va'>x</span> <span class='op'>&lt;-</span> <span class='va'>click</span><span class='op'>$</span><span class='va'>lng</span></span>
2657<span>    <span class='va'>y</span> <span class='op'>&lt;-</span> <span class='va'>click</span><span class='op'>$</span><span class='va'>lat</span></span>
2658<span>    <span class='va'>loc</span> <span class='op'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/r/base/c.html'>c</a></span><span class='op'>(</span><span class='va'>x</span>, <span class='va'>y</span><span class='op'>)</span></span>
2659<span>    <span class='fu'><a href='https://rdrr.io/r/base/dput.html'>dput</a></span><span class='op'>(</span><span class='va'>loc</span><span class='op'>)</span></span>
2660<span>    </span>
2661<span>    <span class='va'>geocoded</span> <span class='op'>&lt;-</span> <span class='fu'><a href='https://r.esri.com/arcgisgeocode/reference/reverse_geocode.html'>reverse_geocode</a></span><span class='op'>(</span><span class='va'>loc</span><span class='op'>)</span></span>
2662<span>    </span>
2663<span>    <span class='va'>output</span><span class='op'>$</span><span class='va'>rev_result</span> <span class='op'>&lt;-</span> <span class='fu'><a href='https://rdrr.io/pkg/shiny/man/renderPrint.html'>renderText</a></span><span class='op'>(</span></span>
2664<span>
2664      <span class='fu'>glue</span><span class='fu'>::</span><span class='fu'><a href='https://glue.tidyverse.org/reference/glue.html'>glue</a></span><span class='op'>(</span><span class='st'>"{geocoded$long_label}\n{geocoded$postal}"</span><span class='op'>)</span></span>
2665<span>      <span class='op'>)</span></span>
2666<span>    </span>
2667<span>    <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/leafletProxy.html'>leafletProxy</a></span><span class='op'>(</span><span class='st'>"map"</span>, data <span class='op'>=</span> <span class='fu'><a href='https://r-spatial.github.io/sf/reference/st_geometry.html'>st_geometry</a></span><span class='op'>(</span><span class='va'>geocoded</span><span class='op'>)</span><span class='op'>)</span> <span class='op'>|&gt;</span> </span>
2668<span>      <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/remove.html'>clearMarkers</a></span><span class='op'>(</span><span class='op'>)</span> <span class='op'>|&gt;</span> </span>
2669<span>      <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/map-layers.html'>addMarkers</a></span><span class='op'>(</span><span class='op'>)</span></span>
2670<span>  <span class='op'>}</span><span class='op'>)</span></span>
2671<span>  </span>
2672<span>  <span class='va'>output</span><span class='op'>$</span><span class='va'>map</span> <span class='op'>&lt;-</span> <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/map-shiny.html'>renderLeaflet</a></span><span class='op'>(</span><span class='op'>{</span></span>
2673<span>    <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/leaflet.html'>leaflet</a></span><span class='op'>(</span><span class='op'>)</span> <span class='op'>|&gt;</span> </span>
2674<span>      <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/addProviderTiles.html'>addProviderTiles</a></span><span class='op'>(</span><span class='va'>providers</span><span class='op'>$</span><span class='va'>Esri.WorldGrayCanvas</span><span class='op'>)</span> <span class='op'>|&gt;</span> </span>
2675<span>      <span class='fu'><a href='https://rstudio.github.io/leaflet/reference/map-methods.html'>setView</a></span><span class='op'>(</span>lat <span class='op'>=</span> <span class='fl'>53.32041</span>, lng <span class='op'>=</span> <span class='op'>-</span><span class='fl'>6.23956</span>, zoom <span class='op'>=</span> <span class='fl'>14</span><span class='op'>)</span></span>
2676<span>  <span class='op'>}</span><span class='op'>)</span></span>
2677<span><span class='op'>}</span></span>
2678<span></span>
2679<span></span>
2680<span><span class='fu'><a href='https://rdrr.io/pkg/shiny/man/shinyApp.html'>shinyApp</a></span><span class='op'>(</span><span class='va'>ui</span>, <span class='va'>server</span><span class='op'>)</span></span></code></pre>
2681</div>
2682</div>
2683<p>Unfortunately, shinyapps.io can’t handle the <code>arcgiscoder</code> package just yet, so I can’t deploy this app. Yet. But I’ll keep trying to find a way around this.</p>
2684<p>At the moment, shinyapps.io is having trouble working with <code>arcgisgeocoder</code>, otherwise I’d link to a web version of this app. I’ll work on this. For the moment, here is a version based on tidygeocoder that doesn’t quite work as well.</p>
2685<div class="layout-chunk" data-layout="l-body">
2686<div class="shareagain" style="min-width:300px;margin:1em auto;" data-exeternal="1">
2687<iframe src="https://eugene-hickey.shinyapps.io/postal-codes/" width="1600" height="900" style="border:2px solid currentColor;" loading="lazy" allowfullscreen></iframe>
2688<script>fitvids('.shareagain', {players: 'iframe'});</script>
2688
2689</div>
2690</div>
2691<div class="sourceCode" id="cb1"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
2692<!--radix_placeholder_article_footer-->
2693<div class="article-footer">
2694  <p class="social_footer">
2695    <span class="disqus-comments">
2696      <i class="fas fa-comments"></i>
2697      &nbsp;
2698      <span class="disqus-comment-count" data-disqus-identifier="posts/2024-06-25-postcodes-arcgisgeocode/">Comment on this article</span>
2699    </span>
2700    <span class="article-sharing">
2701      Share: &nbsp;
2702      <a href="https://www.linkedin.com/shareArticle?mini=true&amp;url=https%3A%2F%2Fwww.fizzics.ie%2Fposts%2F2024-06-25-postcodes-arcgisgeocode%2F&amp;title=Finding%20Postcodes%20using%20%60arcgisgeocode%60" aria-label="share on linkedin">
2703        <i class="fab fa-linkedin" aria-hidden="true"></i>
2704      </a>
2705    </span>
2706  </p>
2707  
2707<script id="dsq-count-scr" src="https://physics.disqus.com/count.js" async></script>
2707
2708  <div id="disqus_thread" class="hidden"></div>
2709  
2709<script type="text/javascript" cookie-consent="functionality">
2710var disqus_config = function () {
2711  this.page.url = 'https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/';
2712  this.page.identifier = 'posts/2024-06-25-postcodes-arcgisgeocode/';
2713};
2714(function() {
2715  var d = document, s = d.createElement('script');
2716  s.src = 'https://physics.disqus.com/embed.js';
2717  s.setAttribute('data-timestamp', +new Date());
2718  (d.head || d.body).appendChild(s);
2719})();
2720</script>
2720
2721  <p>
2722    <div class="subscribe"><form method='post' action='https://blogtrottr.com'>
2723  <p>Enjoy this blog? Get notified of new posts via email:</p>
2724  <input type='text' name='btr_email' />
2725  <input type='hidden' name='btr_url'
2726         value='https://fizzics.netlify.app/index.xml'/>
2727  <input type='hidden' name='schedule_type' value='0' />
2728  <input type='submit' value='Subscribe' />
2729</form></div>
2730  </p>
2731</div>
2732<!--/radix_placeholder_article_footer-->
2733</div>
2734
2735<div class="d-appendix">
2736</div>
2737
2738
2739<!--radix_placeholder_site_after_body-->
2740<!--/radix_placeholder_site_after_body-->
2741<!--radix_placeholder_appendices-->
2742<div class="appendix-bottom">
2743  <h3 id="updates-and-corrections">Corrections</h3>
2744  <p>If you see mistakes or want to suggest changes, please <a href="https://github.com/eugene100hickey/fizzics/issues/new">create an issue</a> on the source repository.</p>
2745  <h3 id="reuse">Reuse</h3>
2746  <p>Text and figures are licensed under Creative Commons Attribution <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a>. Source code is available at <a href="https://github.com/eugene100hickey/fizzics">https://github.com/eugene100hickey/fizzics</a>, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".</p>
2747  <h3 id="citation">Citation</h3>
2748  <p>For attribution, please cite this work as</p>
2749  <pre class="citation-appendix short">Eugene (2024, June 25). Euge: Finding Postcodes using `arcgisgeocode`. Retrieved from https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/</pre>
2750  <p>BibTeX citation</p>
2751  <pre class="citation-appendix long">@misc{eugene2024finding,
2752  author = {Eugene, },
2753  title = {Euge: Finding Postcodes using `arcgisgeocode`},
2754  url = {https://www.fizzics.ie/posts/2024-06-25-postcodes-arcgisgeocode/},
2755  year = {2024}
2756}</pre>
2757</div>
2758<!--/radix_placeholder_appendices-->
2759<!--radix_placeholder_navigation_after_body-->
2760<!--/radix_placeholder_navigation_after_body-->
2761
2762</body>
2763
2764</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.