@basemaps/landing 6.46.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/README.md +2 -4
  2. package/build/__tests__/config.debug.test.d.ts +0 -1
  3. package/build/__tests__/config.debug.test.js +11 -10
  4. package/build/__tests__/config.debug.test.js.map +1 -1
  5. package/build/__tests__/config.test.d.ts +0 -1
  6. package/build/__tests__/config.test.js +5 -4
  7. package/build/__tests__/config.test.js.map +1 -1
  8. package/build/__tests__/geojson.test.d.ts +0 -1
  9. package/build/__tests__/geojson.test.js +6 -5
  10. package/build/__tests__/geojson.test.js.map +1 -1
  11. package/build/__tests__/map.config.test.d.ts +0 -1
  12. package/build/__tests__/map.config.test.js +66 -65
  13. package/build/__tests__/map.config.test.js.map +1 -1
  14. package/build/__tests__/tile.matrix.test.d.ts +0 -1
  15. package/build/__tests__/tile.matrix.test.js +11 -10
  16. package/build/__tests__/tile.matrix.test.js.map +1 -1
  17. package/build/attribution.d.ts +8 -11
  18. package/build/attribution.js +145 -66
  19. package/build/attribution.js.map +1 -1
  20. package/build/components/copyable.d.ts +1 -2
  21. package/build/components/copyable.js +27 -18
  22. package/build/components/copyable.js.map +1 -1
  23. package/build/components/daterange.d.ts +0 -1
  24. package/build/components/daterange.js +11 -7
  25. package/build/components/daterange.js.map +1 -1
  26. package/build/components/debug.d.ts +13 -2
  27. package/build/components/debug.js +273 -78
  28. package/build/components/debug.js.map +1 -1
  29. package/build/components/layer.switcher.dropdown.d.ts +1 -2
  30. package/build/components/layer.switcher.dropdown.js +43 -29
  31. package/build/components/layer.switcher.dropdown.js.map +1 -1
  32. package/build/components/layout.footer.d.ts +0 -1
  33. package/build/components/layout.footer.js +7 -2
  34. package/build/components/layout.footer.js.map +1 -1
  35. package/build/components/layout.header.d.ts +1 -2
  36. package/build/components/layout.header.js +44 -23
  37. package/build/components/layout.header.js.map +1 -1
  38. package/build/components/link.d.ts +0 -1
  39. package/build/components/link.js +1 -1
  40. package/build/components/link.js.map +1 -1
  41. package/build/components/map.d.ts +14 -4
  42. package/build/components/map.js +221 -84
  43. package/build/components/map.js.map +1 -1
  44. package/build/components/map.switcher.d.ts +1 -2
  45. package/build/components/map.switcher.js +80 -31
  46. package/build/components/map.switcher.js.map +1 -1
  47. package/build/config.d.ts +0 -1
  48. package/build/config.debug.d.ts +6 -1
  49. package/build/config.debug.js +6 -0
  50. package/build/config.debug.js.map +1 -1
  51. package/build/config.js +4 -8
  52. package/build/config.js.map +1 -1
  53. package/build/config.layer.d.ts +31 -2
  54. package/build/config.layer.js +14 -6
  55. package/build/config.layer.js.map +1 -1
  56. package/build/config.map.d.ts +6 -6
  57. package/build/config.map.js +95 -29
  58. package/build/config.map.js.map +1 -1
  59. package/build/debug.map.d.ts +2 -3
  60. package/build/debug.map.js +57 -23
  61. package/build/debug.map.js.map +1 -1
  62. package/build/global.d.ts +3 -3
  63. package/build/index.d.ts +0 -1
  64. package/build/index.js.map +1 -1
  65. package/build/tile.matrix.d.ts +0 -1
  66. package/build/tile.matrix.js +12 -0
  67. package/build/tile.matrix.js.map +1 -1
  68. package/build/url.d.ts +4 -1
  69. package/build/url.js +10 -8
  70. package/build/url.js.map +1 -1
  71. package/build/webp.d.ts +0 -1
  72. package/build/webp.js.map +1 -1
  73. package/dist/docs/404.html +849 -0
  74. package/dist/docs/assets/images/favicon.png +0 -0
  75. package/dist/docs/assets/javascripts/bundle.6c14ae12.min.js +29 -0
  76. package/dist/docs/assets/javascripts/bundle.6c14ae12.min.js.map +7 -0
  77. package/dist/docs/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  78. package/dist/docs/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  79. package/dist/docs/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  80. package/dist/docs/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  81. package/dist/docs/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  82. package/dist/docs/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  83. package/dist/docs/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  84. package/dist/docs/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  85. package/dist/docs/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  86. package/dist/docs/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  87. package/dist/docs/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  88. package/dist/docs/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  89. package/dist/docs/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  90. package/dist/docs/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  91. package/dist/docs/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  92. package/dist/docs/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  93. package/dist/docs/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  94. package/dist/docs/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  95. package/dist/docs/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  96. package/dist/docs/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  97. package/dist/docs/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  98. package/dist/docs/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  99. package/dist/docs/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  100. package/dist/docs/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  101. package/dist/docs/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  102. package/dist/docs/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  103. package/dist/docs/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  104. package/dist/docs/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  105. package/dist/docs/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  106. package/dist/docs/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  107. package/dist/docs/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  108. package/dist/docs/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  109. package/dist/docs/assets/javascripts/lunr/tinyseg.js +206 -0
  110. package/dist/docs/assets/javascripts/lunr/wordcut.js +6708 -0
  111. package/dist/docs/assets/javascripts/swagger-initializer.js +20 -0
  112. package/dist/docs/assets/javascripts/swagger-ui-bundle.js +3 -0
  113. package/dist/docs/assets/javascripts/swagger-ui-bundle.js.map +1 -0
  114. package/dist/docs/assets/javascripts/swagger-ui-es-bundle-core.js +3 -0
  115. package/dist/docs/assets/javascripts/swagger-ui-es-bundle-core.js.map +1 -0
  116. package/dist/docs/assets/javascripts/swagger-ui-es-bundle.js +3 -0
  117. package/dist/docs/assets/javascripts/swagger-ui-es-bundle.js.map +1 -0
  118. package/dist/docs/assets/javascripts/swagger-ui-standalone-preset.js +3 -0
  119. package/dist/docs/assets/javascripts/swagger-ui-standalone-preset.js.map +1 -0
  120. package/dist/docs/assets/javascripts/workers/search.f886a092.min.js +42 -0
  121. package/dist/docs/assets/javascripts/workers/search.f886a092.min.js.map +7 -0
  122. package/dist/docs/assets/stylesheets/main.fad675c6.min.css +1 -0
  123. package/dist/docs/assets/stylesheets/main.fad675c6.min.css.map +1 -0
  124. package/dist/docs/assets/stylesheets/palette.356b1318.min.css +1 -0
  125. package/dist/docs/assets/stylesheets/palette.356b1318.min.css.map +1 -0
  126. package/dist/docs/assets/stylesheets/swagger-ui-dark.css +833 -0
  127. package/dist/docs/assets/stylesheets/swagger-ui.css +3 -0
  128. package/dist/docs/assets/stylesheets/swagger-ui.css.map +1 -0
  129. package/dist/docs/assets/stylesheets/swagger-ui.js +2 -0
  130. package/dist/docs/assets/stylesheets/swagger-ui.js.map +1 -0
  131. package/dist/docs/assets/swagger-ui/oauth2-redirect.html +79 -0
  132. package/dist/docs/configuration/index.html +503 -0
  133. package/dist/docs/deployment/index.html +457 -0
  134. package/dist/docs/developer-guide/index.html +434 -0
  135. package/dist/docs/examples/_overview/index.html +413 -0
  136. package/dist/docs/examples/index.leaflet.xyz.3857.html +38 -0
  137. package/dist/docs/examples/index.maplibre.opacity.3857.html +215 -0
  138. package/dist/docs/examples/index.maplibre.vector.3857.html +45 -0
  139. package/dist/docs/examples/leaflet.xyz.3857/index.html +448 -0
  140. package/dist/docs/examples/maplibre.opacity.3857/index.html +625 -0
  141. package/dist/docs/examples/maplibre.vector.3857/index.html +455 -0
  142. package/dist/docs/index.css +3 -0
  143. package/dist/docs/index.html +623 -0
  144. package/dist/docs/linz-motif.svg +124 -0
  145. package/dist/docs/operator-guide/cog-quality/index.html +608 -0
  146. package/dist/docs/operator-guide/empty-tiles/index.html +513 -0
  147. package/dist/docs/operator-guide/gebco/index.html +479 -0
  148. package/dist/docs/operator-guide/index.html +413 -0
  149. package/dist/docs/operator-guide/quick-start/index.html +611 -0
  150. package/dist/docs/operator-guide/relief-shade/index.html +490 -0
  151. package/dist/docs/operator-guide/static/2023-06-26-gisborne-2023.png +0 -0
  152. package/dist/docs/operator-guide/static/quality__005_006_0_bilinear.webp +0 -0
  153. package/dist/docs/operator-guide/static/quality__005_006_0_lanczos.webp +0 -0
  154. package/dist/docs/operator-guide/static/quality__i6.bilinear.webp +0 -0
  155. package/dist/docs/operator-guide/static/quality__i6.cubic.webp +0 -0
  156. package/dist/docs/operator-guide/static/quality__i6.lanczos.webp +0 -0
  157. package/dist/docs/operator-guide/static/quality__resampling-overview.webp +0 -0
  158. package/dist/docs/operator-guide/static/quick-start__layers.png +0 -0
  159. package/dist/docs/operator-guide/static/relief__aerial.webp +0 -0
  160. package/dist/docs/operator-guide/static/relief__base.webp +0 -0
  161. package/dist/docs/operator-guide/static/relief__darken.webp +0 -0
  162. package/dist/docs/operator-guide/static/relief__lighten.webp +0 -0
  163. package/dist/docs/operator-guide/texture-shade/index.html +537 -0
  164. package/dist/docs/quick-start/index.html +419 -0
  165. package/dist/docs/sitemap.xml +98 -0
  166. package/dist/docs/sitemap.xml.gz +0 -0
  167. package/dist/docs/static/basemaps-service.png +0 -0
  168. package/dist/docs/static/tile-resize.png +0 -0
  169. package/dist/docs/static/workflow-run.png +0 -0
  170. package/dist/docs/user-guide/_get-started/index.html +602 -0
  171. package/dist/docs/user-guide/api-documentation/index.html +409 -0
  172. package/dist/docs/user-guide/api-documentation/swagger-c1884237.html +120 -0
  173. package/dist/docs/user-guide/swagger-api.json +393 -0
  174. package/dist/docs/user-guide/technical-documentation/index.html +930 -0
  175. package/package.json +17 -17
  176. package/CHANGELOG.md +0 -1374
  177. package/build/__tests__/config.debug.test.d.ts.map +0 -1
  178. package/build/__tests__/config.test.d.ts.map +0 -1
  179. package/build/__tests__/geojson.test.d.ts.map +0 -1
  180. package/build/__tests__/map.config.test.d.ts.map +0 -1
  181. package/build/__tests__/tile.matrix.test.d.ts.map +0 -1
  182. package/build/attribution.d.ts.map +0 -1
  183. package/build/components/copyable.d.ts.map +0 -1
  184. package/build/components/daterange.d.ts.map +0 -1
  185. package/build/components/debug.d.ts.map +0 -1
  186. package/build/components/layer.switcher.dropdown.d.ts.map +0 -1
  187. package/build/components/layout.footer.d.ts.map +0 -1
  188. package/build/components/layout.header.d.ts.map +0 -1
  189. package/build/components/link.d.ts.map +0 -1
  190. package/build/components/map.d.ts.map +0 -1
  191. package/build/components/map.switcher.d.ts.map +0 -1
  192. package/build/config.d.ts.map +0 -1
  193. package/build/config.debug.d.ts.map +0 -1
  194. package/build/config.layer.d.ts.map +0 -1
  195. package/build/config.map.d.ts.map +0 -1
  196. package/build/debug.map.d.ts.map +0 -1
  197. package/build/global.d.ts.map +0 -1
  198. package/build/index.d.ts.map +0 -1
  199. package/build/tile.matrix.d.ts.map +0 -1
  200. package/build/url.d.ts.map +0 -1
  201. package/build/webp.d.ts.map +0 -1
