[{"data":1,"prerenderedAt":555},["ShallowReactive",2],{"footer-learn-links":3,"site-prefooter-cta":16,"learn-\u002Flearn\u002Fsatellite-imagery-resolution\u002F":24,"related-learn-\u002Flearn\u002Fsatellite-imagery-resolution\u002F":527,"learn-org-author":543},[4,7,10,13],{"title":5,"path":6},"What Is a GDPR-Compliant Mapping API?","\u002Flearn\u002Fgdpr-compliant-mapping-api",{"title":8,"path":9},"What Is Satellite Imagery Resolution?","\u002Flearn\u002Fsatellite-imagery-resolution",{"title":11,"path":12},"What Is Address Autocomplete?","\u002Flearn\u002Faddress-autocomplete",{"title":14,"path":15},"Vector vs. Raster Map Tiles","\u002Flearn\u002Fvector-versus-raster-map-tiles",{"id":17,"extension":18,"heading":19,"meta":20,"stem":21,"text":22,"__hash__":23},"site\u002Fsite\u002Fprefooter-cta.yml","yml","Business Outcomes That Fuel Your Growth",{},"site\u002Fprefooter-cta","With Stadia Maps, you build the solutions that matter. Logistics platforms provide accurate ETAs, fleet management apps reduce fuel costs, and emergency dispatch systems improve response times.","XztWiZDFyAC0XCoeYLLQrcyaVmP8uvGWALRS354c9I4",{"id":25,"title":8,"body":26,"category":425,"description":511,"extension":512,"head":513,"image":515,"imageAlt":516,"keywords":516,"meta":517,"modified":516,"navigation":519,"path":9,"published":520,"rawbody":521,"schemaOrg":516,"seo":522,"stem":523,"term":524,"termDescription":525,"__hash__":526},"learn\u002Flearn\u002Fsatellite-imagery-resolution.md",{"type":27,"value":28,"toc":492},"minimark",[29,33,46,51,70,74,77,80,83,87,96,99,103,106,109,141,144,148,157,177,180,183,187,190,198,210,214,217,261,265,268,306,310,313,330,347,353,357,360,366,374,378,382,387,390,422,426,488],[30,31,8],"h1",{"id":32},"what-is-satellite-imagery-resolution",[34,35,36,37,45],"p",{},"Satellite imagery resolution is the ground distance represented by a single pixel in an image. It is usually written in centimeters or meters, so 30cm resolution means one pixel covers a 30cm by 30cm square of ground. Lower numbers mean finer detail. The ",[38,39,44],"a",{"href":40,"rel":41,"target":43},"https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fmaps\u002Fmap-styles\u002Fsatellite-imagery\u002F",[42],"external","_blank","Stadia Maps Alidade Satellite"," basemap serves imagery at 1.5m or better everywhere, with 37 million km² at 30cm.",[47,48,50],"h2",{"id":49},"key-takeaways","Key Takeaways",[52,53,54,58,61,64,67],"ul",{},[55,56,57],"li",{},"Resolution is the ground distance one pixel covers. 30cm resolution is sharper than 50cm, which is sharper than 1.5m.",[55,59,60],{},"At 30cm, individual vehicles, building footprints, and infrastructure become distinguishable at high zoom levels.",[55,62,63],{},"Resolution and freshness are separate dimensions. A sharp image can still be years out of date.",[55,65,66],{},"Every pixel in the Stadia Maps satellite dataset is 1.5m or better, with 37 million km² at 30cm and another 7 million km² at 50cm.",[55,68,69],{},"The area-weighted average age of the Stadia Maps satellite dataset is roughly 1.6 years, with nearly two-thirds less than a year old.",[47,71,73],{"id":72},"how-is-satellite-imagery-resolution-measured","How Is Satellite Imagery Resolution Measured?",[34,75,76],{},"Resolution is expressed as ground sample distance: the real-world area covered by one pixel. A 30cm image devotes one pixel to every 30cm of ground. A 1.5m image devotes one pixel to every 1.5m.",[34,78,79],{},"The counterintuitive part is that lower numbers mean better imagery. 30cm is roughly 25 times more detailed per unit of area than 1.5m, because the comparison is two-dimensional. That is why coverage at each resolution tier is usually reported separately rather than as a single global average.",[34,81,82],{},"Resolution is not the only thing that determines how usable an image is. Cloud cover, color consistency across tiles, seasonal variation, and the age of the capture all affect whether imagery looks right in production.",[47,84,86],{"id":85},"what-can-you-see-at-30cm-resolution","What Can You See at 30cm Resolution?",[34,88,89,90,95],{},"According to the ",[38,91,94],{"href":92,"rel":93,"target":43},"https:\u002F\u002Fstadiamaps.com\u002Fblog\u002F2026-satellite-imagery-update\u002F",[42],"2026 Stadia Maps satellite imagery update",", 30cm resolution provides \"enough detail to distinguish individual vehicles, building footprints, and infrastructure at high zoom levels.\"",[34,97,98],{},"That threshold is what separates imagery that supports real analysis from imagery that is purely decorative. For urban planning tools, insurance assessments, or logistics platforms, being able to resolve a parking space or a rooftop outline changes what the product can actually do.",[47,100,102],{"id":101},"why-imagery-freshness-matters-as-much-as-resolution","Why Imagery Freshness Matters as Much as Resolution",[34,104,105],{},"A 30cm image captured four years ago may be less useful than a 1.5m image captured last spring, depending on what you are looking at. New construction, changed road layouts, and seasonal differences all show up as errors when imagery ages.",[34,107,108],{},"Stadia Maps publishes freshness numbers alongside resolution numbers:",[52,110,111,119,126,133],{},[55,112,113,114,118],{},"The area-weighted average age across the dataset is roughly ",[115,116,117],"strong",{},"1.6 years",".",[55,120,121,122,125],{},"Nearly ",[115,123,124],{},"two-thirds"," of coverage is less than a year old.",[55,127,128,129,132],{},"Only ",[115,130,131],{},"7%"," is older than three years, and that share shrinks with each refresh.",[55,134,135,136,140],{},"Per the ",[38,137,139],{"href":40,"rel":138,"target":43},[42],"satellite imagery product page",", most cities and populated areas are no more than a year old.",[34,142,143],{},"Cloud cover is the other freshness-adjacent quality signal. Stadia Maps reports less than 5% cloud cover globally and under 2% over urban areas.",[47,145,147],{"id":146},"what-resolution-does-stadia-maps-offer","What Resolution Does Stadia Maps Offer?",[34,149,150,151,156],{},"The ",[38,152,155],{"href":153,"rel":154,"target":43},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-satellite\u002F",[42],"Alidade Satellite"," basemap is built on imagery from Airbus. Current coverage, per the 2026 update:",[52,158,159,165,171],{},[55,160,161,164],{},[115,162,163],{},"37 million km² at 30cm."," Includes seamless country-wide mosaics for Japan, Nigeria, Mexico, the UAE, and Eastern South Africa. \"Seamless\" means no visible tile boundaries and no abrupt shifts in color or season.",[55,166,167,170],{},[115,168,169],{},"7 million km² at 50cm."," Concentrated across North America, Europe, and urban hubs worldwide.",[55,172,173,176],{},[115,174,175],{},"1.5m or better everywhere else."," The full 1.5m dataset covering Earth's landmasses was refreshed from the latest SPOT Global layer.",[34,178,179],{},"Global coverage extends to zoom 18. Raster tiles are served up to zoom 20.",[34,181,182],{},"Consistent color across zoom levels is a deliberate design choice rather than a byproduct of the source imagery. Mixed-source mosaics often shift color or season between tiles, which is distracting when you are overlaying your own data on top.",[47,184,186],{"id":185},"how-does-resolution-relate-to-map-zoom-levels","How Does Resolution Relate to Map Zoom Levels?",[34,188,189],{},"Resolution determines the highest zoom level at which imagery still looks sharp. Zoom past the native resolution of the source imagery and the renderer is upscaling pixels rather than showing new detail.",[34,191,192,193,197],{},"Two practical notes from the ",[38,194,196],{"href":153,"rel":195,"target":43},[42],"Alidade Satellite documentation",":",[52,199,200,203],{},[55,201,202],{},"The full styled basemap (imagery plus labels and feature outlines) is available as raster XYZ JPG tiles up to zoom 20.",[55,204,205,206,209],{},"The imagery-only layer, for teams building a custom style on top, goes up to zoom 18 and uses 512x512 pixel tiles rather than the standard 256x256. That means ",[115,207,208],{},"zoom levels are off by one"," compared to a standard raster layer. This trips up teams that mix the imagery layer with other 256x256 sources.",[47,211,213],{"id":212},"where-satellite-imagery-resolution-falls-short","Where Satellite Imagery Resolution Falls Short",[34,215,216],{},"Resolution is a useful number, but it does not tell the whole story.",[52,218,219,225,231,237,243,249],{},[55,220,221,224],{},[115,222,223],{},"Resolution is not uniform globally."," 30cm coverage is 37 million km², which is a fraction of Earth's landmass. Everywhere else is 50cm or 1.5m. Do not design a feature that assumes 30cm everywhere.",[55,226,227,230],{},[115,228,229],{},"Sharp does not mean current."," Resolution and capture date are independent. Check both before relying on imagery for anything time-sensitive.",[55,232,233,236],{},[115,234,235],{},"Cloud cover exists."," Under 5% globally is very good, but it is not zero. Some tiles will have clouds.",[55,238,239,242],{},[115,240,241],{},"Satellite imagery is not real-time."," No commercial basemap updates continuously. Imagery reflects conditions on the capture date, not today.",[55,244,245,248],{},[115,246,247],{},"Attribution is mandatory."," Satellite imagery carries its own attribution requirement beyond the standard basemap attribution. See the section below.",[55,250,251,254,255,260],{},[115,252,253],{},"Bulk downloading is prohibited."," Per the ",[38,256,259],{"href":257,"rel":258,"target":43},"https:\u002F\u002Fstadiamaps.com\u002Fterms-of-service\u002F",[42],"Stadia Maps terms of service",", you can serve tiles in your application but not scrape the tileset.",[47,262,264],{"id":263},"common-satellite-imagery-use-cases","Common Satellite Imagery Use Cases",[34,266,267],{},"Satellite basemaps show up wherever the real-world appearance of a place carries information a vector map cannot convey.",[52,269,270,276,282,288,294,300],{},[55,271,272,275],{},[115,273,274],{},"Outdoors and recreation."," Terrain, tree cover, trail surroundings, and water features that a styled vector map abstracts away.",[55,277,278,281],{},[115,279,280],{},"Logistics and field operations."," Yard layouts, loading docks, building footprints, and access roads.",[55,283,284,287],{},[115,285,286],{},"Tourism and travel."," Showing travelers what a destination actually looks like.",[55,289,290,293],{},[115,291,292],{},"Urban planning."," Assessing density, green space, parking, and land use from current imagery.",[55,295,296,299],{},[115,297,298],{},"Insurance and property assessment."," Roof condition, structure footprint, and site context at 30cm.",[55,301,302,305],{},[115,303,304],{},"Data visualization backdrops."," Consistent color across zoom levels makes satellite a workable base for overlaying your own data.",[47,307,309],{"id":308},"how-do-you-add-satellite-imagery-to-a-map","How Do You Add Satellite Imagery to a Map?",[34,311,312],{},"The Alidade Satellite style is available on every Stadia Maps plan and works with any renderer that supports raster tiles.",[314,315,320],"pre",{"className":316,"code":317,"language":318,"meta":319,"style":319},"language-http shiki shiki-themes github-light","GET https:\u002F\u002Ftiles.stadiamaps.com\u002Ftiles\u002Falidade_satellite\u002F{z}\u002F{x}\u002F{y}{r}.jpg\n","http","",[321,322,323],"code",{"__ignoreMap":319},[324,325,328],"span",{"class":326,"line":327},"line",1,[324,329,317],{},[34,331,150,332,335,336,339,340,343,344,118],{},[321,333,334],{},"{r}"," placeholder handles HiDPI displays. Replace it with ",[321,337,338],{},"@2x"," for 2x scaled tiles, or drop it for standard tiles. A MapLibre-compatible JSON style is also available at ",[321,341,342],{},"https:\u002F\u002Ftiles.stadiamaps.com\u002Fstyles\u002Falidade_satellite.json",", and EU-only endpoints are available at ",[321,345,346],{},"tiles-eu.stadiamaps.com",[34,348,349,350,118],{},"Full setup examples for MapLibre GL JS, Leaflet, and OpenLayers are in the ",[38,351,196],{"href":153,"rel":352,"target":43},[42],[47,354,356],{"id":355},"what-attribution-does-satellite-imagery-require","What Attribution Does Satellite Imagery Require?",[34,358,359],{},"Satellite imagery requires attribution beyond the standard basemap credit. Most renderers add it automatically. If yours does not, include this text:",[361,362,363],"blockquote",{},[34,364,365],{},"© CNES, Distribution Airbus DS, © Airbus DS, © PlanetObserver (Contains Copernicus Data)",[34,367,368,369,118],{},"No hyperlink is required for the imagery attribution. Full details are in the ",[38,370,373],{"href":371,"rel":372,"target":43},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fattribution\u002F",[42],"attribution documentation",[375,376],"faq-section",{":faqs":377},"[{\"question\":\"What does 30cm satellite imagery resolution mean?\",\"answer\":\"30cm resolution means each pixel in the image represents a 30cm by 30cm square of ground. It provides enough detail to distinguish individual vehicles, building footprints, and infrastructure at high zoom levels. Lower numbers indicate finer detail, so 30cm is sharper than 50cm, which is sharper than 1.5m.\"},{\"question\":\"What resolution is Stadia Maps satellite imagery?\",\"answer\":\"Every pixel in the Stadia Maps satellite dataset is 1.5m resolution or better. As of the 2026 update, 37 million square kilometers is available at 30cm resolution and another 7 million square kilometers at 50cm. The 30cm coverage includes seamless country-wide mosaics for Japan, Nigeria, Mexico, the UAE, and Eastern South Africa.\"},{\"question\":\"How often is satellite imagery updated?\",\"answer\":\"Stadia Maps refreshes its Alidade Satellite imagery regularly as new high-resolution data becomes available from Airbus. The area-weighted average age across the dataset is roughly 1.6 years. Nearly two-thirds of coverage is less than a year old, and only 7% is older than three years.\"},{\"question\":\"What zoom level does satellite imagery support?\",\"answer\":\"Stadia Maps provides global satellite coverage to zoom 18. The full styled Alidade Satellite basemap is served as raster tiles up to zoom 20. The imagery-only layer, intended for custom styles, goes up to zoom 18 and uses 512x512 pixel tiles, which means its zoom levels are off by one compared to standard 256x256 raster layers.\"},{\"question\":\"How much does satellite imagery cost on Stadia Maps?\",\"answer\":\"Satellite imagery tiles cost 4 credits per tile on the Stadia Maps unified credit pool. Satellite imagery tiles are 512x512 pixels and cover the same area as a vector tile, which is four times the area of a standard raster tile. A satellite basemap such as Alidade Satellite requires both imagery and vector tiles.\"},{\"question\":\"Do I need to attribute satellite imagery?\",\"answer\":\"Yes. Satellite imagery requires additional attribution beyond the standard basemap credit. Include the following text: © CNES, Distribution Airbus DS, © Airbus DS, © PlanetObserver (Contains Copernicus Data). No hyperlink is required. Most renderers add this automatically.\"}]",[47,379,381],{"id":380},"where-to-go-next","Where to Go Next",[383,384,386],"h3",{"id":385},"from-the-blog","From the Blog",[34,388,389],{},"More on satellite imagery and basemaps from the Stadia Maps blog:",[52,391,392,398,404,410,416],{},[55,393,394],{},[38,395,397],{"href":396},"\u002Fblog\u002F2026-satellite-imagery-update\u002F","2026 Satellite Imagery Update: 37 Million km² at 30cm Resolution",[55,399,400],{},[38,401,403],{"href":402},"\u002Fblog\u002F2025-satellite-imagery-refresh\u002F","2025 Satellite Imagery Map Refresh",[55,405,406],{},[38,407,409],{"href":408},"\u002Fblog\u002F2024-satellite-imagery-refresh\u002F","2024 Satellite Imagery Map Refresh",[55,411,412],{},[38,413,415],{"href":414},"\u002Fblog\u002Ffixing-missing-water-interactive-basemaps\u002F","How We Fixed Water Feature Rendering Across All Zoom Levels in Our Basemaps",[55,417,418],{},[38,419,421],{"href":420},"\u002Fblog\u002Fannouncing-cacheable-static-map-images\u002F","Announcing Cacheable Static Maps",[383,423,425],{"id":424},"maps","Maps",[52,427,428,434,441,447,455,463,470,477],{},[55,429,430,433],{},[38,431,14],{"href":432},"\u002Flearn\u002Fvector-versus-raster-map-tiles\u002F"," for the two main tile formats and when to use each",[55,435,436,440],{},[38,437,439],{"href":438},"\u002Fproducts\u002Fmaps\u002Fmap-styles\u002Fsatellite-imagery\u002F","Satellite Imagery product page"," for coverage and quality details",[55,442,443,446],{},[38,444,196],{"href":153,"rel":445,"target":43},[42]," for tile URLs and renderer setup",[55,448,449,454],{},[38,450,453],{"href":451,"rel":452,"target":43},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fraster\u002F",[42],"Raster Map Tiles docs"," for the full raster tile reference",[55,456,457,462],{},[38,458,461],{"href":459,"rel":460,"target":43},"https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F",[42],"Map Styles library"," for the complete gallery of Stadia house styles",[55,464,465,469],{},[38,466,468],{"href":467},"\u002Fexplore-the-map\u002F","Explore the Map"," to compare styles and zoom levels interactively",[55,471,472,476],{},[38,473,475],{"href":371,"rel":474,"target":43},[42],"Attribution requirements"," for imagery and basemap credit",[55,478,479,483,484],{},[38,480,482],{"href":481},"\u002Fproducts\u002Fmaps\u002F","Maps product page"," and ",[38,485,487],{"href":486},"\u002Fpricing\u002F","pricing",[489,490,491],"style",{},"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);}",{"title":319,"searchDepth":493,"depth":493,"links":494},4,[495,497,498,499,500,501,502,503,504,505,506],{"id":49,"depth":496,"text":50},2,{"id":72,"depth":496,"text":73},{"id":85,"depth":496,"text":86},{"id":101,"depth":496,"text":102},{"id":146,"depth":496,"text":147},{"id":185,"depth":496,"text":186},{"id":212,"depth":496,"text":213},{"id":263,"depth":496,"text":264},{"id":308,"depth":496,"text":309},{"id":355,"depth":496,"text":356},{"id":380,"depth":496,"text":381,"children":507},[508,510],{"id":385,"depth":509,"text":386},3,{"id":424,"depth":509,"text":425},"Satellite imagery resolution is the ground distance each pixel covers. Learn what 30cm means, why freshness matters, and what resolution Stadia Maps offers.","md",{"script":514},[],"\u002Fimages\u002Fog\u002Fwhat-is-satellite-imagery-resolution.png",null,{"author":518},"Stadia Maps Team",true,"2026-08-05","---\ntitle: What Is Satellite Imagery Resolution?\ndescription: Satellite imagery resolution is the ground distance each pixel covers. Learn what 30cm means, why freshness matters, and what resolution Stadia Maps offers.\ncategory: Maps\nimage: \u002Fimages\u002Fog\u002Fwhat-is-satellite-imagery-resolution.png\nhead:\n  script: []\npublished: 2026-08-05\nterm: Satellite Imagery Resolution\ntermDescription: The ground distance represented by a single pixel in a satellite or aerial image, expressed in centimeters or meters.\nauthor: Stadia Maps Team\n---\n\n# What Is Satellite Imagery Resolution?\n\nSatellite imagery resolution is the ground distance represented by a single pixel in an image. It is usually written in centimeters or meters, so 30cm resolution means one pixel covers a 30cm by 30cm square of ground. Lower numbers mean finer detail. The [Stadia Maps Alidade Satellite](https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fmaps\u002Fmap-styles\u002Fsatellite-imagery\u002F) basemap serves imagery at 1.5m or better everywhere, with 37 million km² at 30cm.\n\n## Key Takeaways\n\n- Resolution is the ground distance one pixel covers. 30cm resolution is sharper than 50cm, which is sharper than 1.5m.\n- At 30cm, individual vehicles, building footprints, and infrastructure become distinguishable at high zoom levels.\n- Resolution and freshness are separate dimensions. A sharp image can still be years out of date.\n- Every pixel in the Stadia Maps satellite dataset is 1.5m or better, with 37 million km² at 30cm and another 7 million km² at 50cm.\n- The area-weighted average age of the Stadia Maps satellite dataset is roughly 1.6 years, with nearly two-thirds less than a year old.\n\n## How Is Satellite Imagery Resolution Measured?\n\nResolution is expressed as ground sample distance: the real-world area covered by one pixel. A 30cm image devotes one pixel to every 30cm of ground. A 1.5m image devotes one pixel to every 1.5m.\n\nThe counterintuitive part is that lower numbers mean better imagery. 30cm is roughly 25 times more detailed per unit of area than 1.5m, because the comparison is two-dimensional. That is why coverage at each resolution tier is usually reported separately rather than as a single global average.\n\nResolution is not the only thing that determines how usable an image is. Cloud cover, color consistency across tiles, seasonal variation, and the age of the capture all affect whether imagery looks right in production.\n\n## What Can You See at 30cm Resolution?\n\nAccording to the [2026 Stadia Maps satellite imagery update](https:\u002F\u002Fstadiamaps.com\u002Fblog\u002F2026-satellite-imagery-update\u002F), 30cm resolution provides \"enough detail to distinguish individual vehicles, building footprints, and infrastructure at high zoom levels.\"\n\nThat threshold is what separates imagery that supports real analysis from imagery that is purely decorative. For urban planning tools, insurance assessments, or logistics platforms, being able to resolve a parking space or a rooftop outline changes what the product can actually do.\n\n## Why Imagery Freshness Matters as Much as Resolution\n\nA 30cm image captured four years ago may be less useful than a 1.5m image captured last spring, depending on what you are looking at. New construction, changed road layouts, and seasonal differences all show up as errors when imagery ages.\n\nStadia Maps publishes freshness numbers alongside resolution numbers:\n\n- The area-weighted average age across the dataset is roughly **1.6 years**.\n- Nearly **two-thirds** of coverage is less than a year old.\n- Only **7%** is older than three years, and that share shrinks with each refresh.\n- Per the [satellite imagery product page](https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fmaps\u002Fmap-styles\u002Fsatellite-imagery\u002F), most cities and populated areas are no more than a year old.\n\nCloud cover is the other freshness-adjacent quality signal. Stadia Maps reports less than 5% cloud cover globally and under 2% over urban areas.\n\n## What Resolution Does Stadia Maps Offer?\n\nThe [Alidade Satellite](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-satellite\u002F) basemap is built on imagery from Airbus. Current coverage, per the 2026 update:\n\n- **37 million km² at 30cm.** Includes seamless country-wide mosaics for Japan, Nigeria, Mexico, the UAE, and Eastern South Africa. \"Seamless\" means no visible tile boundaries and no abrupt shifts in color or season.\n- **7 million km² at 50cm.** Concentrated across North America, Europe, and urban hubs worldwide.\n- **1.5m or better everywhere else.** The full 1.5m dataset covering Earth's landmasses was refreshed from the latest SPOT Global layer.\n\nGlobal coverage extends to zoom 18. Raster tiles are served up to zoom 20.\n\nConsistent color across zoom levels is a deliberate design choice rather than a byproduct of the source imagery. Mixed-source mosaics often shift color or season between tiles, which is distracting when you are overlaying your own data on top.\n\n## How Does Resolution Relate to Map Zoom Levels?\n\nResolution determines the highest zoom level at which imagery still looks sharp. Zoom past the native resolution of the source imagery and the renderer is upscaling pixels rather than showing new detail.\n\nTwo practical notes from the [Alidade Satellite documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-satellite\u002F):\n\n- The full styled basemap (imagery plus labels and feature outlines) is available as raster XYZ JPG tiles up to zoom 20.\n- The imagery-only layer, for teams building a custom style on top, goes up to zoom 18 and uses 512x512 pixel tiles rather than the standard 256x256. That means **zoom levels are off by one** compared to a standard raster layer. This trips up teams that mix the imagery layer with other 256x256 sources.\n\n## Where Satellite Imagery Resolution Falls Short\n\nResolution is a useful number, but it does not tell the whole story.\n\n- **Resolution is not uniform globally.** 30cm coverage is 37 million km², which is a fraction of Earth's landmass. Everywhere else is 50cm or 1.5m. Do not design a feature that assumes 30cm everywhere.\n- **Sharp does not mean current.** Resolution and capture date are independent. Check both before relying on imagery for anything time-sensitive.\n- **Cloud cover exists.** Under 5% globally is very good, but it is not zero. Some tiles will have clouds.\n- **Satellite imagery is not real-time.** No commercial basemap updates continuously. Imagery reflects conditions on the capture date, not today.\n- **Attribution is mandatory.** Satellite imagery carries its own attribution requirement beyond the standard basemap attribution. See the section below.\n- **Bulk downloading is prohibited.** Per the [Stadia Maps terms of service](https:\u002F\u002Fstadiamaps.com\u002Fterms-of-service\u002F), you can serve tiles in your application but not scrape the tileset.\n\n## Common Satellite Imagery Use Cases\n\nSatellite basemaps show up wherever the real-world appearance of a place carries information a vector map cannot convey.\n\n- **Outdoors and recreation.** Terrain, tree cover, trail surroundings, and water features that a styled vector map abstracts away.\n- **Logistics and field operations.** Yard layouts, loading docks, building footprints, and access roads.\n- **Tourism and travel.** Showing travelers what a destination actually looks like.\n- **Urban planning.** Assessing density, green space, parking, and land use from current imagery.\n- **Insurance and property assessment.** Roof condition, structure footprint, and site context at 30cm.\n- **Data visualization backdrops.** Consistent color across zoom levels makes satellite a workable base for overlaying your own data.\n\n## How Do You Add Satellite Imagery to a Map?\n\nThe Alidade Satellite style is available on every Stadia Maps plan and works with any renderer that supports raster tiles.\n\n```http\nGET https:\u002F\u002Ftiles.stadiamaps.com\u002Ftiles\u002Falidade_satellite\u002F{z}\u002F{x}\u002F{y}{r}.jpg\n```\n\nThe `{r}` placeholder handles HiDPI displays. Replace it with `@2x` for 2x scaled tiles, or drop it for standard tiles. A MapLibre-compatible JSON style is also available at `https:\u002F\u002Ftiles.stadiamaps.com\u002Fstyles\u002Falidade_satellite.json`, and EU-only endpoints are available at `tiles-eu.stadiamaps.com`.\n\nFull setup examples for MapLibre GL JS, Leaflet, and OpenLayers are in the [Alidade Satellite documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-satellite\u002F).\n\n## What Attribution Does Satellite Imagery Require?\n\nSatellite imagery requires attribution beyond the standard basemap credit. Most renderers add it automatically. If yours does not, include this text:\n\n> © CNES, Distribution Airbus DS, © Airbus DS, © PlanetObserver (Contains Copernicus Data)\n\nNo hyperlink is required for the imagery attribution. Full details are in the [attribution documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fattribution\u002F).\n\n::faq-section\n---\nfaqs:\n  - question: What does 30cm satellite imagery resolution mean?\n    answer: 30cm resolution means each pixel in the image represents a 30cm by 30cm\n      square of ground. It provides enough detail to distinguish individual\n      vehicles, building footprints, and infrastructure at high zoom levels.\n      Lower numbers indicate finer detail, so 30cm is sharper than 50cm, which\n      is sharper than 1.5m.\n  - question: What resolution is Stadia Maps satellite imagery?\n    answer: Every pixel in the Stadia Maps satellite dataset is 1.5m resolution or\n      better. As of the 2026 update, 37 million square kilometers is available\n      at 30cm resolution and another 7 million square kilometers at 50cm. The\n      30cm coverage includes seamless country-wide mosaics for Japan, Nigeria,\n      Mexico, the UAE, and Eastern South Africa.\n  - question: How often is satellite imagery updated?\n    answer: Stadia Maps refreshes its Alidade Satellite imagery regularly as new\n      high-resolution data becomes available from Airbus. The area-weighted\n      average age across the dataset is roughly 1.6 years. Nearly two-thirds of\n      coverage is less than a year old, and only 7% is older than three years.\n  - question: What zoom level does satellite imagery support?\n    answer: Stadia Maps provides global satellite coverage to zoom 18. The full\n      styled Alidade Satellite basemap is served as raster tiles up to zoom 20.\n      The imagery-only layer, intended for custom styles, goes up to zoom 18 and\n      uses 512x512 pixel tiles, which means its zoom levels are off by one\n      compared to standard 256x256 raster layers.\n  - question: How much does satellite imagery cost on Stadia Maps?\n    answer: Satellite imagery tiles cost 4 credits per tile on the Stadia Maps\n      unified credit pool. Satellite imagery tiles are 512x512 pixels and cover\n      the same area as a vector tile, which is four times the area of a standard\n      raster tile. A satellite basemap such as Alidade Satellite requires both\n      imagery and vector tiles.\n  - question: Do I need to attribute satellite imagery?\n    answer: \"Yes. Satellite imagery requires additional attribution beyond the\n      standard basemap credit. Include the following text: © CNES, Distribution\n      Airbus DS, © Airbus DS, © PlanetObserver (Contains Copernicus Data). No\n      hyperlink is required. Most renderers add this automatically.\"\n---\n::\n\n## Where to Go Next\n\n### From the Blog\n\nMore on satellite imagery and basemaps from the Stadia Maps blog:\n\n- [2026 Satellite Imagery Update: 37 Million km² at 30cm Resolution](\u002Fblog\u002F2026-satellite-imagery-update\u002F)\n- [2025 Satellite Imagery Map Refresh](\u002Fblog\u002F2025-satellite-imagery-refresh\u002F)\n- [2024 Satellite Imagery Map Refresh](\u002Fblog\u002F2024-satellite-imagery-refresh\u002F)\n- [How We Fixed Water Feature Rendering Across All Zoom Levels in Our Basemaps](\u002Fblog\u002Ffixing-missing-water-interactive-basemaps\u002F)\n- [Announcing Cacheable Static Maps](\u002Fblog\u002Fannouncing-cacheable-static-map-images\u002F)\n\n### Maps\n\n- [Vector vs. Raster Map Tiles](\u002Flearn\u002Fvector-versus-raster-map-tiles\u002F) for the two main tile formats and when to use each\n- [Satellite Imagery product page](\u002Fproducts\u002Fmaps\u002Fmap-styles\u002Fsatellite-imagery\u002F) for coverage and quality details\n- [Alidade Satellite documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-satellite\u002F) for tile URLs and renderer setup\n- [Raster Map Tiles docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fraster\u002F) for the full raster tile reference\n- [Map Styles library](https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F) for the complete gallery of Stadia house styles\n- [Explore the Map](\u002Fexplore-the-map\u002F) to compare styles and zoom levels interactively\n- [Attribution requirements](https:\u002F\u002Fdocs.stadiamaps.com\u002Fattribution\u002F) for imagery and basemap credit\n- [Maps product page](\u002Fproducts\u002Fmaps\u002F) and [pricing](\u002Fpricing\u002F)\n",{"title":8,"description":511},"learn\u002Fsatellite-imagery-resolution","Satellite Imagery Resolution","The ground distance represented by a single pixel in a satellite or aerial image, expressed in centimeters or meters.","xY9ol4IrXs4jfR6ZbT5WMSm5zD-cEPKLT3juV5BpkXw",[528,532,537],{"title":14,"description":529,"path":15,"published":530,"category":425,"rawbody":531},"Vector and raster are the two main map tile formats. Learn how they differ, when to use each, and how Stadia Maps serves both with MapLibre and OpenLayers.","2026-07-27","---\ntitle: Vector vs. Raster Map Tiles\ndescription: Vector and raster are the two main map tile formats. Learn how they differ, when to use each, and how Stadia Maps serves both with MapLibre and OpenLayers.\nauthor: Stadia Maps Team\ncategory: Maps\nimage: \u002Fimages\u002Fog\u002Fwhat-is-vector-vs-raster-map-tiles.png\nhead:\n  script: []\npublished: 2026-07-27\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is the difference between vector and raster map tiles?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Raster map tiles are PNG or JPG images that get stitched together in a grid. Vector map tiles contain a mathematical description of the geometry plus structured data about each feature on the map, and get rendered client-side. Vector tiles allow dynamic styling, look sharp at any resolution, and typically reduce tile requests by around 60%. Raster tiles are simpler to render and battle-tested across older devices and rendering libraries.\n      - \"@type\": Question\n        name: Which is better, vector or raster map tiles?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: According to the Stadia Maps Switching to Vector Tiles guide, vector tiles offer greater flexibility, look great on any screen, and typically reduce costs by around 60%. However, if your application is targeting older devices or does not need a high level of detail, raster tiles are not necessarily a bad option.\n      - \"@type\": Question\n        name: Do vector map tiles cost less than raster map tiles?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: On the Stadia Maps API, both vector and raster tile requests are billed the same way, but vector tiles typically require fewer total requests to render a comparable map. The Switching to Vector Tiles guide reports users switching to vector make approximately 60% fewer tile requests on average.\n      - \"@type\": Question\n        name: What format are Stadia Maps vector tiles served in?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Stadia Maps vector tiles are distributed in the widely-adopted Mapbox Vector Tile (MVT) format, with a schema compatible with OpenMapTiles. They render in MapLibre GL JS, MapLibre Native, Leaflet (via maplibre-gl-leaflet), OpenLayers (via ol-mapbox-style), and other MVT-compatible renderers.\n      - \"@type\": Question\n        name: Can I use vector tiles with Leaflet?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Yes. Leaflet can render Stadia Maps vector tiles via the maplibre-gl-leaflet plugin. You swap L.tileLayer for L.maplibreGL and point at a Stadia Maps vector style URL. This is the quickest migration path from raster Leaflet to vector without switching frameworks.\nterm: Map Tile\ntermDescription: A single image or data file, one of many that get stitched together to form a complete interactive map. Comes in two main formats, raster and vector.\n---\n\n# Vector vs. Raster Map Tiles\n\nVector and raster are the two main formats used to serve interactive map tiles. Raster tiles are PNG or JPG images stitched into a grid. Vector tiles contain a mathematical description of geometry plus structured data about each feature, rendered on the client. The [Stadia Maps Map Tiles API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fvector\u002F) serves both formats, so this comparison is not a pitch for one over the other. It's an honest walkthrough of the trade-offs.\n\n## Key Takeaways\n\n- Raster tiles are PNG or JPG images. Vector tiles are structured data, rendered client-side.\n- Vector tiles allow dynamic styling (colors, language, layer visibility, 3D perspective). Raster tiles do not.\n- According to Stadia Maps' [Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F), users switching to vector make approximately 60% fewer tile requests on average.\n- Raster tiles are battle-tested and easy to render on older devices and simpler libraries.\n- Stadia Maps serves both formats and contributes to MapLibre. Co-founder Luke Seelenbinder serves on MapLibre's governing board.\n\n## What Are Raster Map Tiles?\n\nRaster map tiles are PNG or JPG images that get stitched together in a grid to form a complete interactive map. When you zoom in and out of a map and see little blank squares filling in like a mosaic, those are tiles.\n\nThe [Stadia Maps Raster Map Tiles API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fraster\u002F) serves all of Stadia's house styles as PNG raster tiles at 256×256 and 512×512 pixel sizes. Raster tiles are supported up to zoom 20 for most styles (Stamen Watercolor is the exception at zoom 16).\n\n**Raster advantages (from the Stadia Maps guide):**\n\n- **Simplicity.** Just about every device can render a PNG or JPG image, and it is easy to build a performant renderer around them. Raster tiles do not require any other resources (fonts, icons) or special client-side logic.\n- **Specificity.** For minimalist styles, raster tiles can be more bandwidth-efficient because they only contain the raw visible pixels.\n\n**Raster limitations (from the Stadia Maps guide):**\n\n- **Inflexibility.** You cannot change much about raster tiles. Hiding a layer, changing the language of labels, or altering the appearance of the tiles is not possible client-side.\n- **Scalability.** Raster map tiles cannot be scaled up and down. High-DPI displays need 4× the pixels, and zooming produces temporary blur until the new tiles load.\n\n## What Are Vector Map Tiles?\n\nVector map tiles contain a mathematical description of geometry and structured data about each feature on the map. Rather than pre-rendered pixels, the tile carries the raw data and the client renders it in real time.\n\nThe [Stadia Maps Vector Map Tiles API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fvector\u002F) serves tiles in the widely-adopted Mapbox Vector Tile (MVT) format, with a schema compatible with OpenMapTiles. Stadia Maps supports zoom levels 0 through 14 for vector tiles, with over-zooming from the z14 tile beyond that. Stadia Maps recommends the [MapLibre GL JS](https:\u002F\u002Fmaplibre.org\u002F) and MapLibre Native renderers, but the tiles work in any MVT-compatible renderer.\n\n**Vector advantages (from the Stadia Maps guide):**\n\n- **Flexibility.** The actual data is preserved in the tile. You can [change the language](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fchanging-the-map-label-language\u002F) of text labels, change color scheme dynamically, switch styles based on time of day, or [add 3D perspective](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fadding-3d-buildings-to-your-maps-with-maplibre\u002F).\n- **Scalability.** Vector shapes scale up and down smoothly. Zooming feels continuous rather than stepped, and high-DPI displays get sharp output without extra bandwidth.\n- **Cost.** Vector tiles cover a larger area per tile. Stadia's guide reports users switching to vector make approximately 60% fewer tile requests on average.\n\n**Vector limitations (from the Stadia Maps guide):**\n\n- **Complexity.** Tiles render client-side, which may create performance concerns for older or embedded applications. Initial map load involves more network requests for fonts, icons, and style resources.\n- **Size.** For applications that only need a low level of detail and don't use 3D features, vector tiles can weigh slightly more. This is offset because zooming past level 14 uses the information already in the z14 tile.\n\n## Vector vs. Raster: Which Should You Use?\n\nThe [Stadia Maps Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F) summarizes the choice directly: \"Vector tiles offer greater flexibility, look great on any screen, and typically reduce costs by around 60%. However, if your application is targeting older devices or doesn't need a high level of detail (for example, our Alidade Smooth and Alidade Smooth Dark styles), raster tiles are not necessarily a bad option.\"\n\nChoose **vector** when you need:\n\n- Client-side style customization or language switching\n- 3D perspective, custom camera angles, or dynamic theming\n- Lower total tile requests at scale\n- Sharp rendering on high-DPI displays without paying 4× bandwidth\n\nChoose **raster** when you need:\n\n- Support for older devices or renderers that don't understand MVT\n- A minimalist style where bandwidth per tile is very small\n- The absolute simplest integration path in Leaflet, WordPress, or a static site\n- Static images (for those, the [Stadia Maps Static Maps API](https:\u002F\u002Fstadiamaps.com\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) is a different product, tailored for embedding images in emails or apps without a JS runtime)\n\n## How Do You Serve Vector and Raster Tiles with Stadia Maps?\n\nBoth formats use straightforward URL patterns. Replace `\u003Cstyle>` with any of the [Stadia Maps map styles](https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F).\n\n**Vector tile URL formats:**\n\n```text\nhttps:\u002F\u002Ftiles.stadiamaps.com\u002Fdata\u002Fopenmaptiles.json\nhttps:\u002F\u002Ftiles.stadiamaps.com\u002Fdata\u002Fopenmaptiles\u002F{z}\u002F{x}\u002F{y}.pbf\n```\n\n**Raster tile URL format:**\n\n```text\nhttps:\u002F\u002Ftiles.stadiamaps.com\u002Ftiles\u002F\u003Cstyle>\u002F{z}\u002F{x}\u002F{y}{r}.png\n```\n\nThe `{r}` placeholder handles HiDPI (\"retina\") display support. Replace it with `@2x` for 2× scaled images, or drop it for 256×256 output.\n\nEU-only endpoints are available for both formats at `tiles-eu.stadiamaps.com`. See the [EU Endpoints docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Feu-gdpr-endpoints\u002F) for details.\n\nAuthentication uses domain-based auth for browser applications or an API key for backend and mobile applications. Full details in the [Authentication guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fauthentication\u002F).\n\n## How to Switch from Raster to Vector Tiles\n\nThe [Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F) walks through the common migration paths.\n\n- **Switching to MapLibre GL JS (web).** The most feature-rich option. See the [MapLibre GL JS quickstart](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-maps-with-maplibre-gl-js\u002F).\n- **Keeping Leaflet.** Add vector rendering support via the `maplibre-gl-leaflet` plugin. Swap `L.tileLayer` for `L.maplibreGL` and point at a Stadia Maps vector style URL. See the [Vector Tiles with Leaflet tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-tiles-with-leaflet\u002F).\n- **React Leaflet.** Add a small component. See the [Vector Tiles with React Leaflet tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-tiles-with-react-leaflet\u002F).\n- **OpenLayers.** Load the `ol-mapbox-style` plugin and call `olms.apply` with a Stadia Maps vector style URL.\n- **Mobile (iOS, Android, Flutter, React Native).** See the [Native and Multi-platform maps overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Fnative-multiplatform\u002Foverview\u002F).\n\n## Where Vector vs. Raster Tile Comparisons Fall Short\n\nA few things worth knowing before you take any comparison table (this one included) as absolute.\n\n- **\"60% fewer tile requests\" is an average, not a guarantee.** The actual reduction depends on the level of detail, the size of the viewport, and how much users pan and zoom. The Stadia Maps guide reports it as an average across users who switched.\n- **Vector isn't universally faster.** Initial map load can involve more network requests for fonts, icons, and style resources. First-paint may feel slower even when total data is lower.\n- **Not every renderer handles MVT with the same fidelity.** The Stadia Vector docs explicitly note that OpenLayers rendering \"isn't quite as powerful as MapLibre GL JS, but it's the quickest migration path to most of the benefits.\" Same idea for the Leaflet plugin.\n- **Older devices matter.** If a meaningful part of your user base runs older embedded browsers or low-power devices, raster is often the safer default. The Stadia guide calls this out explicitly.\n- **Style customization has its own learning curve.** The flexibility of vector tiles only pays off if you actually build styles. If you never customize, the raster experience of Stadia's house styles is just as good visually.\n\n## Common Use Cases for Vector and Raster Map Tiles\n\nWhere each format shines, drawn from the Stadia Maps docs and product page.\n\n**Vector tile use cases:**\n\n- Interactive web and mobile apps that need custom styling, language switching, or 3D perspective\n- Marker clustering, polyline overlays, and polygon overlays in [MapLibre GL JS](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fclustering-styling-points-with-maplibre\u002F)\n- Data visualization on top of a customizable basemap\n- Applications where reducing total tile requests matters at scale\n\n**Raster tile use cases:**\n\n- WordPress sites and CMS integrations via the [Leaflet](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fwordpress-with-leaflet\u002F) or [Mapster](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fwordpress-with-mapster\u002F) plugins\n- Older devices or environments that cannot run a WebGL-based renderer\n- QGIS and other GIS tools that consume raster XYZ tile services\n- Minimalist styles like [Alidade Smooth](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmap-styles\u002Falidade-smooth\u002F) where bandwidth per tile is already very small\n\n## Frequently Asked Questions\n\n### What is the difference between vector and raster map tiles?\n\nRaster map tiles are PNG or JPG images that get stitched together in a grid. Vector map tiles contain a mathematical description of the geometry plus structured data about each feature on the map, and get rendered client-side. Vector tiles allow dynamic styling, look sharp at any resolution, and typically reduce tile requests by around 60%. Raster tiles are simpler to render and battle-tested across older devices and rendering libraries.\n\n### Which is better, vector or raster map tiles?\n\nAccording to the [Stadia Maps Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F): \"Vector tiles offer greater flexibility, look great on any screen, and typically reduce costs by around 60%. However, if your application is targeting older devices or doesn't need a high level of detail, raster tiles are not necessarily a bad option.\"\n\n### Do vector map tiles cost less than raster map tiles?\n\nOn the [Stadia Maps API](\u002Fpricing\u002F), both vector and raster tile requests are billed the same way. Vector typically requires fewer total requests to render a comparable map. The Switching to Vector Tiles guide reports users switching to vector make approximately 60% fewer tile requests on average.\n\n### What format are Stadia Maps vector tiles served in?\n\nStadia Maps vector tiles are distributed in the widely-adopted Mapbox Vector Tile (MVT) format, with a schema compatible with [OpenMapTiles](https:\u002F\u002Fopenmaptiles.org\u002F). They render in MapLibre GL JS, MapLibre Native, Leaflet (via `maplibre-gl-leaflet`), OpenLayers (via `ol-mapbox-style`), and other MVT-compatible renderers.\n\n### Can I use vector tiles with Leaflet?\n\nYes. Leaflet can render Stadia Maps vector tiles via the [`maplibre-gl-leaflet`](https:\u002F\u002Fgithub.com\u002Fmaplibre\u002Fmaplibre-gl-leaflet) plugin. You swap `L.tileLayer` for `L.maplibreGL` and point at a Stadia Maps vector style URL. This is the quickest migration path from raster Leaflet to vector without switching frameworks. Full walkthrough in the [Vector Tiles with Leaflet tutorial](https:\u002F\u002Fdocs.stadiamaps.com\u002Ftutorials\u002Fvector-tiles-with-leaflet\u002F).\n\n## Where to Go Next\n\n### From the Blog\n\nMore on maps and rendering from the Stadia Maps blog:\n\n- [How We Fixed Water Feature Rendering Across All Zoom Levels](\u002Fblog\u002Ffixing-missing-water-interactive-basemaps\u002F)\n- [2026 Satellite Imagery Update: 37M km² at 30cm Resolution](\u002Fblog\u002F2026-satellite-imagery-update\u002F)\n- [Custom Markers and POST Support for Static Maps](\u002Fblog\u002Fcustom-markers-in-static-map-images\u002F)\n- [Announcing Cacheable Static Maps](\u002Fblog\u002Fannouncing-cacheable-static-map-images\u002F)\n- [Our SwiftUI DSL Is Joining the MapLibre Family](\u002Fblog\u002Fmaplibre-swiftui-dsl\u002F)\n\n### Maps\n\n- [Vector Map Tiles docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fvector\u002F) for tile URLs, authentication, and renderer support\n- [Raster Map Tiles docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fraster\u002F) for PNG tile URL formats and retina support\n- [Switching to Vector Tiles guide](https:\u002F\u002Fdocs.stadiamaps.com\u002Fguides\u002Fswitching-your-maps-from-raster-to-vector-tiles\u002F) for a full migration walkthrough\n- [Map Styles library](https:\u002F\u002Fdocs.stadiamaps.com\u002Fthemes\u002F) for the complete gallery of Stadia house styles\n- [Interactive Web Maps overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Fmaps-for-web\u002F) for renderer selection and framework choices\n- [Custom Map Styling](https:\u002F\u002Fdocs.stadiamaps.com\u002Fcustom-styles\u002F) for building your own styles on top of the OpenMapTiles schema\n- [Maps product page](\u002Fproducts\u002Fmaps\u002F) and pricing tiers\n- [Static Maps product page](\u002Fproducts\u002Fmaps\u002Fstatic-maps\u002F) if you need pre-rendered map images instead\n",{"title":11,"description":533,"path":12,"published":534,"category":535,"rawbody":536},"Address autocomplete suggests places, addresses, and points of interest as users type. Learn how it works and how to add it with Stadia Maps SDKs and API.","2026-07-28","Geocoding & Search","---\ntitle: What Is Address Autocomplete?\ndescription: Address autocomplete suggests places, addresses, and points of interest as users type. Learn how it works and how to add it with Stadia Maps SDKs and API.\nauthor: Stadia Maps Team\ncategory: Geocoding & Search\nimage: \u002Fimages\u002Fog\u002Fwhat-is-address-autocomplete.png\nhead:\n  script: []\npublished: 2026-07-28\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is address autocomplete used for?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Address autocomplete is used to suggest places, addresses, and points of interest as a user types. It powers search-as-you-type experiences in checkout flows, store locators, ride-share pickup selection, and any interface where a user needs to find and select a real-world location quickly.\n      - \"@type\": Question\n        name: What is the difference between address autocomplete and forward geocoding?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Autocomplete is optimized for speed on partial input. Forward geocoding is optimized for accuracy on complete input and can interpolate addresses. Use autocomplete for interactive search-as-you-type; switch to forward geocoding when the user finalizes the query.\n      - \"@type\": Question\n        name: Which SDKs does Stadia Maps offer for address autocomplete?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: \"Stadia Maps offers three first-party SDKs for address autocomplete: the MapLibre GL JS Search Box plugin for the web, SwiftUI Autocomplete Search for iOS, and Jetpack Compose Autocomplete Search for Android. Each handles debouncing, caching, and result ordering out of the box. If none fit, the underlying HTTP API is available directly.\"\n      - \"@type\": Question\n        name: What are the default autocomplete timing and input settings on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: The Stadia Maps autocomplete SDKs default to a 100ms minimum wait period between requests (minWaitPeriodMs) and a 3-character minimum input length (minInputLength). The MapLibre GL JS Search Box plugin also defaults to 5 maximum results (maxResults). These defaults balance server load with responsiveness.\n      - \"@type\": Question\n        name: How is an address autocomplete request billed on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Autocomplete requests are billed from the unified Stadia Maps API credit pool, the same pool that covers forward geocoding, reverse geocoding, routing, and tiles. Each autocomplete request is a single billable request.\nterm: Address Autocomplete\ntermDescription: A search-as-you-type interface that suggests addresses, places, and points of interest as a user types, ranked by relevance and proximity.\n---\n\n# What Is Address Autocomplete?\n\nAddress autocomplete is a search-as-you-type interface that suggests addresses, places, and points of interest as a user types, ranked by relevance and proximity. Also called type-ahead search, place search suggestions, or predictive search, address autocomplete is what turns a slow, error-prone address form into a two-tap interaction. The [Stadia Maps Autocomplete Search API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) powers this experience through a fast, partial-input endpoint plus first-party SDKs for the web, iOS, and Android.\n\n## Key Takeaways\n\n- Address autocomplete suggests places as a user types, based on partial input and typically ranked by proximity or a focus point.\n- It is not a substitute for forward geocoding. Autocomplete is tuned for speed on partial input; forward geocoding is tuned for accuracy on complete input and can interpolate addresses.\n- Stadia Maps ships three first-party SDKs (MapLibre GL JS, SwiftUI, Jetpack Compose) that handle debouncing, caching, and result ordering out of the box.\n- The Stadia Maps SDKs default to a 100ms minimum wait period between requests and a 3-character minimum input length.\n- Each autocomplete request is billed as a single request from the unified Stadia Maps API credit pool.\n\n## How Address Autocomplete Works\n\nAutocomplete is a variant of forward geocoding tuned for speed on incomplete input. It follows this rough flow:\n\n1. **User types.** The client waits for a minimum number of characters (typically two or three) before firing the first request.\n2. **Debounce.** The client waits a short interval (roughly 100ms) after each keystroke before sending a request, so it does not overwhelm the server on fast typing.\n3. **Server searches.** The [Stadia Maps Autocomplete Search API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) matches the partial input against the geocoding database and returns ranked candidates.\n4. **Client renders results.** Suggestions appear under the search field, typically 3 to 5 at a time.\n5. **User selects one.** The application takes the selected feature (with its full coordinates, address components, and layer) and moves on to the next step.\n\nTwo implementation details that matter in production:\n\n- **Out-of-order responses.** Fast typing produces overlapping requests. The client must show the response for the most recent input, not the last one to arrive. Modern async frameworks and the Stadia Maps SDKs handle this automatically.\n- **Result caching.** Recent queries can be served from the local cache, which cuts perceived latency and reduces API calls.\n\n## Which Autocomplete SDK Should You Use?\n\nStadia Maps ships three first-party SDKs for address autocomplete, each purpose-built for its platform. All of them handle debouncing, caching, out-of-order responses, and result ordering by default.\n\n- **[MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F)** for the web. Adds a search control to a MapLibre GL JS map. Configurable via options like `useMapFocusPoint`, `mapFocusPointMinZoom`, `minInputLength`, and `minWaitPeriodMs`. Available as an npm package or a CDN script tag.\n- **[SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F)** for iOS. A drop-in SwiftUI view for native iOS apps.\n- **[Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F)** for Android. A composable for native Android apps built with Jetpack Compose.\n\nIf none of the three fit your stack (React Native, Flutter, a custom UI framework, or a server-side integration), use the underlying HTTP API directly. The Stadia Maps [official SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Foverview\u002F) also expose the endpoint from TypeScript, Python, Kotlin, Swift, and PHP.\n\n## Address Autocomplete Parameters That Matter\n\nThe [Autocomplete Search endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) takes one required parameter and several optional ones that tune the result set.\n\n- **`text`**: The partial user input. Required.\n- **`focus.point.lat` \u002F `focus.point.lon`**: Bias results toward a focus point. Typically the map center or the user's known location.\n- **`boundary.rect.*`, `boundary.circle.*`, `boundary.country`, `boundary.gid`**: Hard limits on where results can appear. Use these when your product only operates in specific regions.\n- **`layers`**: Restrict to specific layers (`address`, `venue`, `poi`, `street`, `locality`, and more). Fewer layers means faster, more relevant results. `layers=coarse` is the fastest option when you do not need addresses or POIs.\n- **`sources`**: Restrict to specific data sources (`openstreetmap`, `openaddresses`, `whosonfirst`, `geonames`, `foursquare`).\n- **`size`**: Maximum number of results to return. Default is 10; most autocomplete UIs display 3 to 5.\n- **`lang`**: A BCP47 language tag for localized results.\n\n## Autocomplete Defaults Worth Knowing\n\nThe [Stadia Maps SDKs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F#ready-to-go-integrations) enforce a set of defaults documented in the API and SDK references. Each one exists to balance API cost, server load, and interaction responsiveness.\n\n- **Minimum input length.** The [Autocomplete Search docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) recommend waiting for two or three characters of user input before sending a query. The [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) defaults `minInputLength` to 3.\n- **Debouncing.** The MapLibre plugin defaults `minWaitPeriodMs` to 100ms, meaning it waits 100ms between requests as the user types. The docs recommend throttling or debouncing for interactive applications; the ready-to-go integrations handle it automatically.\n- **Result caching.** The MapLibre plugin caches recent results to avoid duplicate calls.\n- **Out-of-order response handling.** The docs call this out explicitly: \"network requests might arrive out of order... our frameworks handle it automatically.\" Take care if you build your own low-level integration.\n- **Maximum results.** The MapLibre plugin defaults `maxResults` to 5.\n- **Layer selection.** Specifying only the [layers](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) you need improves relevance and performance. `layers=coarse` is especially useful when POIs and addresses are not needed.\n\n## How Do You Add Address Autocomplete?\n\nHere is what a direct call to the Stadia Maps Autocomplete Search API looks like. This example searches for a partial query in Tallinn, Estonia.\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv2\u002Fautocomplete?text=Union+Squa&lang=en\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature includes coordinates, parsed address components, layer, confidence score, and source attribution. Full response format details are in the [Common Response Format docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fapi-response-format\u002F).\n\nFor most applications, the [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F), [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F), or [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) will be faster than building a UI on top of the raw API. For runnable code against the HTTP endpoint in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Autocomplete Search API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F).\n\n## Where Address Autocomplete Falls Short\n\nAutocomplete is not the right tool for every search interaction. Real limits worth knowing:\n\n- **Autocomplete does not interpolate addresses.** If a specific house number does not exist in the underlying data, forward geocoding can estimate it from surrounding addresses. Autocomplete cannot. Fall back to [forward geocoding](\u002Flearn\u002Fgeocoding\u002F) once the user finalizes their query.\n- **Very short queries are noisy.** A one-character query returns hundreds of matches. The Stadia Maps SDKs default to a 3-character minimum. Lowering that produces bad UX.\n- **Ranking is context-dependent.** Without a `focus.point` or a boundary, \"Springfield\" could match any of dozens. Provide a focus point or country hint whenever possible.\n- **Layer choice affects results.** If you only need addresses and POIs, exclude administrative layers to speed things up. If you only need administrative context, use `layers=coarse` for the fastest possible search.\n- **Two providers rarely agree exactly.** Different providers use different data, different scoring, and different ranking logic. Standardize on one provider to keep your product consistent.\n\n## Address Autocomplete vs. Forward Geocoding: Which Do You Need?\n\nBoth convert human-readable place input into coordinates. They optimize for different phases of the user interaction.\n\n- Use **[address autocomplete](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)** while the user is still typing. Fast responses, partial input, ranked suggestions.\n- Use **[forward geocoding](\u002Flearn\u002Fgeocoding\u002F)** once the user finalizes their query (for example, by pressing Enter or submitting a form). Better accuracy on complete input, and forward geocoding can interpolate house numbers that autocomplete cannot.\n\nThe MapLibre GL JS Search Box plugin can automatically switch to the forward geocoding endpoint on Enter via the `searchOnEnter` option, if your plan includes the forward geocoding endpoint. See the [Stadia Maps pricing page](\u002Fpricing\u002F) for plan details.\n\n## Common Address Autocomplete Use Cases\n\nAutocomplete appears wherever a product asks a user to enter a real-world place.\n\n- **Checkout and shipping forms.** Users select their delivery address from suggestions instead of typing the full string. Fewer errors, faster completion, and higher form conversion.\n- **Ride-share and delivery pickup.** Rider or customer picks their pickup or drop-off from a search field. Focus point is set to the current GPS location so nearby options rank first.\n- **Store locator and site finder.** User types a city or zip code and the map centers on the selected result.\n- **Map-based search interfaces.** Real estate, travel, and outdoor apps let users search for places directly on the map.\n- **Data entry and CRM lookup.** Sales and support tools use autocomplete to attach a canonical place to a record.\n- **Point-of-interest discovery.** Restaurants, hotels, landmarks, and businesses surface as venues the user can select without knowing the full name.\n\n## Frequently Asked Questions\n\n### What is address autocomplete used for?\n\nAddress autocomplete is used to suggest places, addresses, and points of interest as a user types. It powers search-as-you-type experiences in checkout flows, store locators, ride-share pickup selection, and any interface where a user needs to find and select a real-world location quickly.\n\n### What is the difference between address autocomplete and forward geocoding?\n\nAutocomplete is optimized for speed on partial input. [Forward geocoding](\u002Flearn\u002Fgeocoding\u002F) is optimized for accuracy on complete input and can interpolate addresses. Use autocomplete for interactive search-as-you-type; switch to forward geocoding when the user finalizes the query, for example by pressing Enter.\n\n### Which SDKs does Stadia Maps offer for address autocomplete?\n\nStadia Maps offers three first-party SDKs for address autocomplete: the [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) for the web, [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F) for iOS, and [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) for Android. Each handles debouncing, caching, and result ordering out of the box. If none fit, the underlying HTTP API is available directly.\n\n### What are the default autocomplete timing and input settings on Stadia Maps?\n\nThe Stadia Maps autocomplete SDKs default to a 100ms minimum wait period between requests (`minWaitPeriodMs`) and a 3-character minimum input length (`minInputLength`). The [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) also defaults `maxResults` to 5. These defaults balance server load with responsiveness.\n\n### How is an address autocomplete request billed on Stadia Maps?\n\nAutocomplete requests are billed from the unified [Stadia Maps API](\u002Fpricing\u002F) credit pool, the same pool that covers forward geocoding, reverse geocoding, routing, and tiles. Each autocomplete request is a single billable request.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding and search from the Stadia Maps blog:\n\n- [The Hidden Cost of Search: Why Your Geocoding Bill Is Higher Than It Should Be](\u002Fblog\u002Fwhy-is-your-geocoding-bill-higher-than-it-should-be\u002F)\n- [The Open Data Superpower: Why Global Search Is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [Autocomplete Search for SwiftUI and Jetpack Compose](\u002Fblog\u002Fautocomplete-search-for-swiftui-and-jetpack-compose\u002F)\n- [Introducing Geocoding & Search v2](\u002Fblog\u002Fintroducing-stadia-maps-geocoding-search-v2\u002F)\n\n### Geocoding & Search\n\n- [What Is Geocoding?](\u002Flearn\u002Fgeocoding\u002F) for the complete forward-direction overview\n- [What Is Reverse Geocoding?](\u002Flearn\u002Freverse-geocoding\u002F) for the opposite direction\n- [Autocomplete Search API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F) for the full parameter set\n- [MapLibre GL JS Search Box plugin](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fmaplibre-gl-js-autocomplete-search-plugin\u002F) for the web\n- [SwiftUI Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fswiftui-autocomplete-search\u002F) for iOS\n- [Jetpack Compose Autocomplete Search](https:\u002F\u002Fdocs.stadiamaps.com\u002Fsdks\u002Fjetpack-compose-autocomplete-search\u002F) for Android\n- [Layers documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Flayers\u002F) for the full list of returnable place types\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F): the five open data providers behind the API\n- [Autocomplete Search product page](\u002Fproducts\u002Fgeocoding-search\u002Fautocomplete-search\u002F) and pricing tiers\n",{"title":538,"description":539,"path":540,"published":541,"category":535,"rawbody":542},"What Is Geocoding?","Master geocoding fundamentals: Convert addresses to coordinates and vice versa. Learn how our global geocoding API works, data accuracy levels, and best practices.","\u002Flearn\u002Fgeocoding","2026-07-14","---\ntitle: What Is Geocoding?\ndescription: \"Master geocoding fundamentals: Convert addresses to coordinates and vice versa. Learn how our global geocoding API works, data accuracy levels, and best practices.\"\ncategory: Geocoding & Search\nhead:\n  script: []\nimage: \u002Fimages\u002Fog\u002Fwhat-is-geocoding.png\npublished: 2026-07-14\nschemaOrg:\n  - \"@type\": FAQPage\n    mainEntity:\n      - \"@type\": Question\n        name: What is address geocoding?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Address geocoding is the process of converting a street address or place name into geographic coordinates (latitude and longitude). It is the primary way products bridge between human-readable location input and machine-readable spatial data. The Stadia Maps Geocoding API handles address geocoding through its forward geocoding, structured geocoding, and autocomplete endpoints.\n      - \"@type\": Question\n        name: What is the difference between geocoding and reverse geocoding?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: \"Geocoding (forward geocoding) converts an address or place name into coordinates. Reverse geocoding does the opposite: it converts coordinates into an address or place. Products that combine both directions are common.\"\n      - \"@type\": Question\n        name: What data sources does the Stadia Maps Geocoding API use?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: \"The Stadia Maps Geocoding API queries five documented open sources: OpenStreetMap for global roads and points of interest, OpenAddresses for authoritative government address data, Who's On First for administrative places, GeoNames for populated places and natural features, and Foursquare Open Source Places for business and venue data.\"\n      - \"@type\": Question\n        name: Can I store geocoded addresses permanently on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Yes. With a Standard, Professional, or Enterprise subscription, geocoded results can be stored permanently in your own database. Most competitor APIs charge a premium to allow storage.\n      - \"@type\": Question\n        name: How much does a geocoding request cost on Stadia Maps?\n        acceptedAnswer:\n          \"@type\": Answer\n          text: Geocoding requests are billed from a unified credit pool on the Stadia Maps API, the same pool that covers routing, tiles, and other endpoints. Forward, reverse, structured, and autocomplete requests are each single billable requests. Bulk geocoding is billed per address in the batch.\nterm: Geocoding\ntermDescription: The process of converting an address, place name, or point of interest into geographic coordinates.\n---\n\n# What Is Geocoding?\n\n[Geocoding](https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FAddress_geocoding) is the process of converting an address, place name, or point of interest into geographic coordinates (latitude and longitude). Also called address geocoding, address lookup, or place search, geocoding is the foundation of any product that needs to bridge human-readable places and machine-readable coordinates. Reverse geocoding does the opposite: it takes a coordinate pair and returns the nearest place. The [Stadia Maps Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) handles both directions, along with structured, bulk, and autocomplete variants, and draws on a documented set of open data sources so the provenance of every result is inspectable.\n\n## Key Takeaways\n\n- Geocoding converts a human-readable address or place name into geographic coordinates (latitude and longitude). Reverse geocoding does the opposite.\n- Geocoding quality depends on the underlying data. The Stadia Maps Geocoding API documents its five sources: OpenStreetMap, OpenAddresses, Who's On First, GeoNames, and Foursquare Open Source Places.\n- One credit pool covers forward, reverse, structured, bulk, and autocomplete variants. Pick the endpoint that matches the input shape.\n- Accuracy varies by country. Build a confidence check into any product that geocodes internationally.\n- Stadia Maps permits permanent storage of geocoded results on Standard, Professional, and Enterprise plans without a per-request surcharge.\n\n## Forward vs. Reverse Geocoding\n\nGeocoding has a direction. Every product decision that involves it starts with picking the right one.\n\n- **Forward geocoding** takes a string like `Pärnu mnt 388b` and returns coordinates like `59.381096, 24.661382`. Used for search bars, address forms, and any workflow where a user or dataset knows the place name and needs the location.\n- **Reverse geocoding** takes coordinates like `59.381096, 24.661382` and returns the nearest known place. Used when the input is a GPS fix, a map click, or an IoT device pinging its location.\n\nSome products need both. A ride-share driver's phone reverses their coordinates to display an address; the passenger's app forward-geocodes a destination string to route to it. The [Stadia Maps Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) exposes separate endpoints for each direction, plus specialized ones for autocomplete, structured input, and bulk processing.\n\n## How Geocoding Actually Works\n\nUnder the hood, a geocoder is a chain of parsing, matching, scoring, and ranking decisions. The steps look roughly like this:\n\n1. **Parse the input.** Break the query into components (house number, street, city, postal code, country, place type).\n2. **Search candidate records.** Query the underlying database for matches across the relevant data sources and layers.\n3. **Score candidates.** Rank by string similarity, geographic focus, layer priority, and boundary constraints.\n4. **Interpolate when necessary.** For addresses that do not exist verbatim in the database, the geocoder can estimate the location by interpolating along the street segment. Not every geocoder does this. The Stadia Maps [Forward Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F) does.\n5. **Return the best matches** with a confidence score and full attribution so the caller can decide what to trust.\n\nThe details of each step vary by provider, which is why two geocoders can return different results for the same query. Understanding this pipeline is the difference between debugging a geocoding bug in an hour and shipping a workaround that quietly returns the wrong city for 3% of your users.\n\n## What Data Sources Does a Geocoder Use?\n\nEvery geocoder is only as good as the data it searches. The Stadia Maps Geocoding API is transparent about what it queries; the [full source list](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F) is documented and each result carries attribution back to its origin.\n\n- [**OpenStreetMap**](https:\u002F\u002Fwww.openstreetmap.org\u002F) provides the primary global coverage for roads, addresses, and points of interest. Community-maintained and open.\n- [**OpenAddresses**](https:\u002F\u002Fopenaddresses.io\u002F) aggregates authoritative address data from government and public sources worldwide. Stadia Maps sponsors OpenAddresses.\n- [**Who's On First**](https:\u002F\u002Fwhosonfirst.org\u002F) provides a global gazetteer of administrative places (countries, regions, counties, localities, neighborhoods). Used for hierarchy and reverse geocoding at the boundary level.\n- [**GeoNames**](https:\u002F\u002Fwww.geonames.org\u002F) adds populated places, natural features, and administrative fill-in for parts of the world where OSM coverage is thinner.\n- [**Foursquare Open Source Places**](https:\u002F\u002Fdocs.foursquare.com\u002Fdata-products\u002Fdocs\u002Ffsq-places-open-source) contributes point-of-interest data for businesses and venues.\n\nFiltering the `sources` parameter lets you constrain results to a subset when you want to control what backs your search. That is a real feature; most competitor APIs treat their data provenance as a trade secret.\n\n## Key Geocoding API Parameters\n\nThe forward geocoding endpoint takes one required parameter (`text`) and several optional ones that dramatically change what you get back. Full details in the [Forward Geocoding docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F).\n\n- **`text`**: The place name or address. Required.\n- **`focus.point.lat` \u002F `focus.point.lon`**: Bias results toward a focus point. Use the user's map center or their known location to prefer nearby matches.\n- **`boundary.rect.*`, `boundary.circle.*`, `boundary.country`, `boundary.gid`**: Hard limits on where results can appear. Use these when your product only operates in specific regions.\n- **`layers`**: Restrict to specific data layers (`address`, `venue`, `postalcode`, `country`, and more). Fewer layers means faster, more relevant results.\n- **`sources`**: Restrict to specific data sources (`openstreetmap`, `openaddresses`, `whosonfirst`, `geonames`, `foursquare`). Useful when you want, for example, only address-authoritative sources for a shipping form.\n- **`size`**: Maximum number of results to return. Default is 10.\n- **`lang`**: A BCP47 language tag for localized results.\n\nThe single most common mistake is over-constraining. If your first query returns nothing, drop a boundary or a layer filter before assuming the geocoder is broken.\n\n## Why Geocoding Accuracy Varies by Country\n\nGeocoding quality is not uniform globally. Address density, government data availability, and OSM coverage all vary by country. This is a factual limitation that competitor \"what is geocoding\" pages tend to skip.\n\nSome patterns worth knowing:\n\n- **North America and Western Europe** have deep coverage across OSM, OpenAddresses, and Who's On First. Interpolation fills in most missing house numbers along known streets.\n- **Japan and parts of East Asia** use non-linear addressing systems that do not map cleanly to street-and-number geocoders. Structured input helps a lot here; see the [Structured Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F).\n- **Rapidly growing cities** in South Asia, Southeast Asia, and Africa may have addresses that exist physically but are not yet in any data source. Fuzzy matching and community-driven OSM contributions close the gap over time; expect variance.\n- **Rural and remote areas** everywhere degrade gracefully to the nearest named place rather than an exact street number.\n\nIf your product operates internationally, build in a confidence check (see the [Determining Result Quality docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F)) and design a fallback UX for low-confidence matches. Do not assume the same accuracy in every market.\n\n## How Do You Geocode an Address?\n\nHere is what a forward geocoding request to the Stadia Maps Geocoding API looks like. This example geocodes an address in Tallinn, Estonia.\n\n```http\nGET https:\u002F\u002Fapi.stadiamaps.com\u002Fgeocoding\u002Fv1\u002Fsearch?text=P%C3%B5hja+pst+27\n```\n\nThe response is a GeoJSON `FeatureCollection`. Each feature carries the coordinates, the parsed address components, a confidence score, and source attribution. Full response format details are in the [Common Response Format docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fapi-response-format\u002F).\n\nFor runnable code in TypeScript, Python, Kotlin, Swift, PHP, or cURL, see the [Stadia Maps Forward Geocoding API docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F).\n\n## Structured vs. Bulk vs. Autocomplete Geocoding\n\nForward geocoding is not always the right endpoint. The [Geocoding & Search overview](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) breaks down when to use each variant.\n\n- **Building an interactive search-as-you-type experience?** Use the [Autocomplete endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F). It is optimized for partial input and faster response times.\n- **Working with pre-parsed address components** (`house_number`, `street`, `city`, `region`, `postalcode`, `country`)? Use [Structured Geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F). It takes the guesswork out of string parsing and improves accuracy for postal addresses, especially internationally.\n- **Processing thousands of addresses at once?** Use [Bulk Geocoding](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F). Up to 5,000 queries per request.\n- **Reversing coordinates back to a place?** Use the [Reverse Geocoding endpoint](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F).\n\n## Where Geocoding Falls Short\n\nGeocoding has real limits. A page that pretends otherwise is not being honest with the reader.\n\n- **A geocoder is not an address validator.** It returns the best match it can find. If your user typed a nonexistent address, the geocoder will often return a nearest-street-segment interpolation rather than an error. Check the confidence score and layer type on every result before treating it as authoritative.\n- **Autocomplete and forward geocoding are not interchangeable.** Autocomplete is optimized for speed on partial input; forward geocoding is optimized for accuracy on complete input. Using one where the other belongs produces bad UX or bad results.\n- **Interpolated addresses are estimates, not guarantees.** The result may be tens of meters off the actual building, or on the wrong side of the street. For delivery-critical use cases, verify with a follow-up reverse geocode or with authoritative sources.\n- **Two providers rarely agree exactly.** Different providers use different data sources, different scoring, and different parsers. Pick one and standardize within your own product to avoid inconsistencies.\n- **You may or may not be allowed to store results.** Most vendors charge extra to persist geocoding results in your own database. Stadia Maps allows permanent storage on the Standard, Professional, and Enterprise plans without a surcharge; see the [terms of service](https:\u002F\u002Fstadiamaps.com\u002Fterms-of-service\u002F) for details.\n\n## Common Geocoding Use Cases\n\nGeocoding shows up anywhere a product needs to move between human-readable places and machine-readable coordinates. A partial list:\n\n- **Address forms and checkout flows.** Convert a user-entered shipping address to coordinates for downstream routing, delivery-zone checks, or tax calculation.\n- **Store locator and site finder.** Take a user's zip code or city and center the map on the corresponding coordinates.\n- **Lead enrichment and CRM cleanup.** Bulk-geocode a customer list to enable geographic segmentation, territory analysis, or field-sales routing.\n- **Logistics and last-mile delivery.** Convert delivery addresses to coordinates for isochrone-based service-area decisions or routing.\n- **Real estate search.** Geocode a listing's address to place it on a map and enable spatial queries.\n- **Location-aware AI and agents.** Give an LLM or agent the ability to translate free-text user requests (\"a coffee shop near Union Square\") into structured coordinates for a follow-up API call.\n\n## Frequently Asked Questions\n\n### What is address geocoding?\n\nAddress geocoding is the process of converting a street address or place name into geographic coordinates (latitude and longitude). It is the primary way products bridge between human-readable location input and machine-readable spatial data. The [Stadia Maps Geocoding API](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) handles address geocoding through its forward geocoding, structured geocoding, and autocomplete endpoints.\n\n### What is the difference between geocoding and reverse geocoding?\n\nGeocoding (forward geocoding) converts an address or place name into coordinates. Reverse geocoding does the opposite: it converts coordinates into an address or place. Products that combine both directions are common. For example, a user types a destination (forward geocoded) and a driver's phone shows the address of their current GPS position (reverse geocoded).\n\n### What data sources does the Stadia Maps Geocoding API use?\n\nThe Stadia Maps Geocoding API queries five documented open sources: [OpenStreetMap](https:\u002F\u002Fwww.openstreetmap.org\u002F) for global roads and points of interest, [OpenAddresses](https:\u002F\u002Fopenaddresses.io\u002F) for authoritative government address data, [Who's On First](https:\u002F\u002Fwhosonfirst.org\u002F) for administrative places, [GeoNames](https:\u002F\u002Fwww.geonames.org\u002F) for populated places and natural features, and [Foursquare Open Source Places](https:\u002F\u002Fdocs.foursquare.com\u002Fdata-products\u002Fdocs\u002Ffsq-places-open-source) for business and venue data. Every result carries attribution back to its source; see the [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F) for the full list.\n\n### Can I store geocoded addresses permanently on Stadia Maps?\n\nYes, with a Standard, Professional, or Enterprise subscription, geocoded results can be stored permanently in your own database. Most competitor APIs charge a premium (often 10x the standard request price) to allow storage. See the [Stadia Maps terms of service](https:\u002F\u002Fstadiamaps.com\u002Fterms-of-service\u002F) for the full policy.\n\n### How much does a geocoding request cost on Stadia Maps?\n\nGeocoding requests are billed from a unified credit pool on the [Stadia Maps API](\u002Fpricing\u002F), the same pool that covers routing, tiles, and other endpoints. Forward, reverse, structured, and autocomplete requests are each single billable requests. Bulk geocoding is billed per address in the batch. See the pricing page for plan tiers and credit allocations.\n\n## Where to Go Next\n\n### From the Blog\n\nMore on geocoding from the Stadia Maps blog:\n\n- [The Open Data Superpower: Why Global Search is Moving Beyond Proprietary Silos](\u002Fblog\u002Fopen-data-geocoding-global-search\u002F)\n- [Precision Meets Privacy: Elevating the Consumer Search Experience](\u002Fblog\u002Fprecision-meets-privacy-consumer-search-experience\u002F)\n- [75 Million More Addresses: Expanding Geocoding Precision](\u002Fblog\u002F75-million-more-addresses-geocoding-precision\u002F)\n- [Introducing Stadia Maps Geocoding & Search v2: Supercharge Your Search](\u002Fblog\u002Fintroducing-stadia-maps-geocoding-search-v2\u002F)\n\n### Geocoding & Search\n\n- [Geocoding & Search overview docs](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Foverview\u002F) for best practices and endpoint selection\n- [Forward Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsearch\u002F)\n- [Reverse Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Freverse-search\u002F)\n- [Structured Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fstructured-search\u002F)\n- [Bulk Geocoding API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fbulk-geocoding-search\u002F)\n- [Autocomplete Search API reference](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fautocomplete\u002F)\n- [Sources documentation](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fsources\u002F): full list of data providers behind the API\n- [Determining Result Quality](https:\u002F\u002Fdocs.stadiamaps.com\u002Fgeocoding-search-autocomplete\u002Fdetermining-result-quality\u002F): how to read confidence and layer signals\n- [Geocoding product page](\u002Fproducts\u002Fgeocoding-search\u002Fgeocoding\u002F) and pricing tiers\n",{"id":544,"bio":516,"extension":18,"jobTitle":516,"meta":545,"name":546,"sameAs":547,"slug":550,"stem":551,"twitterCreator":516,"type":552,"url":553,"__hash__":554},"authors\u002Fauthors\u002Fstadia-maps.yml",{},"Stadia Maps",[548,549],"https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fstadia-maps\u002F","https:\u002F\u002Fgithub.com\u002Fstadiamaps","stadia-maps","authors\u002Fstadia-maps","Organization","https:\u002F\u002Fstadiamaps.com\u002F","jRSutfRcYEknA-OSdkWoPHgm7Iep6BJfLBIsMtzQONk",1786420640105]