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 !== " ") { 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":" ","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">☰</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'><-</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'><-</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'><-</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'><-</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'><-</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'><-</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'><-</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'><-</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'>|></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'>|></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'><-</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'>|></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'>|></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 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: 2702 <a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fwww.fizzics.ie%2Fposts%2F2024-06-25-postcodes-arcgisgeocode%2F&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.