[{"data":1,"prerenderedAt":1689},["ShallowReactive",2],{"page-\u002Fguides\u002Fstac":3},{"id":4,"title":5,"body":6,"description":1682,"extension":1683,"meta":1684,"navigation":1158,"path":1685,"seo":1686,"stem":1687,"__hash__":1688},"content\u002F4.guides\u002F15.stac.md","STAC Catalog Sources",{"type":7,"value":8,"toc":1666},"minimark",[9,21,26,103,106,137,140,147,277,284,287,296,391,394,404,408,415,527,532,574,577,581,587,716,722,726,735,813,920,923,927,941,949,980,985,1054,1057,1061,1064,1212,1215,1481,1485,1505,1553,1557,1560,1593,1597,1608,1612,1662],[10,11,12,13,20],"p",{},"Point tileserver-rs at any ",[14,15,19],"a",{"href":16,"rel":17},"https:\u002F\u002Fstacspec.org\u002F",[18],"nofollow","SpatioTemporal Asset Catalog (STAC)"," API and serve the underlying Cloud-Optimized GeoTIFFs (COGs) as raster tiles — no ingest, no pre-processing, no local copy.",[22,23,25],"h2",{"id":24},"three-modes","Three modes",[27,28,29,45],"table",{},[30,31,32],"thead",{},[33,34,35,39,42],"tr",{},[36,37,38],"th",{},"Mode",[36,40,41],{},"Trigger",[36,43,44],{},"Use when",[46,47,48,67,86],"tbody",{},[33,49,50,57,64],{},[51,52,53],"td",{},[54,55,56],"strong",{},"Static discovery",[51,58,59,63],{},[60,61,62],"code",{},"dynamic = false"," (default)",[51,65,66],{},"One-shot visualisation of the most recent asset. Ingested once on startup.",[33,68,69,74,83],{},[51,70,71],{},[54,72,73],{},"Dynamic per-tile discovery",[51,75,76,79,80],{},[60,77,78],{},"dynamic = true",", ",[60,81,82],{},"max_items = 1",[51,84,85],{},"Always-fresh per-tile lookups; tiles come from whichever single asset intersects.",[33,87,88,93,100],{},[51,89,90],{},[54,91,92],{},"Multi-asset mosaic",[51,94,95,79,97],{},[60,96,78],{},[60,98,99],{},"max_items >= 2",[51,101,102],{},"Composite several overlapping items (cloud-free mosaic, time-stack, multi-sensor).",[10,104,105],{},"Enable the feature at build time:",[107,108,113],"pre",{"className":109,"code":110,"language":111,"meta":112,"style":112},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cargo build --release --features stac\n","bash","",[60,114,115],{"__ignoreMap":112},[116,117,120,124,128,131,134],"span",{"class":118,"line":119},"line",1,[116,121,123],{"class":122},"sBMFI","cargo",[116,125,127],{"class":126},"sfazB"," build",[116,129,130],{"class":126}," --release",[116,132,133],{"class":126}," --features",[116,135,136],{"class":126}," stac\n",[22,138,56],{"id":139},"static-discovery",[10,141,142,143,146],{},"Point at a STAC API collection; tileserver-rs performs a single ",[60,144,145],{},"\u002Fsearch"," on startup, merges the discovered bounding boxes, and serves the first COG asset.",[107,148,152],{"className":149,"code":150,"language":151,"meta":112,"style":112},"language-toml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[[sources]]\nid = \"sentinel2\"\ntype = \"stac\"\npath = \"https:\u002F\u002Fearth-search.aws.element84.com\u002Fv1\"\ncollection = \"sentinel-2-l2a\"\nasset_role = \"visual\"        # or \"thumbnail\" \u002F a specific asset key\ndynamic = false\nmax_items = 25               # cap the catalog scan\n","toml",[60,153,154,166,185,200,215,230,250,262],{"__ignoreMap":112},[116,155,156,160,163],{"class":118,"line":119},[116,157,159],{"class":158},"sMK4o","[[",[116,161,162],{"class":122},"sources",[116,164,165],{"class":158},"]]\n",[116,167,169,173,176,179,182],{"class":118,"line":168},2,[116,170,172],{"class":171},"sTEyZ","id ",[116,174,175],{"class":158},"=",[116,177,178],{"class":158}," \"",[116,180,181],{"class":126},"sentinel2",[116,183,184],{"class":158},"\"\n",[116,186,188,191,193,195,198],{"class":118,"line":187},3,[116,189,190],{"class":171},"type ",[116,192,175],{"class":158},[116,194,178],{"class":158},[116,196,197],{"class":126},"stac",[116,199,184],{"class":158},[116,201,203,206,208,210,213],{"class":118,"line":202},4,[116,204,205],{"class":171},"path ",[116,207,175],{"class":158},[116,209,178],{"class":158},[116,211,212],{"class":126},"https:\u002F\u002Fearth-search.aws.element84.com\u002Fv1",[116,214,184],{"class":158},[116,216,218,221,223,225,228],{"class":118,"line":217},5,[116,219,220],{"class":171},"collection ",[116,222,175],{"class":158},[116,224,178],{"class":158},[116,226,227],{"class":126},"sentinel-2-l2a",[116,229,184],{"class":158},[116,231,233,236,238,240,243,246],{"class":118,"line":232},6,[116,234,235],{"class":171},"asset_role ",[116,237,175],{"class":158},[116,239,178],{"class":158},[116,241,242],{"class":126},"visual",[116,244,245],{"class":158},"\"",[116,247,249],{"class":248},"sHwdD","        # or \"thumbnail\" \u002F a specific asset key\n",[116,251,253,256,258],{"class":118,"line":252},7,[116,254,255],{"class":171},"dynamic ",[116,257,175],{"class":158},[116,259,261],{"class":260},"sfNiH"," false\n",[116,263,265,268,270,274],{"class":118,"line":264},8,[116,266,267],{"class":171},"max_items ",[116,269,175],{"class":158},[116,271,273],{"class":272},"sbssI"," 25",[116,275,276],{"class":248},"               # cap the catalog scan\n",[10,278,279,280,283],{},"Served at ",[60,281,282],{},"GET \u002Fdata\u002Fsentinel2\u002F{z}\u002F{x}\u002F{y}.png",".",[22,285,73],{"id":286},"dynamic-per-tile-discovery",[10,288,289,290,292,293,295],{},"Flip ",[60,291,78],{}," and every incoming tile triggers a fresh STAC ",[60,294,145],{}," with the tile's WGS-84 bounding box:",[107,297,299],{"className":149,"code":298,"language":151,"meta":112,"style":112},"[[sources]]\nid = \"sentinel2-dynamic\"\ntype = \"stac\"\npath = \"https:\u002F\u002Fearth-search.aws.element84.com\u002Fv1\"\ncollection = \"sentinel-2-l2a\"\nasset_role = \"visual\"\ndynamic = true\nmax_items = 1                # single best asset per tile\n",[60,300,301,309,322,334,346,358,370,379],{"__ignoreMap":112},[116,302,303,305,307],{"class":118,"line":119},[116,304,159],{"class":158},[116,306,162],{"class":122},[116,308,165],{"class":158},[116,310,311,313,315,317,320],{"class":118,"line":168},[116,312,172],{"class":171},[116,314,175],{"class":158},[116,316,178],{"class":158},[116,318,319],{"class":126},"sentinel2-dynamic",[116,321,184],{"class":158},[116,323,324,326,328,330,332],{"class":118,"line":187},[116,325,190],{"class":171},[116,327,175],{"class":158},[116,329,178],{"class":158},[116,331,197],{"class":126},[116,333,184],{"class":158},[116,335,336,338,340,342,344],{"class":118,"line":202},[116,337,205],{"class":171},[116,339,175],{"class":158},[116,341,178],{"class":158},[116,343,212],{"class":126},[116,345,184],{"class":158},[116,347,348,350,352,354,356],{"class":118,"line":217},[116,349,220],{"class":171},[116,351,175],{"class":158},[116,353,178],{"class":158},[116,355,227],{"class":126},[116,357,184],{"class":158},[116,359,360,362,364,366,368],{"class":118,"line":232},[116,361,235],{"class":171},[116,363,175],{"class":158},[116,365,178],{"class":158},[116,367,242],{"class":126},[116,369,184],{"class":158},[116,371,372,374,376],{"class":118,"line":252},[116,373,255],{"class":171},[116,375,175],{"class":158},[116,377,378],{"class":260}," true\n",[116,380,381,383,385,388],{"class":118,"line":264},[116,382,267],{"class":171},[116,384,175],{"class":158},[116,386,387],{"class":272}," 1",[116,389,390],{"class":248},"                # single best asset per tile\n",[10,392,393],{},"Tiles always reflect the current catalog state — useful for dashboards that must show the latest imagery without restarts.",[10,395,396,399,400,403],{},[54,397,398],{},"Cost:"," one STAC API call + one COG range-read per unique tile. Pair with a global cache (see ",[60,401,402],{},"[cache]"," config) to amortise hot-path cost.",[22,405,407],{"id":406},"multi-asset-mosaic-compositing","Multi-asset mosaic compositing",[10,409,410,411,414],{},"Bump ",[60,412,413],{},"max_items"," to fetch multiple candidate items and composite them in-memory:",[107,416,418],{"className":149,"code":417,"language":151,"meta":112,"style":112},"[[sources]]\nid = \"sentinel2-mosaic\"\ntype = \"stac\"\npath = \"https:\u002F\u002Fearth-search.aws.element84.com\u002Fv1\"\ncollection = \"sentinel-2-l2a\"\nasset_role = \"visual\"\ndynamic = true\nmax_items = 5                # top 5 candidates, composited\npixel_selection = \"first\"    # default; see below\n",[60,419,420,428,441,453,465,477,489,497,509],{"__ignoreMap":112},[116,421,422,424,426],{"class":118,"line":119},[116,423,159],{"class":158},[116,425,162],{"class":122},[116,427,165],{"class":158},[116,429,430,432,434,436,439],{"class":118,"line":168},[116,431,172],{"class":171},[116,433,175],{"class":158},[116,435,178],{"class":158},[116,437,438],{"class":126},"sentinel2-mosaic",[116,440,184],{"class":158},[116,442,443,445,447,449,451],{"class":118,"line":187},[116,444,190],{"class":171},[116,446,175],{"class":158},[116,448,178],{"class":158},[116,450,197],{"class":126},[116,452,184],{"class":158},[116,454,455,457,459,461,463],{"class":118,"line":202},[116,456,205],{"class":171},[116,458,175],{"class":158},[116,460,178],{"class":158},[116,462,212],{"class":126},[116,464,184],{"class":158},[116,466,467,469,471,473,475],{"class":118,"line":217},[116,468,220],{"class":171},[116,470,175],{"class":158},[116,472,178],{"class":158},[116,474,227],{"class":126},[116,476,184],{"class":158},[116,478,479,481,483,485,487],{"class":118,"line":232},[116,480,235],{"class":171},[116,482,175],{"class":158},[116,484,178],{"class":158},[116,486,242],{"class":126},[116,488,184],{"class":158},[116,490,491,493,495],{"class":118,"line":252},[116,492,255],{"class":171},[116,494,175],{"class":158},[116,496,378],{"class":260},[116,498,499,501,503,506],{"class":118,"line":264},[116,500,267],{"class":171},[116,502,175],{"class":158},[116,504,505],{"class":272}," 5",[116,507,508],{"class":248},"                # top 5 candidates, composited\n",[116,510,512,515,517,519,522,524],{"class":118,"line":511},9,[116,513,514],{"class":171},"pixel_selection ",[116,516,175],{"class":158},[116,518,178],{"class":158},[116,520,521],{"class":126},"first",[116,523,245],{"class":158},[116,525,526],{"class":248},"    # default; see below\n",[10,528,529],{},[54,530,531],{},"Semantics:",[533,534,535,545,563,571],"ul",{},[536,537,538,539,541,542,544],"li",{},"STAC ",[60,540,145],{}," is asked for up to ",[60,543,413],{}," intersecting items; results come back ranked (newest first, least cloud first — however the API sorts).",[536,546,547,548,551,552,555,556,559,560,283],{},"All candidates render ",[54,549,550],{},"concurrently"," via ",[60,553,554],{},"futures::future::join_all",", so cold-cache latency is ",[60,557,558],{},"max(per-asset)"," instead of ",[60,561,562],{},"sum(per-asset)",[536,564,565,566,570],{},"The configured ",[14,567,569],{"href":568},"#pixel-selection","pixel-selection method"," reduces the stack of RGBA layers into a single tile.",[536,572,573],{},"Any single failed COG is logged and skipped — one bad asset does not blank the tile.",[10,575,576],{},"The result is a seamless cloud-free-ish mosaic without any preprocessing step.",[22,578,580],{"id":579},"pixel-selection","Pixel selection",[10,582,583,586],{},[60,584,585],{},"pixel_selection"," chooses how the per-asset renders combine into the final tile. Names match rio-tiler's mosaic methods so configs are interchangeable with titiler.",[27,588,589,602],{},[30,590,591],{},[33,592,593,596,599],{},[36,594,595],{},"Value",[36,597,598],{},"Behaviour",[36,600,601],{},"Short-circuits?",[46,603,604,621,634,646,658,672,684,696],{},[33,605,606,615,618],{},[51,607,608,610,611],{},[60,609,521],{}," ",[612,613,614],"em",{},"(default)",[51,616,617],{},"Highest-priority valid pixel wins; lower-priority assets fill in where the canvas is masked.",[51,619,620],{},"Yes — stops fetching once the tile is fully opaque.",[33,622,623,628,631],{},[51,624,625],{},[60,626,627],{},"highest",[51,629,630],{},"Per-pixel maximum across all valid inputs. Useful for snow\u002Fwater glare.",[51,632,633],{},"No",[33,635,636,641,644],{},[51,637,638],{},[60,639,640],{},"lowest",[51,642,643],{},"Per-pixel minimum. Useful for deep-shadow emphasis.",[51,645,633],{},[33,647,648,653,656],{},[51,649,650],{},[60,651,652],{},"mean",[51,654,655],{},"Per-pixel arithmetic mean over valid inputs.",[51,657,633],{},[33,659,660,665,670],{},[51,661,662],{},[60,663,664],{},"median",[51,666,667,668,283],{},"Per-pixel exact median — more robust to outliers than ",[60,669,652],{},[51,671,633],{},[33,673,674,679,682],{},[51,675,676],{},[60,677,678],{},"stdev",[51,680,681],{},"Per-pixel standard deviation — useful for change detection.",[51,683,633],{},[33,685,686,691,694],{},[51,687,688],{},[60,689,690],{},"count",[51,692,693],{},"Encode the per-pixel count of valid contributions (debug\u002FQA).",[51,695,633],{},[33,697,698,703,713],{},[51,699,700],{},[60,701,702],{},"lowest_cloud_cover",[51,704,705,706,709,710,712],{},"Sort candidates by ",[60,707,708],{},"eo:cloud_cover"," ascending before feeding, then run the ",[60,711,521],{}," reduction. Clearest-sky asset wins on top.",[51,714,715],{},"Yes",[10,717,718,719,721],{},"Assets that lack ",[60,720,708],{}," metadata sort to the end of the priority list and are treated as worst-case (∞ cloud cover), so any explicitly-clear asset always beats an unlabelled one.",[22,723,725],{"id":724},"resampling","Resampling",[10,727,728,730,731,734],{},[60,729,724],{}," controls how source COGs are rescaled to the 256×256 Web Mercator output grid. Defaults to ",[60,732,733],{},"bilinear","; matters most when a band's native resolution differs from the served tile size (e.g. Sentinel-2 10 m → 256×256 at zoom 13 needs downsampling).",[107,736,738],{"className":149,"code":737,"language":151,"meta":112,"style":112},"[[sources]]\nid = \"sentinel2\"\ntype = \"stac\"\npath = \"https:\u002F\u002Fearth-search.aws.element84.com\u002Fv1\"\ncollection = \"sentinel-2-l2a\"\nresampling = \"cubic\"          # sharper than bilinear for continuous imagery\n",[60,739,740,748,760,772,784,796],{"__ignoreMap":112},[116,741,742,744,746],{"class":118,"line":119},[116,743,159],{"class":158},[116,745,162],{"class":122},[116,747,165],{"class":158},[116,749,750,752,754,756,758],{"class":118,"line":168},[116,751,172],{"class":171},[116,753,175],{"class":158},[116,755,178],{"class":158},[116,757,181],{"class":126},[116,759,184],{"class":158},[116,761,762,764,766,768,770],{"class":118,"line":187},[116,763,190],{"class":171},[116,765,175],{"class":158},[116,767,178],{"class":158},[116,769,197],{"class":126},[116,771,184],{"class":158},[116,773,774,776,778,780,782],{"class":118,"line":202},[116,775,205],{"class":171},[116,777,175],{"class":158},[116,779,178],{"class":158},[116,781,212],{"class":126},[116,783,184],{"class":158},[116,785,786,788,790,792,794],{"class":118,"line":217},[116,787,220],{"class":171},[116,789,175],{"class":158},[116,791,178],{"class":158},[116,793,227],{"class":126},[116,795,184],{"class":158},[116,797,798,801,803,805,808,810],{"class":118,"line":232},[116,799,800],{"class":171},"resampling ",[116,802,175],{"class":158},[116,804,178],{"class":158},[116,806,807],{"class":126},"cubic",[116,809,245],{"class":158},[116,811,812],{"class":248},"          # sharper than bilinear for continuous imagery\n",[27,814,815,827],{},[30,816,817],{},[33,818,819,821,824],{},[36,820,595],{},[36,822,823],{},"Source pixels",[36,825,826],{},"When to use",[46,828,829,842,856,868,881,894,907],{},[33,830,831,836,839],{},[51,832,833],{},[60,834,835],{},"nearest",[51,837,838],{},"1",[51,840,841],{},"Classified\u002Fcategorical rasters, colourmap-indexed bands.",[33,843,844,850,853],{},[51,845,846,610,848],{},[60,847,733],{},[612,849,614],{},[51,851,852],{},"2×2",[51,854,855],{},"Continuous imagery; balanced quality\u002Fspeed.",[33,857,858,862,865],{},[51,859,860],{},[60,861,807],{},[51,863,864],{},"4×4",[51,866,867],{},"Sharper downsampling, moderate CPU cost.",[33,869,870,875,878],{},[51,871,872],{},[60,873,874],{},"cubicspline",[51,876,877],{},"4×4 smoothed",[51,879,880],{},"Softer edges; good for elevation.",[33,882,883,888,891],{},[51,884,885],{},[60,886,887],{},"lanczos",[51,889,890],{},"6×6 windowed sinc",[51,892,893],{},"Best quality, highest CPU.",[33,895,896,901,904],{},[51,897,898],{},[60,899,900],{},"average",[51,902,903],{},"block",[51,905,906],{},"Heavy downsampling; anti-aliases.",[33,908,909,914,917],{},[51,910,911],{},[60,912,913],{},"mode",[51,915,916],{},"most-frequent",[51,918,919],{},"Categorical data at low zooms.",[10,921,922],{},"Sentinel-2 cross-resolution mosaics (10 m RGB + 20 m SWIR) go through the same resampler; GDAL handles the per-band rescaling automatically.",[22,924,926],{"id":925},"band-math","Band math",[10,928,929,930,933,934,79,937,940],{},"Append ",[60,931,932],{},"?expression=\u003Cformula>"," to any raster tile URL to evaluate a band-math expression pixel-by-pixel before the tile is encoded. Band references use ",[60,935,936],{},"b1",[60,938,939],{},"b2",", ... (1-based) and map to the source's native band order.",[107,942,947],{"className":943,"code":945,"language":946},[944],"language-text","GET \u002Fdata\u002Fsentinel2\u002F{z}\u002F{x}\u002F{y}.png?expression=(b2-b1)\u002F(b2+b1)\n","text",[60,948,945],{"__ignoreMap":112},[10,950,951,952,955,956,79,959,79,962,79,965,79,968,971,972,975,976,979],{},"The built-in parser supports arithmetic (",[60,953,954],{},"+ - * \u002F ^","), common functions (",[60,957,958],{},"sin",[60,960,961],{},"cos",[60,963,964],{},"log",[60,966,967],{},"exp",[60,969,970],{},"sqrt",", etc.) and parentheses — anything rio-tiler \u002F titiler would accept via ",[60,973,974],{},"numexpr",". Missing or out-of-range band references (e.g. ",[60,977,978],{},"b99"," on a 3-band raster) return the original tile unchanged with a WARN-level log, so a broken expression never blanks the map.",[981,982,984],"h3",{"id":983},"example-indices","Example indices",[27,986,987,1000],{},[30,988,989],{},[33,990,991,994,997],{},[36,992,993],{},"Name",[36,995,996],{},"Expression",[36,998,999],{},"Notes",[46,1001,1002,1015,1028,1041],{},[33,1003,1004,1007,1012],{},[51,1005,1006],{},"NDVI",[51,1008,1009],{},[60,1010,1011],{},"(b2-b1)\u002F(b2+b1)",[51,1013,1014],{},"red=b1, NIR=b2",[33,1016,1017,1020,1025],{},[51,1018,1019],{},"NDWI",[51,1021,1022],{},[60,1023,1024],{},"(b1-b2)\u002F(b1+b2)",[51,1026,1027],{},"green=b1, NIR=b2",[33,1029,1030,1033,1038],{},[51,1031,1032],{},"SAVI (L=0.5)",[51,1034,1035],{},[60,1036,1037],{},"((b2-b1)\u002F(b2+b1+0.5))*1.5",[51,1039,1040],{},"soil-adjusted",[33,1042,1043,1046,1051],{},[51,1044,1045],{},"Simple ratio",[51,1047,1048],{},[60,1049,1050],{},"b2\u002Fb1",[51,1052,1053],{},"quick contrast boost",[10,1055,1056],{},"Output is always a single-band greyscale PNG; pair with a colourmap-indexed MapLibre raster layer if you want false-colour visualisation.",[22,1058,1060],{"id":1059},"element84-earth-search-quick-example","Element84 Earth Search quick example",[10,1062,1063],{},"A fully working config for global Sentinel-2 L2A imagery via Element84's public API:",[107,1065,1067],{"className":149,"code":1066,"language":151,"meta":112,"style":112},"[[sources]]\nid = \"sentinel2\"\ntype = \"stac\"\npath = \"https:\u002F\u002Fearth-search.aws.element84.com\u002Fv1\"\ncollection = \"sentinel-2-l2a\"\nasset_role = \"visual\"\ndynamic = true\nmax_items = 5\n\n[[styles]]\nid = \"sentinel2\"\npath = \".\u002Fdata\u002Fstyles\u002Fsentinel2\u002Fstyle.json\"\nname = \"Sentinel-2 L2A\"\n",[60,1068,1069,1077,1089,1101,1113,1125,1137,1145,1154,1160,1170,1183,1197],{"__ignoreMap":112},[116,1070,1071,1073,1075],{"class":118,"line":119},[116,1072,159],{"class":158},[116,1074,162],{"class":122},[116,1076,165],{"class":158},[116,1078,1079,1081,1083,1085,1087],{"class":118,"line":168},[116,1080,172],{"class":171},[116,1082,175],{"class":158},[116,1084,178],{"class":158},[116,1086,181],{"class":126},[116,1088,184],{"class":158},[116,1090,1091,1093,1095,1097,1099],{"class":118,"line":187},[116,1092,190],{"class":171},[116,1094,175],{"class":158},[116,1096,178],{"class":158},[116,1098,197],{"class":126},[116,1100,184],{"class":158},[116,1102,1103,1105,1107,1109,1111],{"class":118,"line":202},[116,1104,205],{"class":171},[116,1106,175],{"class":158},[116,1108,178],{"class":158},[116,1110,212],{"class":126},[116,1112,184],{"class":158},[116,1114,1115,1117,1119,1121,1123],{"class":118,"line":217},[116,1116,220],{"class":171},[116,1118,175],{"class":158},[116,1120,178],{"class":158},[116,1122,227],{"class":126},[116,1124,184],{"class":158},[116,1126,1127,1129,1131,1133,1135],{"class":118,"line":232},[116,1128,235],{"class":171},[116,1130,175],{"class":158},[116,1132,178],{"class":158},[116,1134,242],{"class":126},[116,1136,184],{"class":158},[116,1138,1139,1141,1143],{"class":118,"line":252},[116,1140,255],{"class":171},[116,1142,175],{"class":158},[116,1144,378],{"class":260},[116,1146,1147,1149,1151],{"class":118,"line":264},[116,1148,267],{"class":171},[116,1150,175],{"class":158},[116,1152,1153],{"class":272}," 5\n",[116,1155,1156],{"class":118,"line":511},[116,1157,1159],{"emptyLinePlaceholder":1158},true,"\n",[116,1161,1163,1165,1168],{"class":118,"line":1162},10,[116,1164,159],{"class":158},[116,1166,1167],{"class":122},"styles",[116,1169,165],{"class":158},[116,1171,1173,1175,1177,1179,1181],{"class":118,"line":1172},11,[116,1174,172],{"class":171},[116,1176,175],{"class":158},[116,1178,178],{"class":158},[116,1180,181],{"class":126},[116,1182,184],{"class":158},[116,1184,1186,1188,1190,1192,1195],{"class":118,"line":1185},12,[116,1187,205],{"class":171},[116,1189,175],{"class":158},[116,1191,178],{"class":158},[116,1193,1194],{"class":126},".\u002Fdata\u002Fstyles\u002Fsentinel2\u002Fstyle.json",[116,1196,184],{"class":158},[116,1198,1200,1203,1205,1207,1210],{"class":118,"line":1199},13,[116,1201,1202],{"class":171},"name ",[116,1204,175],{"class":158},[116,1206,178],{"class":158},[116,1208,1209],{"class":126},"Sentinel-2 L2A",[116,1211,184],{"class":158},[10,1213,1214],{},"Style JSON references the raster source:",[107,1216,1220],{"className":1217,"code":1218,"language":1219,"meta":112,"style":112},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"version\": 8,\n  \"sources\": {\n    \"sentinel2\": { \"type\": \"raster\", \"url\": \"\u002Fdata\u002Fsentinel2.json\", \"tileSize\": 256 }\n  },\n  \"layers\": [\n    { \"id\": \"bg\", \"type\": \"background\", \"paint\": { \"background-color\": \"#000\" } },\n    { \"id\": \"sentinel2\", \"type\": \"raster\", \"source\": \"sentinel2\" }\n  ]\n}\n","json",[60,1221,1222,1227,1247,1260,1326,1331,1345,1418,1471,1476],{"__ignoreMap":112},[116,1223,1224],{"class":118,"line":119},[116,1225,1226],{"class":158},"{\n",[116,1228,1229,1232,1236,1238,1241,1244],{"class":118,"line":168},[116,1230,1231],{"class":158},"  \"",[116,1233,1235],{"class":1234},"spNyl","version",[116,1237,245],{"class":158},[116,1239,1240],{"class":158},":",[116,1242,1243],{"class":272}," 8",[116,1245,1246],{"class":158},",\n",[116,1248,1249,1251,1253,1255,1257],{"class":118,"line":187},[116,1250,1231],{"class":158},[116,1252,162],{"class":1234},[116,1254,245],{"class":158},[116,1256,1240],{"class":158},[116,1258,1259],{"class":158}," {\n",[116,1261,1262,1265,1267,1269,1271,1274,1276,1279,1281,1283,1285,1288,1290,1293,1295,1298,1300,1302,1304,1307,1309,1311,1313,1316,1318,1320,1323],{"class":118,"line":202},[116,1263,1264],{"class":158},"    \"",[116,1266,181],{"class":122},[116,1268,245],{"class":158},[116,1270,1240],{"class":158},[116,1272,1273],{"class":158}," {",[116,1275,178],{"class":158},[116,1277,1278],{"class":272},"type",[116,1280,245],{"class":158},[116,1282,1240],{"class":158},[116,1284,178],{"class":158},[116,1286,1287],{"class":126},"raster",[116,1289,245],{"class":158},[116,1291,1292],{"class":158},",",[116,1294,178],{"class":158},[116,1296,1297],{"class":272},"url",[116,1299,245],{"class":158},[116,1301,1240],{"class":158},[116,1303,178],{"class":158},[116,1305,1306],{"class":126},"\u002Fdata\u002Fsentinel2.json",[116,1308,245],{"class":158},[116,1310,1292],{"class":158},[116,1312,178],{"class":158},[116,1314,1315],{"class":272},"tileSize",[116,1317,245],{"class":158},[116,1319,1240],{"class":158},[116,1321,1322],{"class":272}," 256",[116,1324,1325],{"class":158}," }\n",[116,1327,1328],{"class":118,"line":217},[116,1329,1330],{"class":158},"  },\n",[116,1332,1333,1335,1338,1340,1342],{"class":118,"line":232},[116,1334,1231],{"class":158},[116,1336,1337],{"class":1234},"layers",[116,1339,245],{"class":158},[116,1341,1240],{"class":158},[116,1343,1344],{"class":158}," [\n",[116,1346,1347,1350,1352,1355,1357,1359,1361,1364,1366,1368,1370,1372,1374,1376,1378,1381,1383,1385,1387,1390,1392,1394,1396,1398,1401,1403,1405,1407,1410,1412,1415],{"class":118,"line":252},[116,1348,1349],{"class":158},"    {",[116,1351,178],{"class":158},[116,1353,1354],{"class":122},"id",[116,1356,245],{"class":158},[116,1358,1240],{"class":158},[116,1360,178],{"class":158},[116,1362,1363],{"class":126},"bg",[116,1365,245],{"class":158},[116,1367,1292],{"class":158},[116,1369,178],{"class":158},[116,1371,1278],{"class":122},[116,1373,245],{"class":158},[116,1375,1240],{"class":158},[116,1377,178],{"class":158},[116,1379,1380],{"class":126},"background",[116,1382,245],{"class":158},[116,1384,1292],{"class":158},[116,1386,178],{"class":158},[116,1388,1389],{"class":122},"paint",[116,1391,245],{"class":158},[116,1393,1240],{"class":158},[116,1395,1273],{"class":158},[116,1397,178],{"class":158},[116,1399,1400],{"class":272},"background-color",[116,1402,245],{"class":158},[116,1404,1240],{"class":158},[116,1406,178],{"class":158},[116,1408,1409],{"class":126},"#000",[116,1411,245],{"class":158},[116,1413,1414],{"class":158}," }",[116,1416,1417],{"class":158}," },\n",[116,1419,1420,1422,1424,1426,1428,1430,1432,1434,1436,1438,1440,1442,1444,1446,1448,1450,1452,1454,1456,1459,1461,1463,1465,1467,1469],{"class":118,"line":264},[116,1421,1349],{"class":158},[116,1423,178],{"class":158},[116,1425,1354],{"class":122},[116,1427,245],{"class":158},[116,1429,1240],{"class":158},[116,1431,178],{"class":158},[116,1433,181],{"class":126},[116,1435,245],{"class":158},[116,1437,1292],{"class":158},[116,1439,178],{"class":158},[116,1441,1278],{"class":122},[116,1443,245],{"class":158},[116,1445,1240],{"class":158},[116,1447,178],{"class":158},[116,1449,1287],{"class":126},[116,1451,245],{"class":158},[116,1453,1292],{"class":158},[116,1455,178],{"class":158},[116,1457,1458],{"class":122},"source",[116,1460,245],{"class":158},[116,1462,1240],{"class":158},[116,1464,178],{"class":158},[116,1466,181],{"class":126},[116,1468,245],{"class":158},[116,1470,1325],{"class":158},[116,1472,1473],{"class":118,"line":511},[116,1474,1475],{"class":158},"  ]\n",[116,1477,1478],{"class":118,"line":1162},[116,1479,1480],{"class":158},"}\n",[22,1482,1484],{"id":1483},"supported-stac-catalogs","Supported STAC catalogs",[10,1486,1487,1488,1490,1491,1494,1495,79,1498,1501,1502,1240],{},"Any STAC API that implements the ",[60,1489,145],{}," endpoint (STAC API v1.0+) with a ",[60,1492,1493],{},"POST"," body accepting ",[60,1496,1497],{},"collections",[60,1499,1500],{},"bbox",", and ",[60,1503,1504],{},"limit",[533,1506,1507,1515,1523,1531,1539],{},[536,1508,1509,1512,1513],{},[54,1510,1511],{},"Element84 Earth Search"," — ",[60,1514,212],{},[536,1516,1517,1512,1520],{},[54,1518,1519],{},"Microsoft Planetary Computer",[60,1521,1522],{},"https:\u002F\u002Fplanetarycomputer.microsoft.com\u002Fapi\u002Fstac\u002Fv1",[536,1524,1525,1512,1528],{},[54,1526,1527],{},"USGS Landsat STAC",[60,1529,1530],{},"https:\u002F\u002Flandsatlook.usgs.gov\u002Fstac-server",[536,1532,1533,1512,1536],{},[54,1534,1535],{},"NASA CMR STAC",[60,1537,1538],{},"https:\u002F\u002Fcmr.earthdata.nasa.gov\u002Fstac\u002F…",[536,1540,1541,1542,1547,1548],{},"Self-hosted ",[14,1543,1546],{"href":1544,"rel":1545},"https:\u002F\u002Fgithub.com\u002Fstac-utils\u002Fstac-fastapi",[18],"stac-fastapi"," \u002F ",[14,1549,1552],{"href":1550,"rel":1551},"https:\u002F\u002Fgithub.com\u002Fstac-utils\u002Fstac-server",[18],"stac-server",[22,1554,1556],{"id":1555},"asset-selection","Asset selection",[10,1558,1559],{},"tileserver-rs picks one COG asset per item using this priority order:",[1561,1562,1563,1574,1580],"ol",{},[536,1564,1565,1566,1569,1570,1573],{},"Asset with a ",[60,1567,1568],{},"roles"," array containing the configured ",[60,1571,1572],{},"asset_role"," value.",[536,1575,1576,1577,1579],{},"Asset keyed by the configured ",[60,1578,1572],{}," string.",[536,1581,1582,1583,1585,1586,1589,1590,283],{},"Asset whose ",[60,1584,1278],{}," is ",[60,1587,1588],{},"image\u002Ftiff; application=geotiff; profile=cloud-optimized"," or starts with ",[60,1591,1592],{},"image\u002Ftiff",[22,1594,1596],{"id":1595},"_3d-bounding-box-handling","3D bounding box handling",[10,1598,1599,1600,1603,1604,1607],{},"STAC items may carry 6-element bounding boxes ",[60,1601,1602],{},"[west, south, min_elev, east, north, max_elev]",". tileserver-rs correctly extracts the 2D footprint (",[60,1605,1606],{},"[0, 1, 3, 4]",") so elevation metadata never displaces tiles.",[22,1609,1611],{"id":1610},"specifications","Specifications",[27,1613,1614,1624],{},[30,1615,1616],{},[33,1617,1618,1621],{},[36,1619,1620],{},"Spec",[36,1622,1623],{},"Link",[46,1625,1626,1638,1650],{},[33,1627,1628,1631],{},[51,1629,1630],{},"STAC Core",[51,1632,1633],{},[14,1634,1637],{"href":1635,"rel":1636},"https:\u002F\u002Fstacspec.org\u002Fen\u002Fabout\u002Fstac-spec\u002F",[18],"stacspec.org",[33,1639,1640,1643],{},[51,1641,1642],{},"STAC API",[51,1644,1645],{},[14,1646,1649],{"href":1647,"rel":1648},"https:\u002F\u002Fgithub.com\u002Fradiantearth\u002Fstac-api-spec",[18],"github.com\u002Fradiantearth\u002Fstac-api-spec",[33,1651,1652,1655],{},[51,1653,1654],{},"Cloud-Optimized GeoTIFF",[51,1656,1657],{},[14,1658,1661],{"href":1659,"rel":1660},"https:\u002F\u002Fwww.cogeo.org\u002F",[18],"cogeo.org",[1663,1664,1665],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":112,"searchDepth":168,"depth":168,"links":1667},[1668,1669,1670,1671,1672,1673,1674,1677,1678,1679,1680,1681],{"id":24,"depth":168,"text":25},{"id":139,"depth":168,"text":56},{"id":286,"depth":168,"text":73},{"id":406,"depth":168,"text":407},{"id":579,"depth":168,"text":580},{"id":724,"depth":168,"text":725},{"id":925,"depth":168,"text":926,"children":1675},[1676],{"id":983,"depth":187,"text":984},{"id":1059,"depth":168,"text":1060},{"id":1483,"depth":168,"text":1484},{"id":1555,"depth":168,"text":1556},{"id":1595,"depth":168,"text":1596},{"id":1610,"depth":168,"text":1611},"Serve Cloud-Optimized GeoTIFFs directly from any STAC API — static discovery, dynamic per-tile bbox search, and multi-COG mosaic compositing.","md",{},"\u002Fguides\u002Fstac",{"title":5,"description":1682},"4.guides\u002F15.stac","sXqd96pAzcvi5URBxOBHJPH6pDSf_InmlNnGHWONlhk",1793056239456]