@@ -0,0 +1,513 @@
1
+
2
+ <!DOCTYPE html>
3
+
4
+ <html class="no-js" lang="en">
5
+ <head>
6
+ <meta charset="utf-8"/>
7
+ <meta content="width=device-width,initial-scale=1" name="viewport"/>
8
+ <link href="http://localhost:8000/docs/operator-guide/empty-tiles/" rel="canonical"/>
9
+ <link href="../cog-quality/" rel="prev"/>
10
+ <link href="../gebco/" rel="next"/>
11
+ <link href="../../assets/images/favicon.png" rel="icon"/>
12
+ <meta content="mkdocs-1.5.3, mkdocs-material-9.4.10" name="generator"/>
13
+ <title>Sparse Datasets and empty tiles - LINZ Basemaps</title>
14
+ <link href="../../assets/stylesheets/main.fad675c6.min.css" rel="stylesheet"/>
15
+ <link href="../../assets/stylesheets/palette.356b1318.min.css" rel="stylesheet"/>
16
+ <link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
17
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,300i,400,400i,700,700i%7COpen+Sans+Mono:400,400i,700,700i&amp;display=fallback" rel="stylesheet"/>
18
+ <style>:root{--md-text-font:"Open Sans";--md-code-font:"Open Sans Mono"}</style>
19
+ <link href="../../index.css" rel="stylesheet"/>
20
+ <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
21
+ <script id="__analytics">function __md_analytics(){function n(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],n("js",new Date),n("config",""),document.addEventListener("DOMContentLoaded",function(){document.forms.search&&document.forms.search.query.addEventListener("blur",function(){this.value&&n("event","search",{search_term:this.value})}),document$.subscribe(function(){var a=document.forms.feedback;if(void 0!==a)for(var e of a.querySelectorAll("[type=submit]"))e.addEventListener("click",function(e){e.preventDefault();var t=document.location.pathname,e=this.getAttribute("data-md-value");n("event","feedback",{page:t,data:e}),a.firstElementChild.disabled=!0;e=a.querySelector(".md-feedback__note [data-md-value='"+e+"']");e&&(e.hidden=!1)}),a.hidden=!1}),location$.subscribe(function(e){n("config","",{page_path:e.pathname})})});var e=document.createElement("script");e.async=!0,e.src="https://www.googletagmanager.com/gtag/js?id=",document.getElementById("__analytics").insertAdjacentElement("afterEnd",e)}</script>
22
+ <script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
23
+ </head>
24
+ <body data-md-color-accent="indigo" data-md-color-primary="indigo" data-md-color-scheme="default" dir="ltr">
25
+ <script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
26
+ <input autocomplete="off" class="md-toggle" data-md-toggle="drawer" id="__drawer" type="checkbox"/>
27
+ <input autocomplete="off" class="md-toggle" data-md-toggle="search" id="__search" type="checkbox"/>
28
+ <label class="md-overlay" for="__drawer"></label>
29
+ <div data-md-component="skip">
30
+ <a class="md-skip" href="#sparse-datasets-and-empty-tiles">
31
+ Skip to content
32
+ </a>
33
+ </div>
34
+ <div data-md-component="announce">
35
+ </div>
36
+ <header class="md-header md-header--shadow" data-md-component="header">
37
+ <nav aria-label="Header" class="md-header__inner md-grid">
38
+ <a aria-label="LINZ Basemaps" class="md-header__button md-logo" data-md-component="logo" href="../.." title="LINZ Basemaps">
39
+ <img alt="logo" src="../../linz-motif.svg"/>
40
+ </a>
41
+ <label class="md-header__button md-icon" for="__drawer">
42
+ <svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"></path></svg>
43
+ </label>
44
+ <div class="md-header__title" data-md-component="header-title">
45
+ <div class="md-header__ellipsis">
46
+ <div class="md-header__topic">
47
+ <span class="md-ellipsis">
48
+ LINZ Basemaps
49
+ </span>
50
+ </div>
51
+ <div class="md-header__topic" data-md-component="header-topic">
52
+ <span class="md-ellipsis">
53
+
54
+ Sparse Datasets and empty tiles
55
+
56
+ </span>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ <form class="md-header__option" data-md-component="palette">
61
+ <input aria-label="Switch to dark mode" class="md-option" data-md-color-accent="indigo" data-md-color-media="(prefers-color-scheme: light)" data-md-color-primary="indigo" data-md-color-scheme="default" id="__palette_1" name="__palette" type="radio"/>
62
+ <label class="md-header__button md-icon" for="__palette_2" hidden="" title="Switch to dark mode">
63
+ <svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"></path></svg>
64
+ </label>
65
+ <input aria-label="Switch to light mode" class="md-option" data-md-color-accent="indigo" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-primary="indigo" data-md-color-scheme="slate" id="__palette_2" name="__palette" type="radio"/>
66
+ <label class="md-header__button md-icon" for="__palette_1" hidden="" title="Switch to light mode">
67
+ <svg viewbox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"></path></svg>
68
+ </label>
69
+ </form>
70
+ <div class="md-header__source">
71
+ <a class="md-source" data-md-component="source" href="https://github.com/linz/basemaps" title="Go to repository">
72
+ <div class="md-source__icon md-icon">
73
+ <svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
74
+ </div>
75
+ <div class="md-source__repository">
76
+ GitHub
77
+ </div>
78
+ </a>
79
+ </div>
80
+ </nav>
81
+ </header>
82
+ <div class="md-container" data-md-component="container">
83
+ <main class="md-main" data-md-component="main">
84
+ <div class="md-main__inner md-grid">
85
+ <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
86
+ <div class="md-sidebar__scrollwrap">
87
+ <div class="md-sidebar__inner">
88
+ <nav aria-label="Navigation" class="md-nav md-nav--primary" data-md-level="0">
89
+ <label class="md-nav__title" for="__drawer">
90
+ <a aria-label="LINZ Basemaps" class="md-nav__button md-logo" data-md-component="logo" href="../.." title="LINZ Basemaps">
91
+ <img alt="logo" src="../../linz-motif.svg"/>
92
+ </a>
93
+ LINZ Basemaps
94
+ </label>
95
+ <div class="md-nav__source">
96
+ <a class="md-source" data-md-component="source" href="https://github.com/linz/basemaps" title="Go to repository">
97
+ <div class="md-source__icon md-icon">
98
+ <svg viewbox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
99
+ </div>
100
+ <div class="md-source__repository">
101
+ GitHub
102
+ </div>
103
+ </a>
104
+ </div>
105
+ <ul class="md-nav__list" data-md-scrollfix="">
106
+ <li class="md-nav__item">
107
+ <a class="md-nav__link" href="../..">
108
+ <span class="md-ellipsis">
109
+ LINZ Basemaps
110
+ </span>
111
+ </a>
112
+ </li>
113
+ <li class="md-nav__item">
114
+ <a class="md-nav__link" href="../../configuration/">
115
+ <span class="md-ellipsis">
116
+ Configuration
117
+ </span>
118
+ </a>
119
+ </li>
120
+ <li class="md-nav__item">
121
+ <a class="md-nav__link" href="../../deployment/">
122
+ <span class="md-ellipsis">
123
+ Deployment
124
+ </span>
125
+ </a>
126
+ </li>
127
+ <li class="md-nav__item">
128
+ <a class="md-nav__link" href="../../quick-start/">
129
+ <span class="md-ellipsis">
130
+ Quick start guide
131
+ </span>
132
+ </a>
133
+ </li>
134
+ <li class="md-nav__item md-nav__item--nested">
135
+ <input class="md-nav__toggle md-toggle" id="__nav_5" type="checkbox"/>
136
+ <div class="md-nav__link md-nav__container">
137
+ <a class="md-nav__link" href="../../developer-guide/">
138
+ <span class="md-ellipsis">
139
+ Developer guide
140
+ </span>
141
+ </a>
142
+ </div>
143
+ <nav aria-expanded="false" aria-labelledby="__nav_5_label" class="md-nav" data-md-level="1">
144
+ <label class="md-nav__title" for="__nav_5">
145
+ <span class="md-nav__icon md-icon"></span>
146
+ Developer guide
147
+ </label>
148
+ <ul class="md-nav__list" data-md-scrollfix="">
149
+ </ul>
150
+ </nav>
151
+ </li>
152
+ <li class="md-nav__item md-nav__item--nested">
153
+ <input class="md-nav__toggle md-toggle" id="__nav_6" type="checkbox"/>
154
+ <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
155
+ <span class="md-ellipsis">
156
+ Examples
157
+ </span>
158
+ <span class="md-nav__icon md-icon"></span>
159
+ </label>
160
+ <nav aria-expanded="false" aria-labelledby="__nav_6_label" class="md-nav" data-md-level="1">
161
+ <label class="md-nav__title" for="__nav_6">
162
+ <span class="md-nav__icon md-icon"></span>
163
+ Examples
164
+ </label>
165
+ <ul class="md-nav__list" data-md-scrollfix="">
166
+ <li class="md-nav__item">
167
+ <a class="md-nav__link" href="../../examples/_overview/">
168
+ <span class="md-ellipsis">
169
+ Overview
170
+ </span>
171
+ </a>
172
+ </li>
173
+ <li class="md-nav__item">
174
+ <a class="md-nav__link" href="../../examples/leaflet.xyz.3857/">
175
+ <span class="md-ellipsis">
176
+ Leaflet Raster Map
177
+ </span>
178
+ </a>
179
+ </li>
180
+ <li class="md-nav__item">
181
+ <a class="md-nav__link" href="../../examples/maplibre.opacity.3857/">
182
+ <span class="md-ellipsis">
183
+ Maplibre Opacity Slider
184
+ </span>
185
+ </a>
186
+ </li>
187
+ <li class="md-nav__item">
188
+ <a class="md-nav__link" href="../../examples/maplibre.vector.3857/">
189
+ <span class="md-ellipsis">
190
+ Maplibre Vector Map
191
+ </span>
192
+ </a>
193
+ </li>
194
+ </ul>
195
+ </nav>
196
+ </li>
197
+ <li class="md-nav__item md-nav__item--active md-nav__item--nested">
198
+ <input checked="" class="md-nav__toggle md-toggle" id="__nav_7" type="checkbox"/>
199
+ <div class="md-nav__link md-nav__container">
200
+ <a class="md-nav__link" href="../">
201
+ <span class="md-ellipsis">
202
+ Operator guide
203
+ </span>
204
+ </a>
205
+ <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
206
+ <span class="md-nav__icon md-icon"></span>
207
+ </label>
208
+ </div>
209
+ <nav aria-expanded="true" aria-labelledby="__nav_7_label" class="md-nav" data-md-level="1">
210
+ <label class="md-nav__title" for="__nav_7">
211
+ <span class="md-nav__icon md-icon"></span>
212
+ Operator guide
213
+ </label>
214
+ <ul class="md-nav__list" data-md-scrollfix="">
215
+ <li class="md-nav__item">
216
+ <a class="md-nav__link" href="../cog-quality/">
217
+ <span class="md-ellipsis">
218
+ COG Quality
219
+ </span>
220
+ </a>
221
+ </li>
222
+ <li class="md-nav__item md-nav__item--active">
223
+ <input class="md-nav__toggle md-toggle" id="__toc" type="checkbox"/>
224
+ <label class="md-nav__link md-nav__link--active" for="__toc">
225
+ <span class="md-ellipsis">
226
+ Sparse Datasets and empty tiles
227
+ </span>
228
+ <span class="md-nav__icon md-icon"></span>
229
+ </label>
230
+ <a class="md-nav__link md-nav__link--active" href="./">
231
+ <span class="md-ellipsis">
232
+ Sparse Datasets and empty tiles
233
+ </span>
234
+ </a>
235
+ <nav aria-label="Table of contents" class="md-nav md-nav--secondary">
236
+ <label class="md-nav__title" for="__toc">
237
+ <span class="md-nav__icon md-icon"></span>
238
+ Table of contents
239
+ </label>
240
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
241
+ <li class="md-nav__item">
242
+ <a class="md-nav__link" href="#tldr">
243
+ <span class="md-ellipsis">
244
+ TLDR
245
+ </span>
246
+ </a>
247
+ </li>
248
+ </ul>
249
+ </nav>
250
+ </li>
251
+ <li class="md-nav__item">
252
+ <a class="md-nav__link" href="../gebco/">
253
+ <span class="md-ellipsis">
254
+ Gebco re-project to NZTM2000Quad cog file
255
+ </span>
256
+ </a>
257
+ </li>
258
+ <li class="md-nav__item">
259
+ <a class="md-nav__link" href="../quick-start/">
260
+ <span class="md-ellipsis">
261
+ Running LINZ Basemaps - Quick Start
262
+ </span>
263
+ </a>
264
+ </li>
265
+ <li class="md-nav__item">
266
+ <a class="md-nav__link" href="../relief-shade/">
267
+ <span class="md-ellipsis">
268
+ Relief shade
269
+ </span>
270
+ </a>
271
+ </li>
272
+ <li class="md-nav__item">
273
+ <a class="md-nav__link" href="../texture-shade/">
274
+ <span class="md-ellipsis">
275
+ Texture shading
276
+ </span>
277
+ </a>
278
+ </li>
279
+ </ul>
280
+ </nav>
281
+ </li>
282
+ <li class="md-nav__item md-nav__item--nested">
283
+ <input class="md-nav__toggle md-toggle" id="__nav_8" type="checkbox"/>
284
+ <label class="md-nav__link" for="__nav_8" id="__nav_8_label" tabindex="0">
285
+ <span class="md-ellipsis">
286
+ User guide
287
+ </span>
288
+ <span class="md-nav__icon md-icon"></span>
289
+ </label>
290
+ <nav aria-expanded="false" aria-labelledby="__nav_8_label" class="md-nav" data-md-level="1">
291
+ <label class="md-nav__title" for="__nav_8">
292
+ <span class="md-nav__icon md-icon"></span>
293
+ User guide
294
+ </label>
295
+ <ul class="md-nav__list" data-md-scrollfix="">
296
+ <li class="md-nav__item">
297
+ <a class="md-nav__link" href="../../user-guide/_get-started/">
298
+ <span class="md-ellipsis">
299
+ Get started with LINZ Basemaps
300
+ </span>
301
+ </a>
302
+ </li>
303
+ <li class="md-nav__item">
304
+ <a class="md-nav__link" href="../../user-guide/api-documentation/">
305
+ <span class="md-ellipsis">
306
+ API documentation
307
+ </span>
308
+ </a>
309
+ </li>
310
+ <li class="md-nav__item">
311
+ <a class="md-nav__link" href="../../user-guide/technical-documentation/">
312
+ <span class="md-ellipsis">
313
+ Technical documentation and specifications
314
+ </span>
315
+ </a>
316
+ </li>
317
+ </ul>
318
+ </nav>
319
+ </li>
320
+ </ul>
321
+ </nav>
322
+ </div>
323
+ </div>
324
+ </div>
325
+ <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
326
+ <div class="md-sidebar__scrollwrap">
327
+ <div class="md-sidebar__inner">
328
+ <nav aria-label="Table of contents" class="md-nav md-nav--secondary">
329
+ <label class="md-nav__title" for="__toc">
330
+ <span class="md-nav__icon md-icon"></span>
331
+ Table of contents
332
+ </label>
333
+ <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix="">
334
+ <li class="md-nav__item">
335
+ <a class="md-nav__link" href="#tldr">
336
+ <span class="md-ellipsis">
337
+ TLDR
338
+ </span>
339
+ </a>
340
+ </li>
341
+ </ul>
342
+ </nav>
343
+ </div>
344
+ </div>
345
+ </div>
346
+ <div class="md-content" data-md-component="content">
347
+ <article class="md-content__inner md-typeset">
348
+ <h1 id="sparse-datasets-and-empty-tiles">Sparse Datasets and empty tiles</h1>
349
+ <h2 id="tldr">TLDR</h2>
350
+ <p>Basemaps should continue to serve transparent images for areas which do not have any data, for maximum compatibility with clients. Once clients upgrade and fix bugs, either HTTP <code>204 No Content</code> or HTTP <code>200 Ok</code> with a 0 byte payload responses would be preferable.</p>
351
+ <p>Further investigation should also be done on <code>OATiles-hint: empty</code> response headers, as well as converting more clients to TileJSON which allows specify a bounding box to restrict where a client requests tiles from.</p>
352
+ <h1 id="background">Background</h1>
353
+ <p>LINZ has imagery datasets which are very sparse, with large empty areas between smaller sections of valid data, for example <a href="https://basemaps.linz.govt.nz/?i=gisborne-2022-2023-0.1m">Gisborne Urban 2022-2023</a>.</p>
354
+ <p><a href="https://basemaps.linz.govt.nz/?i=gisborne-2022-2023-0.1m"><img alt="Gisborne 2023" src="../static/2023-06-26-gisborne-2023.png"/></a></p>
355
+ <p>Even when providing a bounding box for the imagery, there is still a very large amount of empty space, which results in a large number of empty tiles being served.</p>
356
+ <h1 id="question">Question</h1>
357
+ <p>What is the best way to tell clients that the area they are requesting has no data?</p>
358
+ <h1 id="response-options">Response Options</h1>
359
+ <p>A server can return different responses to clients to signal that there is no data. The following section is specifically for WebP, JPEG and PNG imagery tiles returned from a tile server.</p>
360
+ <p>For Mapbox Vector Tiles, a 0 byte response of either <code>204 No Content</code> or <code>200 Ok</code> works in clients as a 0 byte vector tile is a valid vector tile.</p>
361
+ <h2 id="200-transparent-image">200 Transparent Image</h2>
362
+ <p>Serve a valid image in the request format (e.g. WebP, JPEG, or PNG). For example if a client requests a PNG, serve a fully transparent PNG tile.</p>
363
+ <p>Pros:</p>
364
+ <ul>
365
+ <li>✔️ Supported everywhere</li>
366
+ </ul>
367
+ <p>Cons:</p>
368
+ <ul>
369
+ <li>❌ JPEG does not support transparency, so users get a black image</li>
370
+ <li>❌ Much larger responses: 1KB vs 0 byte payload</li>
371
+ <li>❌ Difficult to know in logs if the tile request was for a valid region</li>
372
+ </ul>
373
+ <h2 id="200-0-byte">200 - 0 Byte</h2>
374
+ <p>Serve HTTP <code>200 Ok</code>, With a <code>content-length: 0</code> response header, which is a 0 byte response</p>
375
+ <p>Pros:</p>
376
+ <ul>
377
+ <li>✔️ Supported in ArcGIS Pro and QGIS</li>
378
+ <li>✔️ Supported by ArcGIS Online, Leaflet, and OpenLayers</li>
379
+ <li>✔️ Supported by <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok">HTTP RFC</a>, which allows 0 byte <code>200 Ok</code> responses as long as the message framing indicates this (via <code>Content-length=0</code> response header</li>
380
+ <li>✔️ Recommended option from OGC Tile API</li>
381
+ </ul>
382
+ <p>Cons:</p>
383
+ <ul>
384
+ <li>❌ Not supported by maplibre/mapbox</li>
385
+ <li>❌ <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok">HTTP RFC</a> suggests that while valid, servers "ought to return 204 No content"</li>
386
+ </ul>
387
+ <h2 id="204-no-content">204 No Content</h2>
388
+ <p>Return HTTP <code>204 No Content</code>, with no body</p>
389
+ <p>Pros:</p>
390
+ <ul>
391
+ <li>✔️ Supported in ArcGIS Pro and QGIS</li>
392
+ <li>✔️ Supported by Leaflet and OpenLayers</li>
393
+ <li>✔️ Supported by <a href="https://www.rfc-editor.org/rfc/rfc9110.html#name-200-ok">HTTP RFC</a>: "server ought to return 204 No content"</li>
394
+ <li>✔️ Recommended option from OGC Tile API</li>
395
+ </ul>
396
+ <p>Cons:</p>
397
+ <ul>
398
+ <li>❌ Not supported by ArcGIS Online</li>
399
+ <li>❌ Not supported by maplibre</li>
400
+ <li>https://github.com/maplibre/maplibre-gl-js/pull/2325</li>
401
+ <li>https://github.com/maplibre/maplibre-gl-js/pull/1586</li>
402
+ <li>❌ Not supported by mapbox gl</li>
403
+ <li>https://github.com/mapbox/mapbox-gl-js/issues/9304</li>
404
+ <li>Not always cached by browser</li>
405
+ </ul>
406
+ <h2 id="404-tile-not-found">404 Tile Not found</h2>
407
+ <p>Return a error state saying the tile is not found</p>
408
+ <ul>
409
+ <li>❌ Is an error state</li>
410
+ <li>❌ Not always cached: browsers / CDNs often do not cache 404 responses</li>
411
+ </ul>
412
+ <h1 id="references">References</h1>
413
+ <ul>
414
+ <li>https://github.com/opengeospatial/ogcapi-tiles/issues/63 - <code>OATiles-hint: empty</code> <code>OATiles-hint: full</code></li>
415
+ <li>https://github.com/opengeospatial/ogcapi-tiles/issues/21</li>
416
+ </ul>
417
+ <p>Simple proxy that converts <code>204 No Content</code> into different results.</p>
418
+ <ul>
419
+ <li>https://github.com/blacha/tile-status-code</li>
420
+ </ul>
421
+ </article>
422
+ </div>
423
+ </div>
424
+ </main>
425
+ <footer class="md-footer">
426
+ <div class="md-footer-meta md-typeset">
427
+ <div class="md-footer-meta__inner md-grid">
428
+ <div class="md-copyright">
429
+ <div class="md-copyright__highlight">
430
+ <a href="https://www.linz.govt.nz/copyright">© CC BY 4.0 LINZ</a>
431
+ </div>
432
+
433
+
434
+ Made with
435
+ <a href="https://squidfunk.github.io/mkdocs-material/" rel="noopener" target="_blank">
436
+ Material for MkDocs
437
+ </a>
438
+ </div>
439
+ </div>
440
+ </div>
441
+ </footer>
442
+ </div>
443
+ <div class="md-dialog" data-md-component="dialog">
444
+ <div class="md-dialog__inner md-typeset"></div>
445
+ </div>
446
+ <script id="__config" type="application/json">{"base": "../..", "features": ["navigation.indexes", "content.code.copy"], "search": "../../assets/javascripts/workers/search.f886a092.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
447
+ <script src="../../assets/javascripts/bundle.6c14ae12.min.js"></script>
448
+ <script>document$.subscribe(() => {
449
+ window.update_swagger_ui_iframe_height = function (id) {
450
+ var iFrameID = document.getElementById(id);
451
+ if (iFrameID) {
452
+ full_height = (iFrameID.contentWindow.document.body.scrollHeight + 80) + "px";
453
+ iFrameID.height = full_height;
454
+ iFrameID.style.height = full_height;
455
+ }
456
+ }
457
+
458
+ let iframe_id_list = []
459
+ var iframes = document.getElementsByClassName("swagger-ui-iframe");
460
+ for (var i = 0; i < iframes.length; i++) {
461
+ iframe_id_list.push(iframes[i].getAttribute("id"))
462
+ }
463
+
464
+ let ticking = true;
465
+
466
+ document.addEventListener('scroll', function(e) {
467
+ if (!ticking) {
468
+ window.requestAnimationFrame(()=> {
469
+ let half_vh = window.innerHeight/2;
470
+ for(var i = 0; i < iframe_id_list.length; i++) {
471
+ let element = document.getElementById(iframe_id_list[i])
472
+ if(element==null){
473
+ return
474
+ }
475
+ let diff = element.getBoundingClientRect().top
476
+ if(element.contentWindow.update_top_val){
477
+ element.contentWindow.update_top_val(half_vh - diff)
478
+ }
479
+ }
480
+ ticking = false;
481
+ });
482
+ ticking = true;
483
+ }
484
+ });
485
+
486
+ const dark_scheme_name = "slate"
487
+
488
+ window.scheme = document.body.getAttribute("data-md-color-scheme")
489
+ const options = {
490
+ attributeFilter: ['data-md-color-scheme'],
491
+ };
492
+ function color_scheme_callback(mutations) {
493
+ for (let mutation of mutations) {
494
+ if (mutation.attributeName === "data-md-color-scheme") {
495
+ scheme = document.body.getAttribute("data-md-color-scheme")
496
+ var iframe_list = document.getElementsByClassName("swagger-ui-iframe")
497
+ for(var i = 0; i < iframe_list.length; i++) {
498
+ var ele = iframe_list.item(i);
499
+ if (ele) {
500
+ if (scheme === dark_scheme_name) {
501
+ ele.contentWindow.enable_dark_mode();
502
+ } else {
503
+ ele.contentWindow.disable_dark_mode();
504
+ }
505
+ }
506
+ }
507
+ }
508
+ }
509
+ }
510
+ observer = new MutationObserver(color_scheme_callback);
511
+ observer.observe(document.body, options);
512
+ })</script></body>
513
+ </html>