<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs-staging.fused.io/pr/1042/blog</id>
    <title>Fused Blog</title>
    <updated>2025-10-30T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs-staging.fused.io/pr/1042/blog"/>
    <subtitle>Fused Blog</subtitle>
    <icon>https://docs-staging.fused.io/pr/1042/img/favicon.png</icon>
    <entry>
        <title type="html"><![CDATA[Introducing Fused AI Canvas]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/intro-fused-canvas</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/intro-fused-canvas"/>
        <updated>2025-10-30T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Today we're introducing Fused AI Canvas, a new way to organize your UDFs on a free form canvas]]></summary>
        <content type="html"><![CDATA[<p>Today we're introducing Fused AI Canvas, a new way to organize your <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/writing-udfs">UDFs</a> on a free form canvas</p>
<!-- -->
<iframe style="width:100%;max-width:800px;aspect-ratio:16/9;height:auto;margin:0 auto 2rem auto;display:block" src="https://www.youtube.com/embed/_WBYBMIraIE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-free-form-canvas">A Free Form Canvas<a href="https://docs-staging.fused.io/pr/1042/blog/intro-fused-canvas#a-free-form-canvas" class="hash-link" aria-label="Direct link to A Free Form Canvas" title="Direct link to A Free Form Canvas" translate="no">​</a></h2>
<p>Organize &amp; move your <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/writing-udfs">UDFs</a> as you build your workflow on a free form canvas, allowing you to build analysis &amp; workflows without being limited to a linear flow!</p>
<img style="width:100%;max-width:800px;height:auto;margin:0 auto 2rem auto;display:block" src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-10-30-intro-canvas/moving_elements_on_canvas.gif" alt="Moving elements on canvas">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-workflows">Create workflows<a href="https://docs-staging.fused.io/pr/1042/blog/intro-fused-canvas#create-workflows" class="hash-link" aria-label="Direct link to Create workflows" title="Direct link to Create workflows" translate="no">​</a></h2>
<p>Fused Canvas still runs individual serverless UDFs but you can now more easily connect them together</p>
<img style="width:100%;max-width:800px;height:auto;margin:0 auto 2rem auto;display:block" src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-10-30-intro-canvas/connecting_udfs.gif" alt="Connecting UDFs">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="share-in-1-click">Share in 1 click<a href="https://docs-staging.fused.io/pr/1042/blog/intro-fused-canvas#share-in-1-click" class="hash-link" aria-label="Direct link to Share in 1 click" title="Direct link to Share in 1 click" translate="no">​</a></h2>
<p>Share your work to anyone with a single click</p>
<img style="width:100%;max-width:800px;height:auto;margin:0 auto 2rem auto;display:block" src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-10-30-intro-canvas/share_in_one_link.gif" alt="Share canvas">
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out">Try it out<a href="https://docs-staging.fused.io/pr/1042/blog/intro-fused-canvas#try-it-out" class="hash-link" aria-label="Direct link to Try it out" title="Direct link to Try it out" translate="no">​</a></h2>
<p>Try out <a href="https://www.fused.io/workbench" target="_blank" rel="noopener noreferrer" class="">Fused Canvas</a> right away for free</p>]]></content>
        <author>
            <name>Sina Kashuk</name>
            <uri>https://www.linkedin.com/in/skashuk/</uri>
        </author>
        <author>
            <name>Isaac Brodsky</name>
            <uri>https://www.linkedin.com/in/isaacbrodsky/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
        <category label="canvas" term="canvas"/>
        <category label="browser" term="browser"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Building Geospatial Real-Time Analysis in Fused]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/building-geospatial-real-time-analysis-in-fused</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/building-geospatial-real-time-analysis-in-fused"/>
        <updated>2025-10-24T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Chris Kyed, Data Scientist at Pacific Spatial Solutions, showcases 3 real time geospatial analysis uses cases for Fused.]]></summary>
        <content type="html"><![CDATA[<p><a href="https://www.linkedin.com/in/christopher-kyed-1388aa156/" target="_blank" rel="noopener noreferrer" class="">Chris Kyed</a>, Data Scientist at <a href="https://www.pacificspatial.com/" target="_blank" rel="noopener noreferrer" class="">Pacific Spatial Solutions</a>, showcases 3 real time geospatial analysis uses cases for Fused.</p>
<!-- -->
<iframe style="width:100%;max-width:800px;aspect-ratio:16/9;height:auto;margin:0 auto 2rem auto;display:block" src="https://www.youtube.com/embed/0iYtFRSR9PE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<p>Last year Chris showcased how <a class="" href="https://docs-staging.fused.io/pr/1042/blog/analyzing-traffic-speeds">Pacific Spatial uses Fused to analyze 100 Billion drive records</a>. Pacific Spatial Solutions is a company that provides geospatial analysis &amp; data science services for various industries in Japan.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ocean-health-mapping">Ocean Health Mapping<a href="https://docs-staging.fused.io/pr/1042/blog/building-geospatial-real-time-analysis-in-fused#ocean-health-mapping" class="hash-link" aria-label="Direct link to Ocean Health Mapping" title="Direct link to Ocean Health Mapping" translate="no">​</a></h3>
<p>River plumes carry nutrients/sediment to the ocean and are split in 2 broad categories:</p>
<ul>
<li class="">Good plume: natural sediment/nutrient redistribute &amp; add biodiversity</li>
<li class="">Bad plume: excessive sediment/waste water and toxins/agricultural fertilizer with negative biodiversity impacts</li>
</ul>
<p>Mapping them can be helpful for understanding the health and human activities impact on the ocean.</p>
<p><img decoding="async" loading="lazy" alt="Ocean health mapping" src="https://docs-staging.fused.io/pr/1042/assets/images/chris_webinar_ocean_health-965c5f542106dc4312a8cc57b71281c8.png" width="1024" height="834" class="img_ev3q"></p>
<p>These datasets are open and available through the <a href="https://data.earth.jaxa.jp/en/" target="_blank" rel="noopener noreferrer" class="">Jaxa Earth API</a> :</p>
<ul>
<li class=""><a href="https://data.earth.jaxa.jp/en/datasets/#/id/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-CHLA.daytime.v3_global_half-monthly" target="_blank" rel="noopener noreferrer" class="">Chlorophyll-a concentration (Daytime/Half-monthly)</a></li>
<li class=""><a href="https://data.earth.jaxa.jp/en/datasets/#/id/JAXA.G-Portal_GCOM-C.SGLI_standard.L3-SST.daytime.v3_global_half-monthly" target="_blank" rel="noopener noreferrer" class="">Sea surface temperature (Daytime/Half-monthly)</a></li>
<li class=""><a href="https://data.earth.jaxa.jp/en/datasets/#/id/JAXA.EORC_GSMaP_standard.Gauge.00Z-23Z.v6_half-monthly" target="_blank" rel="noopener noreferrer" class="">Precipitation Rate (Half-monthly)</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rainfall--incidence-data">Rainfall &amp; Incidence Data<a href="https://docs-staging.fused.io/pr/1042/blog/building-geospatial-real-time-analysis-in-fused#rainfall--incidence-data" class="hash-link" aria-label="Direct link to Rainfall &amp; Incidence Data" title="Direct link to Rainfall &amp; Incidence Data" translate="no">​</a></h3>
<p>Traffic accidents and traffic safety has been one of the most important problems for the last many decades. Now that we have publicly accessible data regarding the accidents, we need to find ways to access and analyze it.</p>
<p>The Japanese National Police Agency published yearly traffic incidence data all around the country.</p>
<ul>
<li class=""><a href="https://www.npa.go.jp/publications/statistics/koutsuu/opendata/index_opendata.html" target="_blank" rel="noopener noreferrer" class="">Index of Open data on traffic accident statistics</a></li>
</ul>
<p><img decoding="async" loading="lazy" alt="Japan incidence data" src="https://docs-staging.fused.io/pr/1042/assets/images/japan_incidence_data-6ac3b5f305c90bc98b2b274cd0a80637.png" width="1508" height="928" class="img_ev3q"></p>
<p>Explore the code directly in Fused:</p>
<ul>
<li class=""><a href="https://www.fused.io/workbench/udf/catalog/community_max_html_accident_h3_tile-565a9469-8557-4415-a964-9b5da4cb49f5" target="_blank" rel="noopener noreferrer" class="">Incidence Data as tiled H3</a></li>
<li class=""><a href="https://www.fused.io/workbench/udf/catalog/community_max_JP_intersection_accidents-c96ff8c6-9fae-4532-9f49-7c0be0134beb" target="_blank" rel="noopener noreferrer" class="">Japanese Police Intersection Accidents</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="tokyo-shadow-map">Tokyo Shadow Map<a href="https://docs-staging.fused.io/pr/1042/blog/building-geospatial-real-time-analysis-in-fused#tokyo-shadow-map" class="hash-link" aria-label="Direct link to Tokyo Shadow Map" title="Direct link to Tokyo Shadow Map" translate="no">​</a></h3>
<p>Japanese summers can get very hot, which is amplified in large urban areas creating urban heat islands.</p>
<p>Prolonged exposure to the sun can cause dehydration and sunstroke, so we want to give Tokyo residents and tourists an app that can help them navigate the city in a more comfortable way.</p>
<p>Pacific Spatial Solutions is creating shadow maps for the city of Tokyo by combining 121 point clouds in batch and transforming them into 0.5m resolution DSM data and dynamically rendering them in Fused:</p>
<p><img decoding="async" loading="lazy" alt="Tokyo shadow maps" src="https://docs-staging.fused.io/pr/1042/assets/images/tokyo_shadow_maps-1f6b3f5e8cca3ac06ae2ec44b5ccd432.png" width="1024" height="774" class="img_ev3q"></p>
<ul>
<li class=""><a href="https://tokyooasis.com/search.html?category=idea" target="_blank" rel="noopener noreferrer" class="">Online Japan Shadow Map</a></li>
<li class=""><a href="https://3dview.tokyo-digitaltwin.metro.tokyo.lg.jp/" target="_blank" rel="noopener noreferrer" class="">3D point cloud data</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="learn-more-about-fused">Learn more about Fused<a href="https://docs-staging.fused.io/pr/1042/blog/building-geospatial-real-time-analysis-in-fused#learn-more-about-fused" class="hash-link" aria-label="Direct link to Learn more about Fused" title="Direct link to Learn more about Fused" translate="no">​</a></h3>
<ul>
<li class="">Try out <a href="https://www.fused.io/workbench" target="_blank" rel="noopener noreferrer" class="">Fused for yourself</a> for free!</li>
<li class="">Dive deeper in the <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/geospatial-single-vs-tile">Geospatial with Fused</a> tutorials</li>
<li class="">Learn more about working with <a class="" href="https://docs-staging.fused.io/pr/1042/guide/h3-analytics/h3-overview">H3 Tiles</a></li>
</ul>]]></content>
        <author>
            <name>Christopher Kyed</name>
            <uri>https://www.linkedin.com/in/christopher-kyed-1388aa156/</uri>
        </author>
        <category label="weather" term="weather"/>
        <category label="rainfall" term="rainfall"/>
        <category label="global" term="global"/>
        <category label="ocean" term="ocean"/>
        <category label="hex" term="hex"/>
        <category label="geospatial" term="geospatial"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Analytics is Changing (Again)]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/analytics-is-changing</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/analytics-is-changing"/>
        <updated>2025-08-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[AI has revolutionized how we write code; now it's reshaping how data teams can work.]]></summary>
        <content type="html"><![CDATA[<p>AI has revolutionized how we write code; now it's reshaping how data teams can work.</p>
<!-- -->
<!-- -->
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="data--compute--llms--analytics-at-the-speed-of-thought">Data + Compute + LLMs = Analytics at the Speed of Thought<a href="https://docs-staging.fused.io/pr/1042/blog/analytics-is-changing#data--compute--llms--analytics-at-the-speed-of-thought" class="hash-link" aria-label="Direct link to Data + Compute + LLMs = Analytics at the Speed of Thought" title="Direct link to Data + Compute + LLMs = Analytics at the Speed of Thought" translate="no">​</a></h3>
<p>The way we <strong>interact with data changes constantly</strong>; we only need to look at the last few years to see that we are seeing a shift as part of the <a href="https://wesmckinney.com/blog/looking-back-15-years/" target="_blank" rel="noopener noreferrer" class="">"Great Decoupling”</a> – a broader movement toward zero-infrastructure.</p>
<p>By adding Serverless Compute – via <strong>cloud functions</strong> or the <strong>browser</strong> – to formats like Apache Parquet and engines such as DuckDB, we unlock blazing fast analytics without clusters or VMs. Now AI is entering the mix, and we think this is the perfect timing to put all the pieces together.</p>
<p>We don’t think analysts, data engineers &amp; scientists are going anywhere. We believe that <a href="https://www.forbes.com/sites/reeceakhtar/2025/03/27/ai-wont-replace-you-a-human-using-ai-will/" target="_blank" rel="noopener noreferrer" class="">“AI won’t replace you, a human using AI will”</a>. AI amplifies the creativity and speed of the people already doing the work.</p>
<p>Here’s how we think the future of analytics looks like:</p>
<ul>
<li class=""><strong>Data context limits hallucination</strong>: Having LLMs know exactly about the structure and content of your data means AI is much less likely to hallucinate.</li>
<li class=""><strong>Code execution as validation</strong>: AI code editors help write code, but can’t actually run it. At Fused we’re building on top of our <a class="" href="https://docs-staging.fused.io/pr/1042/quickstart/data-science">real time execution engine</a>, so errors in code are spotted and fixed much faster, all in the same workflow.</li>
<li class=""><strong>Human analysts to guide the work</strong>: LLMs can write every possible query imaginable to parse a dataset, or make whichever chart you want. Answering the questions becomes easier, so asking the right questions becomes more valuable.</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Three ways working with AI is changing analytics" src="https://docs-staging.fused.io/pr/1042/assets/images/3_points_fused_overview-5a8a791b571e97ce94f9dbec05ae877d.png" width="2092" height="1036" class="img_ev3q"></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="so-what-is-vibe-analytics">So... What is Vibe Analytics?<a href="https://docs-staging.fused.io/pr/1042/blog/analytics-is-changing#so-what-is-vibe-analytics" class="hash-link" aria-label="Direct link to So... What is Vibe Analytics?" title="Direct link to So... What is Vibe Analytics?" translate="no">​</a></h3>
<p>A few months ago Andrej Karpathy coined the term <a href="https://x.com/karpathy/status/1886192184808149383" target="_blank" rel="noopener noreferrer" class="">Vibe Coding</a>: letting LLMs loose and just give in to whatever code suggestion comes around, to quickly get a prototype of a new project, specifically for web development.</p>
<p>We’ve since seen the term <a href="https://sloanreview.mit.edu/article/vibe-analytics-vibe-codings-new-cousin-unlocks-insights/" target="_blank" rel="noopener noreferrer" class="">Vibe Analytics</a> starting to pop up around, applying a similar approach but to analytics: leveraging LLMs to make it easier and faster to create analysis, make dashboards and share them to the rest of the team.</p>
<div class="video__wrapper"><video src="https://youtu.be/h27JcnQp250" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<p>There are a few core differences though:</p>
<ul>
<li class=""><strong>Analytics have to be based on real data</strong>: This is where having data-aware LLMs becomes so much more important.</li>
<li class=""><strong>Integrated with your tools</strong>: Unlike building web apps, analytics workflows require access to data and compute. Files need to be read &amp; analysed by AI directly. Doing this properly isn’t only about making an AI Code Editor and pushing the code up once it’s written.</li>
<li class=""><strong>Human guidance throughout</strong>: LLMs are incredibly knowledgeable but have no self awareness of what they actually are doing. It’s still important to have proper analysts &amp; engineers to guide the work.</li>
</ul>
<div style="display:flex;justify-content:center"><table><thead><tr><th></th><th><strong>Vibe Coding</strong></th><th><strong>Vibe Analytics</strong></th></tr></thead><tbody><tr><td><strong>Context</strong></td><td>None, starting from scratch</td><td>Rooted in existing data</td></tr><tr><td><strong>Output</strong></td><td>Code, experiments</td><td>Live insights, dashboards, APIs based on real datasets</td></tr><tr><td><strong>Guidance</strong></td><td>Fast loops via UI</td><td>Human-in-the-loop workflows</td></tr><tr><td><strong>Purpose</strong></td><td>Rapidly creating app prototypes</td><td>Quickly answering complex data questions</td></tr></tbody></table></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="come-build-with-us">Come Build With Us!<a href="https://docs-staging.fused.io/pr/1042/blog/analytics-is-changing#come-build-with-us" class="hash-link" aria-label="Direct link to Come Build With Us!" title="Direct link to Come Build With Us!" translate="no">​</a></h3>
<p>Help us build the <a href="https://fused.io/" target="_blank" rel="noopener noreferrer" class="">future of data analytics</a>. Reach out to us directly (<a href="mailto:info@fused.io" target="_blank" rel="noopener noreferrer" class="">info@fused.io</a>) or see our <a href="https://www.fused.io/careers" target="_blank" rel="noopener noreferrer" class="">open positions</a>.</p>
<hr>
<p>We did take inspiration from Andrej Karpathy's recent <a href="https://youtu.be/LCEmiRjPEtQ?si=TbwyWDJvJbgZNPKX" target="_blank" rel="noopener noreferrer" class="">Software is Changing (Again)</a> talk at AI Startup School, as you may have noticed from the title.</p>]]></content>
        <author>
            <name>Sina Kashuk</name>
            <uri>https://www.linkedin.com/in/skashuk/</uri>
        </author>
        <author>
            <name>Isaac Brodsky</name>
            <uri>https://www.linkedin.com/in/isaacbrodsky/</uri>
        </author>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="announcements" term="announcements"/>
        <category label="ai chat" term="ai chat"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fused is SOC2 Type 1 Compliant!]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/fused-is-soc2-type1-compliance</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/fused-is-soc2-type1-compliance"/>
        <updated>2025-07-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We're excited to announce that Fused has achieved SOC 2 Type 1 compliance. This is a significant milestone for us, as it demonstrates our commitment to security and transparency.]]></summary>
        <content type="html"><![CDATA[<p>We're excited to announce that Fused has achieved SOC 2 Type 1 compliance. This is a significant milestone for us, as it demonstrates our commitment to security and transparency.</p>
<!-- -->
<p>At Fused, we want to allow all data teams to get work done quickly. We want to make sure to do this on top of a secure and compliant platform.</p>
<p>Through the comprehensive auditing process overseen by <a href="https://insightassurance.com/" target="_blank" rel="noopener noreferrer" class="">Insight Assurance</a>, we've demonstrated our adherence
to the stringent requirements outlined by the SOC 2 Type 1 standard, reinforcing our dedication to safeguarding
sensitive data and maintaining operational resilience.</p>
<p>Request the full report by email: <code>info@fused.io</code>.</p>
<p>We're actively pursuing SOC 2 Type 2 certification, building on our existing Type 1 compliance.</p>]]></content>
        <author>
            <name>Isaac Brodsky</name>
            <uri>https://www.linkedin.com/in/isaacbrodsky/</uri>
        </author>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="announcements" term="announcements"/>
        <category label="security" term="security"/>
        <category label="enterprise" term="enterprise"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Notes from EO Summit 2025]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/notes-from-eo-summit</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/notes-from-eo-summit"/>
        <updated>2025-06-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Last week, we were at EO Summit, Fused came out of beta, we officially launched our new site and are open for business!]]></summary>
        <content type="html"><![CDATA[<p>Last week, we were at EO Summit, <a href="https://www.fused.io/" target="_blank" rel="noopener noreferrer" class="">Fused</a> came out of beta, we officially launched our new site and are open for business!</p>
<p>Our mission is to <a href="https://youtu.be/btIhyq2KbN0?si=xAScmWKokKsmRSI8" target="_blank" rel="noopener noreferrer" class="">help data teams get stuff done quickly</a>, which is relevant for the people we talked to at EO Summit.</p>
<!-- -->
<!-- -->
<p><img decoding="async" loading="lazy" alt="Fused at EO Summit" src="https://docs-staging.fused.io/pr/1042/assets/images/fused_at_EO_summit_higher_res-8452cb00fa3a7e1fe8191bd4d88588ce.jpeg" width="1024" height="768" class="img_ev3q"></p>
<p>Here are some of our takeaways:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-ai-makes-writing-code-simpler-but-executing-it-at-scale-is-still-hard">1. AI makes writing code simpler, but executing it at scale is still hard<a href="https://docs-staging.fused.io/pr/1042/blog/notes-from-eo-summit#1-ai-makes-writing-code-simpler-but-executing-it-at-scale-is-still-hard" class="hash-link" aria-label="Direct link to 1. AI makes writing code simpler, but executing it at scale is still hard" title="Direct link to 1. AI makes writing code simpler, but executing it at scale is still hard" translate="no">​</a></h3>
<p>A lot of us are going through a bit of an existential crisis, while realising that damn, yep, AI can help us write code to glue datasets together quickly. Knowing the intricacies of a Python library isn’t a competitive advantage for individuals and companies to build the best analytics anymore.</p>
<p>That’s all well and good when working on a small, one-off project. But conferences like EO Summit keep showing that there’s more data than ever before. Archives of imagery, 3D point clouds and any dataset keeps growing in scale, resolution &amp; time backlog. Problems aren’t always local, nor limited to a small time &amp; place.</p>
<p>AI is changing what it means to build software &amp; products, there’s not doubt about that. But executing it at scale is still a dark art.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-so-much-data-yet-we-still-struggle-to-get-things-done-in-a-timely-manner">2. So much data, yet we still struggle to get things done in a timely manner<a href="https://docs-staging.fused.io/pr/1042/blog/notes-from-eo-summit#2-so-much-data-yet-we-still-struggle-to-get-things-done-in-a-timely-manner" class="hash-link" aria-label="Direct link to 2. So much data, yet we still struggle to get things done in a timely manner" title="Direct link to 2. So much data, yet we still struggle to get things done in a timely manner" translate="no">​</a></h3>
<p>At another conference, the <a href="https://conference.cloudnativegeo.org/CNGConference2025" target="_blank" rel="noopener noreferrer" class="">Cloud Native Geopaptial</a> last month <a href="https://www.linkedin.com/pulse/when-our-community-burned-where-satellite-information-pag%C3%A1n-phd-8rxwf/?trackingId=PGMihonBbG7ShNl4LvW20g%3D%3D" target="_blank" rel="noopener noreferrer" class="">Brianna Pagán shared her story of the Los Angeles fires taking down her home</a>, and while having so much data available, so little was actually accessible in a helpful manner quickly. This topic came again at this conference, wildfires being the prime example of the complexity of making timely and updated use of data in times of need despite having so much.</p>
<p>A few months ago, our own Milind Soni <a href="https://www.linkedin.com/posts/milind-soni-314075175_emergencyresponse-datascience-opendata-activity-7285803354876735489-lqJe?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAABr4AqABaP1Bbk9D9gnGvRmXSaYnn0II3fg" target="_blank" rel="noopener noreferrer" class="">made a quick interactive dashboard</a> in a few hours as a proof of concept of what rapid tools could look like for wildfire updates using Fused.</p>
<p>These conversations are directly going into our internal product development discussion; as we write this, we're developing tools to build these dashboard for rapid iteration. Stay tuned for more on that soon!</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-the-gap-between-data--applications">3. The gap between data &amp; applications<a href="https://docs-staging.fused.io/pr/1042/blog/notes-from-eo-summit#3-the-gap-between-data--applications" class="hash-link" aria-label="Direct link to 3. The gap between data &amp; applications" title="Direct link to 3. The gap between data &amp; applications" translate="no">​</a></h3>
<p><a href="https://www.linkedin.com/in/nadinealameh/" target="_blank" rel="noopener noreferrer" class="">Nadine Alameh</a>, at the head of the Taylor Geospatial Institute &amp; former CEO of the OGC, the consortium in charge of standards for all things geospatial, mentioned the lack of companies in the middle solving problems between data providers and companies building analytics products. This is something Aravind, head of Terrawatch -who organised this conference- <a href="https://newsletter.terrawatchspace.com/the-state-of-earth-observation-platforms/" target="_blank" rel="noopener noreferrer" class="">has been saying for a while</a>.</p>
<p>That’s why we were excited about being at EO Summit, we think we can make a difference tackling these problems!</p>
<p><img decoding="async" loading="lazy" alt="Talking to attendees" src="https://docs-staging.fused.io/pr/1042/assets/images/Talking_to_attendees-25fbdb4309251ee7325c0dd0037d05d1.jpeg" width="600" height="800" class="img_ev3q"></p>
<p>We’re building tools that make getting data from all types of places &amp; formats together, execute code (however it was written) at any scale with a few lines of code and sharing it all to whomever needs it, be it interactive dashboard, CSVs or tile servers.</p>
<p>If you’d like to learn more about Fused, <a href="https://calendly.com/max-fused/30min" target="_blank" rel="noopener noreferrer" class="">book some time with Max</a>, our Developer Advocate right here to get a demo!</p>]]></content>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="announcements" term="announcements"/>
        <category label="conferences" term="conferences"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Scaling Environmental Insights with Fused and H3]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/environmental-insights</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/environmental-insights"/>
        <updated>2025-05-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Farmers and analysts face a familiar challenge: weather and crop data is fragmented, slow to process, and hard to act on.]]></summary>
        <content type="html"><![CDATA[<p>Farmers and analysts face a familiar challenge: weather and crop data is fragmented, slow to process, and hard to act on.</p>
<p>We worked with <a href="https://www.linkedin.com/in/emma-quirk-b90a51132/" target="_blank" rel="noopener noreferrer" class="">Emma Quirk</a> (Senior Data Analyst) and <a href="https://www.linkedin.com/in/majid-alivand-phd-27a4364b/" target="_blank" rel="noopener noreferrer" class="">Majid Alivand</a> (Senior Data &amp; Analytics Manager) to showcase how Fused can help bring all these datasets together. In this webinar they give an overview of the industry challenges interfacing backend data analytics with frontend data consumption. Emma walks through the notebook she used to model climate and irrigation patterns for vineyards.</p>
<iframe style="width:100%;max-width:800px;aspect-ratio:16/9;height:auto;margin:0 auto 2rem auto;display:block" src="https://www.youtube.com/embed/ESokph_0660" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="addressing-the-challenge">Addressing the Challenge<a href="https://docs-staging.fused.io/pr/1042/blog/environmental-insights#addressing-the-challenge" class="hash-link" aria-label="Direct link to Addressing the Challenge" title="Direct link to Addressing the Challenge" translate="no">​</a></h2>
<p>Building useful &amp; actionable weather models for environmental insights requires bringing datasets from:</p>
<ul>
<li class="">Different sources</li>
<li class="">Different resolutions</li>
<li class="">Different formats</li>
</ul>
<p>To address these challenges, Emma &amp; Majid used Fused + H3 to bring together datasets like GridMET climate, CDL crops, LANID irrigation, and gSSURGO soils by converting them from raster to H3 to build unified parquet files.</p>
<p>By <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/writing-udfs">building UDFs</a> to manipulate each dataset, the team can iterate on their analysis in seconds while H3 allows them to more easily combine all the datasets together.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-h3">Why H3?<a href="https://docs-staging.fused.io/pr/1042/blog/environmental-insights#why-h3" class="hash-link" aria-label="Direct link to Why H3?" title="Direct link to Why H3?" translate="no">​</a></h2>
<!-- -->
<ul>
<li class="">Harmonized format across datasets and regions</li>
<li class="">Scalable queries at multiple resolutions</li>
<li class="">Compact storage parquets with improved spatial performance</li>
<li class="">No reprojection needed for global analyses</li>
<li class="">Equal neighbors for clean spatial logic</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out-for-yourself">Try it out for yourself<a href="https://docs-staging.fused.io/pr/1042/blog/environmental-insights#try-it-out-for-yourself" class="hash-link" aria-label="Direct link to Try it out for yourself" title="Direct link to Try it out for yourself" translate="no">​</a></h2>
<p>Try out the notebook from the presentation for yourself:</p>
<ul>
<li class=""><a href="https://colab.research.google.com/drive/1F9SUD8aoYm2Ym6BArQ2bMISEx5xqKDHE?usp=sharing" target="_blank" rel="noopener noreferrer" class="">Colab Notebook</a></li>
</ul>
<p>Sign up for a <a href="https://www.fused.io/workbench" target="_blank" rel="noopener noreferrer" class="">free Fused account</a> and try it out for yourself!</p>]]></content>
        <author>
            <name>Emma Quirk</name>
            <uri>https://www.linkedin.com/in/emma-quirk-b90a51132/</uri>
        </author>
        <author>
            <name>Majid Alivand</name>
            <uri>https://www.linkedin.com/in/majid-alivand-phd-27a4364b/</uri>
        </author>
        <category label="environmental" term="environmental"/>
        <category label="notebook" term="notebook"/>
        <category label="h3" term="h3"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Inside Fused Apps: Python in The Browser]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps"/>
        <updated>2025-05-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[This is a technical deep dive into how we built Fused Apps, a way to build a Python-based workflow in your browser, that you can save and share with someone. You can read the full product announcement here.]]></summary>
        <content type="html"><![CDATA[<p>This is a technical deep dive into how we built <a href="https://www.fused.io/workbench/apps/catalog?tab=all" target="_blank" rel="noopener noreferrer" class=""><strong>Fused Apps</strong></a>, a way to build a Python-based workflow in your browser, that you can save and share with someone. You can read the <a class="" href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps/">full product announcement here</a>.</p>
<p>At Fused, we’re building tools to help data scientists work more efficiently: we want to give them the ability to work on any dataset, create an analysis and scale it to the whole world with just a few lines of code. But data scientists don’t work in a vacuum, and analysis aren’t (always) done because people are simply curious about a topic.</p>
<p>We built Fused Apps in the spirit of allowing a single person to do all the work themselves; and in this first episode of <em>Inside Fused</em>, a series of blogposts about how we’re building Fused, we want to take you behind the curtain to show how Fused Apps is built.</p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fused-apps-at-a-glance">Fused Apps at a glance<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#fused-apps-at-a-glance" class="hash-link" aria-label="Direct link to Fused Apps at a glance" title="Direct link to Fused Apps at a glance" translate="no">​</a></h3>
<!-- -->
<p>Fused provides both a Python package to run User Defined Functions (UDFs), and Workbench, a browser-based IDE to write, execute, visualize them as well as create Fused Apps to make interactive frontends.</p>
<p>Here’s what Fused Apps look like:</p>
<p><img decoding="async" loading="lazy" alt="Fused apps preview" src="https://docs-staging.fused.io/pr/1042/assets/images/CDL_stats_app-4e2e3ca17909b0948bd586bab1b73d77.png" width="3600" height="1994" class="img_ev3q"></p>
<p><em>Fused Apps. From left to right: the list of apps that have been loaded in Workbench, the app code editor, and the running app itself.</em></p>
<p>The App code editor &amp; renderer allow users to write their own Python code using <a href="http://streamlit.io/" target="_blank" rel="noopener noreferrer" class="">Streamlit</a> to build a frontend entirely in Python, a language most data scientists already work with.</p>
<p>We want data scientists to be able to go from “hey, that’s a cool idea” to “here’s what it looks like” without tech getting in their way. Especially in a world where LLMs make writing code simpler, the bottleneck becomes the speed at which data scientists can execute &amp; ship code, not write it.</p>
<p>Fused Apps offers a way for data scientists to orchestrate their entire workflow using Python, without having to worry about backends, scaling, or clusters. Fused Apps complement our <a href="https://docs.fused.io/workbench/udf-builder/" target="_blank" rel="noopener noreferrer" class="">Map Builder</a>, which offers a way to build data processing and backend functions, by offering an end-to-end workflow. At Fused, we use this for ingesting and managing datasets, managing resources we make available to our UDFs, and finalizing analyses.</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-05-13-inside-fused-apps/Vision_Pro_cdl_exploring_sped_up.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<p><em>Fused Apps work on <em>any</em> device, as long as there's a browser!</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-we-built-it">How we built it<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#how-we-built-it" class="hash-link" aria-label="Direct link to How we built it" title="Direct link to How we built it" translate="no">​</a></h3>
<p>In short, Fused Apps tie together a frontend application for users to write Python code with <a href="https://github.com/streamlit/streamlit" target="_blank" rel="noopener noreferrer" class="">Streamlit</a>, a backend that saves &amp; serves these apps and provides shareable links, and a product experience tying all of this together (error handling, autocomplete suggestions, async UI functionalities, etc.)</p>
<p>Fused Apps are built on top of <a href="https://github.com/whitphx/stlite" target="_blank" rel="noopener noreferrer" class="">Stlite</a> &amp; <a href="https://streamlit.io/" target="_blank" rel="noopener noreferrer" class="">Streamlit</a>. Streamlit being a library allowing you to write a frontend application, entirely in Python, and Stlite an in-browser version of Streamlit. This allows people familiar with Python but not so much frontend development (like data scientists) to have something rendered on screen in HTML, but only with writing Python.</p>
<p>Stlite provides the ability to run apps in the browser, and while <a href="https://edit.share.stlite.net/" target="_blank" rel="noopener noreferrer" class="">Stlite Sharing</a> does support URL-encoded mechanisms for app sharing, the URL is the same as the code, preventing users from <em>updating</em> said code; there’s also no such thing as app catalogs, etc. So we ended up using Stlite as the engine and built a product experience around that.</p>
<p>The frontend for building a Python-in-the-browser application already exists, with Streamlit &amp; Stlite. However the backend had to be built from the ground up.</p>
<p>Originally, we didn’t even have a way for people to save their apps! Our internal workflow while developing &amp; testing this was to have a Slack channel where we pasted our app links in to be able to find them later on</p>
<p><img decoding="async" loading="lazy" alt="Early days Slack sharing links" src="https://docs-staging.fused.io/pr/1042/assets/images/Slack_app_sharing_early_days-995daa4bad9c99859d9ec38dcd6b0075.png" width="1076" height="571" class="img_ev3q"></p>
<p>This is at the the core of our development philosophy: Build a prototype, use it a bunch, find the pain points, fix them, build more. In this case, saving &amp; tracking apps was the next piece to build.</p>
<p>This is how we added functionality like Github integration, sharing options, and an app catalog. All these were only added after we got some traction internally and from early customers.</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-05-13-inside-fused-apps/sharing_fused_apps_links_higher_res.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<p><em>Sharing Fused Apps is just a couple of clicks now</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-in-the-browser">Python, in the browser<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#python-in-the-browser" class="hash-link" aria-label="Direct link to Python, in the browser" title="Direct link to Python, in the browser" translate="no">​</a></h3>
<p>The next piece of this puzzle is to realise that running Python locally on your machine and in the browser is quite different. We want to make the experience for the user as seamless as possible: we’re building products for data scientists to build everything in Python.</p>
<p>We use <a href="https://pyodide.org/" target="_blank" rel="noopener noreferrer" class="">Pyodide</a> to run Python in WASM. This enables the same Python language to be used in a new environment – the browser. The browser environment is key because it gives us a way to safely ship applications to users.</p>
<p>Safely shipping software to people wasn’t always the simplest. Previous efforts via Flash and Java applets enabled a generation of rich web content. The promise of Java applets was <a href="https://www.vice.com/en/article/a-brief-history-of-the-java-applet/" target="_blank" rel="noopener noreferrer" class="">run anywhere</a> – that the same code could run on anyone’s computer. These technologies <a href="https://blog.mozilla.org/futurereleases/2016/07/20/reducing-adobe-flash-usage-in-firefox/" target="_blank" rel="noopener noreferrer" class="">died</a> <a href="https://blog.mozilla.org/futurereleases/2017/07/25/firefox-roadmap-flash-end-life/" target="_blank" rel="noopener noreferrer" class="">out</a> mainly because of security model problems. (Java <a href="https://en.wikipedia.org/wiki/BD-J" target="_blank" rel="noopener noreferrer" class="">lives on</a> in Blu-ray disks.)</p>
<p>At the time of writing this, in mid 2025, browser applications are considered well sandboxed (with the possible exceptions of RowHammer/Spectre type issues), browser applications open when you want them, and go away completely when you dismiss them, all the while performing more and more complex tasks. Browser applications handle video encoding/decoding for video conferencing, graphics rendering for games, maps, and design, and more frequently, for programming. Companies like Figma are building complex, professional grade applications for <a href="https://www.figma.com/blog/meet-us-in-the-browser/" target="_blank" rel="noopener noreferrer" class="">the browser first</a>.</p>
<p>From a development perspective, the browser becomes an operating system. It becomes less important to know what exact hardware &amp; underlying operating system the users have, and we develop applications for the browsers’ APIs. Those applications are inherently portable to new devices, because the heavy lifting is porting the browser to these new devices.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="building-a-product">Building a Product<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#building-a-product" class="hash-link" aria-label="Direct link to Building a Product" title="Direct link to Building a Product" translate="no">​</a></h3>
<p>There are other projects out there that allow building hosted Stlite applications, however these miss some of the features that people expect from a well rounded product. Here are few things we’ve added to Fused Apps:</p>
<ul>
<li class="">Package Handling (Every Fused Apps comes with <code>fused</code> and <code>pyarrow</code> pre-installed)</li>
<li class="">Error handling</li>
<li class="">Naming &amp; saving of Apps</li>
<li class="">Github integration for teams</li>
<li class="">Creating shareable links allowing users to send their apps to anyone with a browser</li>
</ul>
<p>Beyond the technical challenges we want to build a product that helps data scientists build, iterate and ship faster. A data scientist can build an analysis that takes in different parameters and make an interactive graph for their project manager to test out directly all without needing support</p>
<p>A big part of this is the philosophy of how we build things at Fused: We’re a team of engineers &amp; data scientists. A lot of the features we’re listing above here come directly from our own usage of Fused Apps while making real applications with some of our customers.</p>
<p>We care about how fast it takes for a new user to click on a Fused App and start running it, or what the experience of saving &amp; sharing an app looks like.</p>
<p>Every Fused App comes with some packages pre-installed, such as <code>fused</code> and <code>pyarrow</code>, which are helpful for data scientists. (Streamlit comes with a number of other common packages like Pandas and NumPy already.) But this comes at the expense of loading time, as each new app is a self-contained application which requires downloading all the required packages. This is leading us to spend time optimizing the initial loading time of Pyodide.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-can-we-expect-from-pyodide">What can we expect from Pyodide<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#what-can-we-expect-from-pyodide" class="hash-link" aria-label="Direct link to What can we expect from Pyodide" title="Direct link to What can we expect from Pyodide" translate="no">​</a></h3>
<p>Fused Apps, and any implementation of Python in the browser, isn’t as customizable as a fully local setup. Packages with native code that are not prebuilt for WASM will not work. At the time of writing, some popular packages like Pandas &amp; Numpy are built and supported, but others aren’t. The backbone of the map processing pipeline, GDAL, for example, isn’t currently supported. This isn’t from lack of popularity, but reflects the complexity of building GDAL.</p>
<p>Some packages will need architecture updates. As another example people currently call into ffmpegfrom Python using the CLI. The WASM environment does not have a CLI concept, and this would need to be replaced with library calls. Other packages which are not well suited to this architecture (such as Torch) might have alternatives developed because the wasm ecosystem is so attractive a development target.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="llms-in-the-browser">LLMs in the Browser<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#llms-in-the-browser" class="hash-link" aria-label="Direct link to LLMs in the Browser" title="Direct link to LLMs in the Browser" translate="no">​</a></h4>
<p>An example of this is <a href="https://github.com/whitphx/transformers.js.py" target="_blank" rel="noopener noreferrer" class="">transformers.js.py</a>. This library (developed by <a href="https://github.com/whitphx" target="_blank" rel="noopener noreferrer" class="">Yuichiro Tachibana</a>, also behind Stlite) needed more than one level of architectural adaptation to get running in the browser, but once adapted it brought the capability of running lightweight LLMs. This allows us to ship applications that run small LLMs models, running locally in the browser!</p>
<p>We made a Fused App exploring the USDA’s Crop Data Layer (CDL) dataset, a dataset of different crop types in the US. Instead of showing <a href="https://storage.googleapis.com/earthengine-stac/catalog/USDA/USDA_NASS_CDL.json" target="_blank" rel="noopener noreferrer" class="">all 130+ categories</a>, we can just take a text input, run a similarity analysis on the fly against all the categories and find the closest CDL crop type!</p>
<p><img decoding="async" loading="lazy" alt="CDL Bunnies" src="https://docs-staging.fused.io/pr/1042/assets/images/CDL_light_weight_bunnies-00e6ff9773c28eb4bcb0551d40b07bec.gif" width="800" height="358" class="img_ev3q"></p>
<p><em>You too can find out what Bunnies prefer by trying <a href="https://www.fused.io/app/UDF_Crop_data_explorer" target="_blank" rel="noopener noreferrer" class="">this Fused App here</a></em></p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="compatibility--load-times">Compatibility &amp; load times<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#compatibility--load-times" class="hash-link" aria-label="Direct link to Compatibility &amp; load times" title="Direct link to Compatibility &amp; load times" translate="no">​</a></h4>
<p>This is a fast changing ecosystem though, for example we’ve made a small contribution of a build of the <a href="https://github.com/pyodide/pyodide/pull/5436/" target="_blank" rel="noopener noreferrer" class="">H3 package</a> specifically because we wanted to have H3 supported in Python in the browser. The list of <a href="https://pyodide.org/en/stable/usage/packages-in-pyodide.html" target="_blank" rel="noopener noreferrer" class="">supported packages</a> built in Pyodide is growing quickly.</p>
<p>Moving large amounts of data in and out of the browser is slow, so data-intensive libraries like Torch or Dask are not well-suited for this. We solve this by bringing in the compute performance &amp; flexibility of Fused UDFs, which run native (non-WASM) Python in a cloud environment. Fused UDFs run code much closer to the data, improving performance, and are not limited by what packages are available for Pyodide, improving flexibility.</p>
<p>Install times for Pyodide are relatively long from a user point of view, as the application isn’t stored locally and installed each time it's opened. This will most likely keep improving over time as the technology is developed further. For example Pyodide wants to add memory snapshotting to help with this, but it isn’t stable yet.</p>
<p>Even when the application is stored locally, we found we needed to reinitialize Pyodide in some cases. There is no concept of switching virtual environments in Pyodide, since running a new script reuses the same Python VM. When switching between apps in Fused, we reinitialize Pyodide in order to prevent packages from one app interfering with another. If we didn’t do this, a user might accidentally rely on a package installed by App A in developing App B, which would then not work when sharing App B.</p>
<p>We also needed to be careful with when the app can run, since the app has access to the user’s browser context. We chose to give users the chance to inspect the app’s code before running it if it would have access to their Fused account.</p>
<p>Code written in Stlite and Pyodide looks almost the same as regular Python, but there are slight differences. Many of these come in the form of adapting synchronous and asynchronous code. Stlite for example allows for top-level <code>await</code> because the browser’s event loop is being used. This can be tricky to work with because regular advice for working around asynchronous code in Python does not work with Pyodide.</p>
<p><img decoding="async" loading="lazy" alt="CDL loading async model &amp;amp; logging" src="https://docs-staging.fused.io/pr/1042/assets/images/loading_async_logging-68a3d689bfa3a9fc523f820b9dd913fe.gif" width="868" height="480" class="img_ev3q">
<em>Async-aware UI allows us to provide improved feedback as an app loads a light weight LLM model or data to display</em></p>
<p>In order to create a good product experience, we added our own syntax checking and linting on top of Pyodide.</p>
<p><img decoding="async" loading="lazy" alt="Error handling" src="https://docs-staging.fused.io/pr/1042/assets/images/Error_handling-70ff597877430f7926249f75bb05a4ba.gif" width="868" height="480" class="img_ev3q"></p>
<p><em>Lots of small features go a long way to delighting users with a smooth experience.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="delivering-at-near-zero-cost">Delivering at near-zero cost<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#delivering-at-near-zero-cost" class="hash-link" aria-label="Direct link to Delivering at near-zero cost" title="Direct link to Delivering at near-zero cost" translate="no">​</a></h3>
<p>Fused Apps are part of the free tier of Fused. You can use Fused Apps without logging in at all, and with a free login you can save and share your apps. We want to take a moment here to explain why this is naturally a free offering and will continue to be free.</p>
<p>As a browser-based application, all of the code execution and data transfer happens in the user's browser. This means that we do not need to sandbox code execution or pay for cloud compute resources to run anyone’s Fused Apps.</p>
<p>Where we do incur costs are in the shared control plane layer of Fused. Technically, the control place layer doesn’t see much difference between an app and a UDF. As a result, the incremental cost of serving an app user is very low and it is easy for us to offer that for free. The core offering of Fused is the backend serverless execution of code, which is our paid product.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="try-it-out-for-yourself">Try it out for yourself<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#try-it-out-for-yourself" class="hash-link" aria-label="Direct link to Try it out for yourself" title="Direct link to Try it out for yourself" translate="no">​</a></h3>
<p>Don’t take our word for it, give Fused Apps a try for yourself! As we mentioned, Fused Apps are free and don’t require login. You can check out our <a href="https://www.fused.io/workbench/apps/catalog?tab=public" target="_blank" rel="noopener noreferrer" class="">catalog of public Apps</a> in Fused Workbench.</p>
<p>Recently we announced <a href="https://docs.fused.io/blog/cdl-census-hex/" target="_blank" rel="noopener noreferrer" class="">re-partitioning the Crop Data Layer dataset</a> into H3 hexagons for anyone to use and <a href="https://source.coop/repositories/fused/hex/description" target="_blank" rel="noopener noreferrer" class="">hosted the resulting dataset</a> on Source Cooperative.</p>
<p>Alongside this we created a <a href="https://www.fused.io/app/UDF_Explore_CDL_app" target="_blank" rel="noopener noreferrer" class="">public Fused App</a> allowing you to explore any crop for the 2024 dataset</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="were-hiring-help-us-build-the-future-of-data-science-workflows">We're hiring: Help us build the future of data science workflows!<a href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps#were-hiring-help-us-build-the-future-of-data-science-workflows" class="hash-link" aria-label="Direct link to We're hiring: Help us build the future of data science workflows!" title="Direct link to We're hiring: Help us build the future of data science workflows!" translate="no">​</a></h3>
<p>We firmly believe data scientists need tools that give them the independence to do their work rather than asking for support to scale their analysis or share their results.</p>
<p>We need smart people to help us build all of this. We are hiring for:</p>
<ul>
<li class="">Deep knowledge of Python &amp; Pyodide</li>
<li class="">Opinionated thinking in building the future of data science pipelines</li>
<li class="">People wanting to join a fast moving startup and build things</li>
</ul>
<p>If you’d like to join the team, <strong><a href="https://docs.google.com/forms/d/e/1FAIpQLSdIdyE_hj07Hj7KnoUxn5YazBtA8Hyj37DTwDCLEYkGFm00UQ/viewform" target="_blank" rel="noopener noreferrer" class="">send us your info here</a></strong>!</p>
<p><img decoding="async" loading="lazy" alt="The team" src="https://docs-staging.fused.io/pr/1042/assets/images/this_is_the_team-8aed0980666f94cd889d2ead4f16bdca.png" width="1366" height="666" class="img_ev3q"></p>
<p><em>Join the team!</em></p>]]></content>
        <author>
            <name>Isaac Brodsky</name>
            <uri>https://www.linkedin.com/in/isaacbrodsky/</uri>
        </author>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
        <category label="apps" term="apps"/>
        <category label="python" term="python"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Launching Fused Apps]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps"/>
        <updated>2025-05-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Today we're launching Fused Apps, allowing you to write Python in the browser, creating, editing & sharing interactive apps]]></summary>
        <content type="html"><![CDATA[<p>Today we're launching <a href="https://www.fused.io/workbench/apps/catalog?tab=all" target="_blank" rel="noopener noreferrer" class="">Fused Apps</a>, allowing you to write Python in the browser, creating, editing &amp; sharing interactive apps</p>
<!-- -->
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-05-13-inside-fused-apps/Introducing_fused_apps_intro.mov" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<!-- -->
<p>Watch the announcement video:</p>
<iframe style="width:100%;max-width:800px;aspect-ratio:16/9;height:auto;margin:0 auto 2rem auto;display:block" src="https://www.youtube.com/embed/yjiNxqAcPdw" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-write-python-in-the-browser">🐍 Write Python in the browser<a href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps#-write-python-in-the-browser" class="hash-link" aria-label="Direct link to 🐍 Write Python in the browser" title="Direct link to 🐍 Write Python in the browser" translate="no">​</a></h2>
<p>Fused Apps are one of the the fastest way to write Python, directly in the browser.</p>
<ul>
<li class="">No environment setup, just start writing Python</li>
<li class="">Create interactive apps using <a href="https://streamlit.io/" target="_blank" rel="noopener noreferrer" class="">Streamlit</a></li>
<li class="">Save &amp; rename your Apps</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-share-your-apps-with-anyone">🔗 Share your apps with anyone<a href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps#-share-your-apps-with-anyone" class="hash-link" aria-label="Direct link to 🔗 Share your apps with anyone" title="Direct link to 🔗 Share your apps with anyone" translate="no">​</a></h2>
<p>As soon as you save your Fused App, you can create a shareable link for anyone to open</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-05-13-inside-fused-apps/sharing_fused_apps_links_higher_res.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-standalone--private-running-in-your-browser">🔒 Standalone &amp; Private, running in your browser<a href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps#-standalone--private-running-in-your-browser" class="hash-link" aria-label="Direct link to 🔒 Standalone &amp; Private, running in your browser" title="Direct link to 🔒 Standalone &amp; Private, running in your browser" translate="no">​</a></h2>
<p>Fused Apps are built on top of <a href="https://pyodide.org/en/stable/" target="_blank" rel="noopener noreferrer" class="">Pyodide</a>, <a href="https://streamlit.io/" target="_blank" rel="noopener noreferrer" class="">Streamlit</a> &amp; <a href="https://stlite.net/" target="_blank" rel="noopener noreferrer" class="">Stlite</a> but offer many features:</p>
<ul>
<li class="">Github Integration for team collaboration</li>
<li class="">Run light-weight LLMs locally in your browser with libraries like <a href="https://github.com/whitphx/transformers.js.py" target="_blank" rel="noopener noreferrer" class=""><code>transformers.js.py</code></a></li>
</ul>
<p><img decoding="async" loading="lazy" alt="CDL Bunnies" src="https://docs-staging.fused.io/pr/1042/assets/images/CDL_light_weight_bunnies-00e6ff9773c28eb4bcb0551d40b07bec.gif" width="800" height="358" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-access-a-catalog-of-existing-fused-apps-to-get-started">📚 Access a Catalog of existing Fused Apps to get started<a href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps#-access-a-catalog-of-existing-fused-apps-to-get-started" class="hash-link" aria-label="Direct link to 📚 Access a Catalog of existing Fused Apps to get started" title="Direct link to 📚 Access a Catalog of existing Fused Apps to get started" translate="no">​</a></h2>
<p>We've curated a <a href="https://www.fused.io/workbench/apps/catalog?tab=all" target="_blank" rel="noopener noreferrer" class="">catalog of existing Fused Apps</a> to get you started, including:</p>
<ul>
<li class="">🌽 <a href="https://www.fused.io/app/UDF_Crop_data_explorer" target="_blank" rel="noopener noreferrer" class="">Explore</a> different crops around the US</li>
<li class="">🛰️ <a href="https://www.fused.io/app/UDF_Objects_to_space" target="_blank" rel="noopener noreferrer" class="">Visualize</a> the trend of objects sent to Space</li>
<li class="">🌲 <a href="https://www.fused.io/app/UDF_Zonal_Stats_Forest_App" target="_blank" rel="noopener noreferrer" class="">Pan a map</a> of Forest statistics per global municipality</li>
</ul>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/blogs/2025-05-13-inside-fused-apps/App_catalog_browsing.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<p>You can try out Fused Apps for yourself directly in <a href="https://www.fused.io/workbench/apps/catalog?tab=all" target="_blank" rel="noopener noreferrer" class="">Fused Workbench</a> and read our dedicated <a class="" href="https://docs-staging.fused.io/pr/1042/workbench/app-builder/">Docs page</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="️-how-we-built-fused-apps-technical-details">⚙️ How we built Fused Apps: Technical Details<a href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps#%EF%B8%8F-how-we-built-fused-apps-technical-details" class="hash-link" aria-label="Direct link to ⚙️ How we built Fused Apps: Technical Details" title="Direct link to ⚙️ How we built Fused Apps: Technical Details" translate="no">​</a></h2>
<p>We wrote a <a class="" href="https://docs-staging.fused.io/pr/1042/blog/inside-fused-apps/">dedicated technical blog post</a> going into details of how Fused Apps are built:</p>
<ul>
<li class="">How we originally built Fused Apps</li>
<li class="">The challenges of Python in the browser</li>
<li class="">Our approach to building a product</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="join-our-webinar-on-may-22nd">Join our webinar on May 22nd!<a href="https://docs-staging.fused.io/pr/1042/blog/launching-fused-apps#join-our-webinar-on-may-22nd" class="hash-link" aria-label="Direct link to Join our webinar on May 22nd!" title="Direct link to Join our webinar on May 22nd!" translate="no">​</a></h2>
<p>On Thursday May 22nd we'll be hosting a <a href="https://www.linkedin.com/events/7330560554501099524/comments/" target="_blank" rel="noopener noreferrer" class="">webinar</a> showcasing how our customers use Fused</p>
<ul>
<li class=""><a href="https://www.linkedin.com/events/7330560554501099524/comments/" target="_blank" rel="noopener noreferrer" class="">Join on LinkedIn</a></li>
</ul>
<p><img decoding="async" loading="lazy" alt="Webinar thumbnail" src="https://docs-staging.fused.io/pr/1042/assets/images/May_2025_webinar_card-0c73f83f792ec7802fa2faed57af5149.png" width="1280" height="720" class="img_ev3q"></p>]]></content>
        <author>
            <name>Sina Kashuk</name>
            <uri>https://www.linkedin.com/in/skashuk/</uri>
        </author>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
        <category label="apps" term="apps"/>
        <category label="browser" term="browser"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Sylvera uses Fused to prototype and power DeckGL applications]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/how-sylvera-uses-fused-to-prototype-and-power-deckgl-applications</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/how-sylvera-uses-fused-to-prototype-and-power-deckgl-applications"/>
        <updated>2025-05-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR Sylvera quickly builds and tests new app features by serving data to DeckGL applications using Fused HTTPS endpoints.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR Sylvera quickly builds and tests new app features by serving data to DeckGL applications using Fused HTTPS endpoints.</strong></p>
<p>At its core, Sylvera rates carbon projects. Our ratings are powered by several earth observation and geospatial analysis data products. From climate risk data, and deforestation indicators, to biomass-predicting ML models, a wealth of data goes into generating a single-letter rating.</p>
<!-- -->
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/jahn.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem">The problem<a href="https://docs-staging.fused.io/pr/1042/blog/how-sylvera-uses-fused-to-prototype-and-power-deckgl-applications#the-problem" class="hash-link" aria-label="Direct link to The problem" title="Direct link to The problem" translate="no">​</a></h2>
<p>With such a wealth of information, it's challenging to determine how best to present insights to the client. On one hand, we want the client to be able to see the data that tell the story of the project's rating. On the other, we don't want to overwhelm them with fun interactive visualizations that leave them without a clear takeaway.</p>
<p>This is why we decided to organize an internal hackathon, aimed at discovering what the modern geospatial data stack can do when it comes to enabling user experience with geospatial data.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-solution">The solution<a href="https://docs-staging.fused.io/pr/1042/blog/how-sylvera-uses-fused-to-prototype-and-power-deckgl-applications#the-solution" class="hash-link" aria-label="Direct link to The solution" title="Direct link to The solution" translate="no">​</a></h2>
<p>To enable quick iteration, selecting the right technology stack was crucial. Our data lives in Zarr format in <a href="https://docs.earthmover.io/" target="_blank" rel="noopener noreferrer" class="">Arraylake</a>, a data lake platform for managing array data.</p>
<p><img decoding="async" loading="lazy" alt="Alt" src="https://docs-staging.fused.io/pr/1042/assets/images/architecture-57b7ddb7289aa331b1298d219ed63351.png" width="1916" height="710" class="img_ev3q"></p>
<p>We explored the current landscape and considered several options: Should we serve pre-computed visualizations through <a href="https://github.com/xpublish-community/xpublish" target="_blank" rel="noopener noreferrer" class="">xpublish</a> or <a href="https://developmentseed.org/titiler/" target="_blank" rel="noopener noreferrer" class="">TiTiler</a>? Create interactive dashboards through <a href="https://felt.com/" target="_blank" rel="noopener noreferrer" class="">Felt</a>, or build them in <a href="https://www.mapbox.com/" target="_blank" rel="noopener noreferrer" class="">Mapbox</a>?</p>
<p><img decoding="async" loading="lazy" alt="Alt" src="https://docs-staging.fused.io/pr/1042/assets/images/app-screenshot-eb59c9fc17b00d1111fe6d54c3fdc29f.png" width="2754" height="1452" class="img_ev3q"></p>
<p>Ultimately, we chose the most agile and powerful stack: an interactive <a href="https://react.dev/" target="_blank" rel="noopener noreferrer" class="">React</a> + <a href="http://deck.gl/" target="_blank" rel="noopener noreferrer" class="">deck.gl</a> application powered entirely by Fused.</p>
<p>We created a React dashboard, where each element renders the output of Fused UDFs. This required an entire DAG of UDFs.</p>
<p>The core element is the Data UDF, which fetches raw data for a given area of interest. The subsequent UDFs then process this data for the application.</p>
<p>In the example below, The Visualisation and Data Overlay UDFs prepare a web map. The Histogram UDF uses the hammer-and-nails pattern to get the distribution for each year. The Timeseries UDF computes the average per year. This setup is highly modular and makes it straightforward to present the same data in a myriad of different ways.</p>
<p><img decoding="async" loading="lazy" alt="Alt" src="https://docs-staging.fused.io/pr/1042/assets/images/workflow-d808cd089d966e7e79fcc1865de5ccb0.png" width="2494" height="1138" class="img_ev3q"></p>
<p>This is the custom function to create a layer from a Fused HTTPS endpoint called as a File which returns a <code>.png</code>.</p>
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:hsl(207, 82%, 66%)">createFusedFileLayer</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">layerId</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">fusedId</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">bounds</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token parameter">number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">year</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> number</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> key </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">layerId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">year</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> param </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">year=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">year</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> imageUrl </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">https://www.fused.io/server/v1/realtime-shared/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">fusedId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">/run/file?dtype_out_raster=png&amp;</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">param</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> layer </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createBitmapLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">key</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> imageUrl</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> bounds</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> layer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span></code></pre></div></div>
<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>View the full code:</summary><div><div class="collapsibleContent_i85q"><div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> createRoot </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">"react-dom/client"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> DeckGL </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">"@deck.gl/react"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> MapView </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">"@deck.gl/core"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> BitmapLayer </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">"@deck.gl/layers"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> TileLayer </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">"@deck.gl/geo-layers"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token constant" style="color:hsl(29, 54%, 61%)">BOUNDS_AFRICA</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">number</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> number</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">25.35</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">46.95</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">51.35</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">37.35</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token constant" style="color:hsl(29, 54%, 61%)">UDF_H_AOI_FILE_CALL</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">"FUSED_UDF"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createTileLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">id</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">data</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> TileLayer</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&lt;</span><span class="token plain">ImageBitmap</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">new</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(29, 54%, 61%)">TileLayer</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&lt;</span><span class="token plain">ImageBitmap</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&gt;</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">id</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> id</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">data</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">maxRequests</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">20</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">maxCacheSize</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">200</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">pickable</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">true</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">highlightColor</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token number" style="color:hsl(29, 54%, 61%)">60</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">60</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">60</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">minZoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">0</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">maxZoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">19</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">tileSize</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">256</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">zoomOffset</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> devicePixelRatio </span><span class="token operator" style="color:hsl(207, 82%, 66%)">===</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">1</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">?</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">1</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">0</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token function-variable function" style="color:hsl(207, 82%, 66%)">renderSubLayers</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token parameter">props</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">west</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> south</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">east</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> north</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">tile</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">boundingBox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> data</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">...</span><span class="token plain">otherProps </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> props</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">new</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(29, 54%, 61%)">BitmapLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">otherProps</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">          </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">image</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">          </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">bounds</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">west</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> south</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> east</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> north</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createBitmapLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">id</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">image</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">bounds</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token parameter">number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">new</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(29, 54%, 61%)">BitmapLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">id</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> id</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">image</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> image</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">bounds</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> bounds</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">pickable</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">true</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">highlightColor</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token number" style="color:hsl(29, 54%, 61%)">60</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">60</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">60</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">minZoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">0</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">maxZoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">19</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:hsl(207, 82%, 66%)">createFusedFileLayer</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">layerId</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">fusedId</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> string</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">bounds</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> </span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token parameter">number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"> number</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token parameter punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token parameter"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token parameter">  </span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">year</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> number</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> key </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">layerId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">-</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">year</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> param </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">year=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">year</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> imageUrl </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">https://www.fused.io/server/v1/realtime-shared/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">fusedId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string string" style="color:hsl(95, 38%, 62%)">/run/file?dtype_out_raster=png&amp;dtype_out_vector=csv&amp;</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">${</span><span class="token template-string interpolation">param</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token template-string template-punctuation string" style="color:hsl(95, 38%, 62%)">`</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> layer </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createBitmapLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">key</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> imageUrl</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> bounds</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> layer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> </span><span class="token function-variable function" style="color:hsl(207, 82%, 66%)">createBasemapLayer</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createTileLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">"basemap"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token string" style="color:hsl(95, 38%, 62%)">"https://basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">default</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">App</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> bounds </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token constant" style="color:hsl(29, 54%, 61%)">BOUNDS_AFRICA</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> year </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">2000</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> basemap </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createBasemapLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">const</span><span class="token plain"> fused </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">createFusedFileLayer</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token string" style="color:hsl(95, 38%, 62%)">"fused"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token constant" style="color:hsl(29, 54%, 61%)">UDF_H_AOI_FILE_CALL</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    bounds</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    year</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token operator" style="color:hsl(207, 82%, 66%)">&lt;</span><span class="token plain">DeckGL</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      layers</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">basemap</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      views</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token keyword" style="color:hsl(286, 60%, 67%)">new</span><span class="token plain"> </span><span class="token class-name" style="color:hsl(29, 54%, 61%)">MapView</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">repeat</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">true</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      initialViewState</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">latitude</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">0.34211</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">longitude</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">15.151583</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token literal-property property" style="color:hsl(355, 65%, 65%)">zoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">2</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">      controller</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token boolean" style="color:hsl(29, 54%, 61%)">true</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token operator" style="color:hsl(207, 82%, 66%)">&gt;</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&lt;</span><span class="token operator" style="color:hsl(207, 82%, 66%)">/</span><span class="token plain">DeckGL</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&gt;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">export</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">function</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">renderToDOM</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token parameter literal-property property" style="color:hsl(355, 65%, 65%)">container</span><span class="token parameter operator" style="color:hsl(207, 82%, 66%)">:</span><span class="token parameter"> HTMLDivElement</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">  </span><span class="token function" style="color:hsl(207, 82%, 66%)">createRoot</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">container</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token function" style="color:hsl(207, 82%, 66%)">render</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&lt;</span><span class="token plain">App </span><span class="token operator" style="color:hsl(207, 82%, 66%)">/</span><span class="token operator" style="color:hsl(207, 82%, 66%)">&gt;</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">;</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span></span><br></span></code></pre></div></div></div></div></details>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion-and-future-work">Conclusion and future work<a href="https://docs-staging.fused.io/pr/1042/blog/how-sylvera-uses-fused-to-prototype-and-power-deckgl-applications#conclusion-and-future-work" class="hash-link" aria-label="Direct link to Conclusion and future work" title="Direct link to Conclusion and future work" translate="no">​</a></h2>
<p>The application we built isn't yet fully featured to be put in front of users – but that's the point. We were not aiming for a finished product yet. Instead, we achieved rapid iteration that enabled us to gather relevant stakeholder feedback.</p>
<p>The speed we could reach wouldn't have been possible without Fused's development platform. Fused unifies three traditionally separate stages — prototyping, scaling, and visualization—into a single seamless solution. Thanks to this, Fused was an indispensable tool for product iteration.</p>
<p>In the future, we would like to explore the coming integration with Zarr stores. Being able to not only visualize the results but also to immediately persist them into a Zarr store will be a game-changing capability for anyone who uses Zarr as the persistence layer.</p>]]></content>
        <author>
            <name>Daniel Jahn</name>
            <uri>https://www.linkedin.com/in/da-hn/</uri>
        </author>
        <category label="zarr" term="zarr"/>
        <category label="integration" term="integration"/>
        <category label="tiles" term="tiles"/>
        <category label="streamlit" term="streamlit"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Repartitioning Crop Data Layer & US Census into H3 hexagons]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/cdl-census-hex</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/cdl-census-hex"/>
        <updated>2025-05-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Fused has repartitioned the USDA Crop Data Layer and US Census into H3 hexagons.]]></summary>
        <content type="html"><![CDATA[<p>Fused has repartitioned the USDA <a href="https://source.coop/fused/hex/release_2025_04_beta/cdl" target="_blank" rel="noopener noreferrer" class="">Crop Data Layer</a> and <a href="https://source.coop/fused/hex/release_2025_04_beta/census" target="_blank" rel="noopener noreferrer" class="">US Census</a> into H3 hexagons.</p>
<p>These 2 datasets are both available on <a href="https://source.coop/repositories/fused/hex/description" target="_blank" rel="noopener noreferrer" class="">Source Cooperative</a> for anyone to use, free of charge!</p>
<p><img decoding="async" loading="lazy" alt="Source coop CDL hex" src="https://docs-staging.fused.io/pr/1042/assets/images/source_coop_cdl_census-e052f15aa0973efcbd69677187fcceb8.png" width="1668" height="787" class="img_ev3q"></p>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-are-these-datasets">What are these datasets?<a href="https://docs-staging.fused.io/pr/1042/blog/cdl-census-hex#what-are-these-datasets" class="hash-link" aria-label="Direct link to What are these datasets?" title="Direct link to What are these datasets?" translate="no">​</a></h3>
<p>We've taken 2 popular datasets and made them available in H3 Hexagons, this provides a number of benefits:</p>
<ul>
<li class="">Much faster ability to aggregate data at different scales</li>
<li class="">A simple way to join datasets together (as they, and any other H3 tiled dataset are using the same grid)</li>
</ul>
<p>You can read more about <a href="https://h3geo.org/" target="_blank" rel="noopener noreferrer" class="">H3 Indexes</a> on the dedicated page.</p>
<p>We're providing:</p>
<ol>
<li class="">Crop Data Layer (from <a href="https://pdi.scinet.usda.gov/portal/apps/sites/#/cropcros" target="_blank" rel="noopener noreferrer" class="">USDA CroplandCros</a>)</li>
</ol>
<ul>
<li class="">Available for <code>[2012, 2014, 2016, 2018, 2020, 2022, 2024]</code></li>
<li class="">Available in <code>hex7</code> and <code>hex8</code> resolutions</li>
</ul>
<ol start="2">
<li class="">US Census (from <a href="https://data.census.gov/" target="_blank" rel="noopener noreferrer" class="">data.census.gov</a>)</li>
</ol>
<ul>
<li class="">Available for <code>2020</code></li>
<li class="">Available in <code>hex7</code> and <code>hex8</code> resolutions</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="using-these-datasets">Using these datasets<a href="https://docs-staging.fused.io/pr/1042/blog/cdl-census-hex#using-these-datasets" class="hash-link" aria-label="Direct link to Using these datasets" title="Direct link to Using these datasets" translate="no">​</a></h3>
<p>These datasets are completely free for anyone to use, with or without Fused. To showcase what's possible we have made a <a href="https://www.fused.io/workbench/catalog/CDL_from_source_coop-d6f88129-73e3-469b-8ac4-7793c2acbeed" target="_blank" rel="noopener noreferrer" class="">public Fused UDF</a> anyone can use without an account to explore these.</p>
<p><img decoding="async" loading="lazy" alt="CDL from source udf" src="https://docs-staging.fused.io/pr/1042/assets/images/workbench_census_exploring-a7f555711ed6688662ac809e7224f390.png" width="1624" height="838" class="img_ev3q"></p>
<p>You can try it <a href="https://www.fused.io/workbench/catalog/CDL_from_source_coop-d6f88129-73e3-469b-8ac4-7793c2acbeed" target="_blank" rel="noopener noreferrer" class="">here without any account</a>.</p>]]></content>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <author>
            <name>Sina Kashuk</name>
            <uri>https://www.linkedin.com/in/skashuk/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
        <category label="hex" term="hex"/>
        <category label="census" term="census"/>
        <category label="source-coop" term="source-coop"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Fused featured in Maxar TED Talk]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/fused-powering-maxar</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/fused-powering-maxar"/>
        <updated>2025-04-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Fused Powering Maxar]]></summary>
        <content type="html"><![CDATA[<p><img decoding="async" loading="lazy" alt="Fused Powering Maxar" src="https://docs-staging.fused.io/pr/1042/assets/images/TED_Fused_Maxar-8a7aa2b11582bc2c38cfdb96eba9e9e6.png" width="2283" height="1239" class="img_ev3q"></p>
<p>Fused is excited to be featured in a <a href="https://www.ted.com/talks/peter_wilczynski_the_multidimensional_magic_of_modern_maps" target="_blank" rel="noopener noreferrer" class="">TED Talk today</a> by Peter Wilczynski, CPO at Maxar, which explored a multi-source site monitoring scenario of Vancouver's greening initiatives over the past five years powered by the Fused platform.</p>
<!-- -->
<p><img decoding="async" loading="lazy" alt="Fused Maxar Workbench" src="https://docs-staging.fused.io/pr/1042/assets/images/fused_maxar_workbench-8362c81fd188bc31c25113e492134b89.png" width="1243" height="705" class="img_ev3q"></p>
<p>Site monitoring scenarios are at their most effective when data from disparate sources is combined—from satellite imagery and map data to municipal and demographic data. Analytics today requires bringing all these different sources of data together: from raw pixels to contextual intelligence — in real-time, seamlessly, and at scale.</p>
<p>This is an iterative process, each dataset being in its own format &amp; hosted on different cloud providers, updated independently and on different schedules.</p>
<p>Fused is built by <a class="" href="https://docs-staging.fused.io/pr/1042/blog/why-fused/">data scientists, engineers &amp; open source contributors</a> who know the reality of building pipelines with breaking changes in libraries, new file formats that require rethinking how data is ingested and business requirements that constantly change.</p>
<p>We firmly believe we need tools that help us bring as many datasets together as possible, especially in a world where LLMs and AI can increasingly <a class="" href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-ai-builder/">talk directly to data</a>.</p>
<p>If you’d like to try out an instance of the Fused workbench with pre-loaded data from Maxar later this month, which Peter demoed on screen, sign up for the waitlist on <a href="https://fused.maxar.com/" target="_blank" rel="noopener noreferrer" class="">fused.maxar.com</a> to get access and see for yourself this is more than a pre-recorded tech demo!</p>]]></content>
        <author>
            <name>Isaac Brodsky</name>
            <uri>https://www.linkedin.com/in/isaacbrodsky/</uri>
        </author>
        <author>
            <name>Sina Kashuk</name>
            <uri>https://www.linkedin.com/in/skashuk/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
        <category label="ai-builder" term="ai-builder"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Fused AI Builder]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/announcing-fused-ai-builder</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-ai-builder"/>
        <updated>2025-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Fused AI Builder let's you create LLM Agents that can directly call & execute deployed Python code through Fused UDFs!]]></summary>
        <content type="html"><![CDATA[<p><strong>Fused AI Builder let's you create LLM Agents that can directly call &amp; execute deployed Python code through <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/writing-udfs">Fused UDFs</a>!</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="give-llms-the-ability-the-talk-to-your-data--code">Give LLMs the ability the talk to your data &amp; code<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-ai-builder#give-llms-the-ability-the-talk-to-your-data--code" class="hash-link" aria-label="Direct link to Give LLMs the ability the talk to your data &amp; code" title="Direct link to Give LLMs the ability the talk to your data &amp; code" translate="no">​</a></h3>
<p>We're launching Fused AI Builder, a simple way for you to give an LLM access to any UDF you want</p>
<!-- -->
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/announcements/fused_ai_builder/demo_internet_speed_720p.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fused-udfs-meets-mcp-server">Fused UDFs meets MCP Server<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-ai-builder#fused-udfs-meets-mcp-server" class="hash-link" aria-label="Direct link to Fused UDFs meets MCP Server" title="Direct link to Fused UDFs meets MCP Server" translate="no">​</a></h3>
<p><a href="https://modelcontextprotocol.io/introduction" target="_blank" rel="noopener noreferrer" class="">MCP (Modal Context Protocol) Servers</a> allow Large Language Models like Claude or ChatGPT to directly make HTTPS queries. This means they can now access APIs and make all sorts of calls.</p>
<p>But a lot of the internet still doesn't have APIs, be it a new dataset you just discovered that's hosted on an FTP server or data on an S3 bucket that needs some processing before it's useful.</p>
<p>That's where Fused UDFs come into play. UDFs allow you to write Python code that can be executed from anywhere, and more importantly called from anywhere.</p>
<p><img decoding="async" loading="lazy" alt="Fused + MCP Diagram" src="https://docs-staging.fused.io/pr/1042/assets/images/Fused_AI_Builder_graph-970aec2d589988f2ab0374db1a9da784.png" width="1424" height="800" class="img_ev3q"></p>
<p>By using UDFs with MCP Server you can now easily write any Python code and allow a LLM like Antrophic's Claude to execute it &amp; use its output.</p>
<div style="max-width:800px;margin:0 auto 2rem auto"><iframe style="width:100%;aspect-ratio:16/9;height:auto;display:block" src="https://www.youtube.com/embed/JOMiCDDX1kY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="data-python--llms-all-in-one">Data, Python &amp; LLMs all in one<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-ai-builder#data-python--llms-all-in-one" class="hash-link" aria-label="Direct link to Data, Python &amp; LLMs all in one" title="Direct link to Data, Python &amp; LLMs all in one" translate="no">​</a></h3>
<p>You can now use LLM + Fused UDFs to do a whole host of tasks:</p>
<!-- -->
<div class="theme-tabs-container tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs unique-tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">Internet Speed of any location</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Creating a Three.js website</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">Combining Data</li></ul><div class="margin-top--md"><div role="tabpanel" class="tabItem_Ymn6"><div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/announcements/fused_ai_builder/internet_speed_test_demo.mov" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/announcements/fused_ai_builder/demo_building_website.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div></div><div role="tabpanel" class="tabItem_Ymn6" hidden=""><p>🚧 This section is under construction. Our non-AI Agents are still working on this 🚧</p></div></div></div>]]></content>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
        <category label="ai-builder" term="ai-builder"/>
        <category label="agents" term="agents"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Announcing Fused 2.0]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0"/>
        <updated>2025-02-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Fused 2.0 is our biggest update to date, with changes across Workbench & fused-py!]]></summary>
        <content type="html"><![CDATA[<p><strong>Fused 2.0 is our biggest update to date, with changes across Workbench &amp; <code>fused-py</code>!</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-new-udf-editor-in-workbench">A New UDF Editor in Workbench<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#a-new-udf-editor-in-workbench" class="hash-link" aria-label="Direct link to A New UDF Editor in Workbench" title="Direct link to A New UDF Editor in Workbench" translate="no">​</a></h3>
<p><img decoding="async" loading="lazy" alt="New Fused Workbench" src="https://docs-staging.fused.io/pr/1042/assets/images/new_ui-dc5c99d8f202980e48d540526d943fcf.png" width="3452" height="1970" class="img_ev3q"></p>
<!-- -->
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="introducing-collections-a-simple-way-to-organize-your-udfs">Introducing Collections: A simple way to organize your UDFs<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#introducing-collections-a-simple-way-to-organize-your-udfs" class="hash-link" aria-label="Direct link to Introducing Collections: A simple way to organize your UDFs" title="Direct link to Introducing Collections: A simple way to organize your UDFs" translate="no">​</a></h4>
<p>Collections now allows you to organize your UDFs together as you work on different projects, save them together and keep your editor focused on the project at hand.</p>
<!-- -->
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/announcements/fused_2_0/load_collections_new.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_BuS1"><p>Collection is still in early access so you need to enable it under "Preferences -&gt; Enable UDF Collections [Beta]" to access it</p></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="redesigned-udf-editor">Redesigned UDF Editor<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#redesigned-udf-editor" class="hash-link" aria-label="Direct link to Redesigned UDF Editor" title="Direct link to Redesigned UDF Editor" translate="no">​</a></h4>
<p>UDF Editor now comes with a host of new features &amp; redesigned UI:</p>
<ul>
<li class="">Adding a new Full Screen Map View</li>
<li class="">The Visualize Tab is now under the UDF expanded parameters, allowing you to hide your Code Editor and just focus on tweaking the visualization of your data</li>
<li class="">Split screen "Editor" &amp; "Module" on top of each other: Keeping your code clean in the main "Editor" Tab is now easier by moving functions under the "Module" tab.</li>
</ul>
<!-- -->
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-new-share-page">A New Share Page<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#a-new-share-page" class="hash-link" aria-label="Direct link to A New Share Page" title="Direct link to A New Share Page" translate="no">​</a></h4>
<p>We've moved all the tools &amp; information you need to easily share your UDFs into a dedicated page (and button). You can easily:</p>
<ul>
<li class="">Create a token to share your UDFs</li>
<li class="">Edit the Description, Tags &amp; Image preview of your UDFs</li>
</ul>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/workbench-walkthrough-videos/announcements/fused_2_0/share_udf.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="changes-to-fused-py">Changes to <code>fused-py</code><a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#changes-to-fused-py" class="hash-link" aria-label="Direct link to changes-to-fused-py" title="Direct link to changes-to-fused-py" translate="no">​</a></h3>
<p>Our Python library <code>fused-py</code> is getting some updates to make processing data in Python simpler, from a small one time task to processing huge datasets</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="simplifying-how-fused-handles-geometries">Simplifying how Fused handles geometries<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#simplifying-how-fused-handles-geometries" class="hash-link" aria-label="Direct link to Simplifying how Fused handles geometries" title="Direct link to Simplifying how Fused handles geometries" translate="no">​</a></h4>
<ul>
<li class="">Moving away from Fused having <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/geospatial-single-vs-tile#legacy-types">many different <code>fused.types</code></a> to only having 2 simple types: <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/geospatial-single-vs-tile#bounds"><code>fused.types.Bounds</code></a> and <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/geospatial-single-vs-tile#tile-udf"><code>fused.types.Tile</code></a>.</li>
<li class="">Replacing <code>bbox</code> object with <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/geospatial-single-vs-tile#bounds"><code>bounds</code></a>: a more generic term to pass geometries to UDFs</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="fusedsubmit-for-simple-multi-job-runs"><a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/scaling-out#parallel-execution"><code>fused.submit()</code></a> for simple, multi job runs<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#fusedsubmit-for-simple-multi-job-runs" class="hash-link" aria-label="Direct link to fusedsubmit-for-simple-multi-job-runs" title="Direct link to fusedsubmit-for-simple-multi-job-runs" translate="no">​</a></h4>
<p>We're introducing <code>fused.submit()</code> as a simple way to run many UDFs all at once in parallel</p>
<p><img decoding="async" loading="lazy" alt="fused.submit() demo" src="https://docs-staging.fused.io/pr/1042/assets/images/fused-submit-demo-177a79810cfb2cc7c54504684bae6b7d.png" width="1236" height="744" class="img_ev3q"></p>
<p>This can significantly speed up parallel tasks like:</p>
<ul>
<li class="">Fetching lots of individual data points from an API</li>
<li class="">Scaling small processing steps to lots of data points</li>
</ul>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="improved-caching">Improved caching<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#improved-caching" class="hash-link" aria-label="Direct link to Improved caching" title="Direct link to Improved caching" translate="no">​</a></h4>
<p>Under the hood we've significantly improved how Fused caches results of recurring UDFs &amp; cached functions + we've introduced new tools for developers to control caching:</p>
<ul>
<li class="">A default 14 days cache time for all UDFs</li>
<li class="">Editing the cache duration with the new <a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/caching"><code>cache_max_age</code> argument</a></li>
</ul>
<p><a class="" href="https://docs-staging.fused.io/pr/1042/guide/working-with-udfs/udf-best-practices/caching">Read more about Caching</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="full-fused-20-changelog">Full Fused 2.0 Changelog<a href="https://docs-staging.fused.io/pr/1042/blog/announcing-fused-2-0#full-fused-20-changelog" class="hash-link" aria-label="Direct link to Full Fused 2.0 Changelog" title="Direct link to Full Fused 2.0 Changelog" translate="no">​</a></h3>
<p><a class="" href="https://docs-staging.fused.io/pr/1042/python-sdk/changelog/#v1140-2025-02-25">Read our Changelog</a> to see every change happening with Fused 2.0</p>]]></content>
        <author>
            <name>Max Lenormand</name>
            <uri>https://www.linkedin.com/in/max-lenormand-b94640107/</uri>
        </author>
        <category label="fused" term="fused"/>
        <category label="workbench" term="workbench"/>
        <category label="announcement" term="announcement"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Enhance your data with GERS IDs]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids"/>
        <updated>2025-02-18T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR Enriching your spatial data with GERS IDs can make it interoperable across the data ecosystem. You can use Fused UDFs to create custom HTTPS endpoints to enrich your data with GERS.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR Enriching your spatial data with GERS IDs can make it interoperable across the data ecosystem. You can use Fused UDFs to create custom HTTPS endpoints to enrich your data with GERS.</strong></p>
<p>The <a href="https://docs.overturemaps.org/gers/" target="_blank" rel="noopener noreferrer" class="">Global Entity Reference System (GERS)</a> is a framework that structures, encodes, and matches map data to a shared universal reference within Overture. GERS helps organizations identify and reference their own datasets with standard identifiers to Overture data to help unify datasets.</p>
<!-- -->
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/gers_sheets.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<p><br>
<!-- -->In this blog post we show how to create simple endpoints with Fused UDFs to enrich a dataset with GERS IDs. We'll use the <a href="https://docs.overturemaps.org/guides/buildings/#14/32.58453/-117.05154/0/60" target="_blank" rel="noopener noreferrer" class="">Overture Building footprints</a> to first enrich a polygon with GERS IDs then another one to look-up metadata for a specified GERS ID.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-benefit-of-gers">The benefit of GERS<a href="https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids#the-benefit-of-gers" class="hash-link" aria-label="Direct link to The benefit of GERS" title="Direct link to The benefit of GERS" translate="no">​</a></h2>
<p>When third-party dataset is spatially matched to an Overture feature it's "enriched" with that feature's GERS ID and becomes "GERS-enabled". This makes it easy to associate it by ID to any other GERS-enabled dataset.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">                            gers_id             buliding_name</span><br></span><span class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">0  08b2a1072534cfff020018b8a6efde22  James A. Farley Building</span><br></span><span class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">1  08b2a100d2cb6fff02000821de8bdff1      Pennsylvania Station</span><br></span></code></pre></div></div>
<p>For example, a municipal government with a dataset of building footprints for local offices, coffee shops, and museums could match those entities to a GERS ID. This would enable the government to easily join its data other "GERS-enabled" datasets to enrich them with additional information such as insurance data, historical property values, restaurant reviews, fire risk, or rooftop solar potential.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-a-udf-to-enrich-a-polygon-with-gers-ids">Create a UDF to enrich a polygon with GERS IDs<a href="https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids#create-a-udf-to-enrich-a-polygon-with-gers-ids" class="hash-link" aria-label="Direct link to Create a UDF to enrich a polygon with GERS IDs" title="Direct link to Create a UDF to enrich a polygon with GERS IDs" translate="no">​</a></h2>
<p>We can create a UDF that takes in a polygon and returns a GERS ID. This UDF will spatially match the polygon to Overture Buildings and return the GERS ID of the building that intersects the polygon. This is useful for enriching a dataset with GERS IDs.</p>
<p>Users can design and preview the workflow interactively, allowing them to test assumptions and visualize their effect. Parameters can be adjusted, and the output can be previewed before running the UDF on the entire dataset.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> json</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">aoi </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> json</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">dumps</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">"type"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token string" style="color:hsl(95, 38%, 62%)">"FeatureCollection"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"features"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">"type"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token string" style="color:hsl(95, 38%, 62%)">"Feature"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"properties"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"geometry"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">"coordinates"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9945443706057</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token number" style="color:hsl(29, 54%, 61%)">40.751205998161026</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9945443706057</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token number" style="color:hsl(29, 54%, 61%)">40.749882643934455</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.99222917395902</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token number" style="color:hsl(29, 54%, 61%)">40.749882643934455</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.99222917395902</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token number" style="color:hsl(29, 54%, 61%)">40.751205998161026</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9945443706057</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token number" style="color:hsl(29, 54%, 61%)">40.751205998161026</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"type"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token string" style="color:hsl(95, 38%, 62%)">"Polygon"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">@fused</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">udf</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">udf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">types</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">TileGDF</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">aoi</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> geopandas </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">as</span><span class="token plain"> gpd</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    utils </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">load</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">"https://github.com/fusedio/udfs/tree/e1fefb7/public/Overture_Maps_Example/"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">utils</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 1. Convert bbox to GeoDataFrame</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">if</span><span class="token plain"> </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">isinstance</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">str</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        bbox </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gpd</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">GeoDataFrame</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">from_features</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">json</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">loads</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 2. Load Overture Buildings that intersect the given bbox centroid</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> utils</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">get_overture</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">geometry</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">centroid</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> overture_type</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'building'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> min_zoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token number" style="color:hsl(29, 54%, 61%)">10</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># How many Overture buildings fall within the bbox centroid?</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">print</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">"Buildings in centroid: "</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">len</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 3. Rule to set only one GERS on the input polygon</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'id'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token builtin" style="color:hsl(95, 38%, 62%)">id</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">values</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token number" style="color:hsl(29, 54%, 61%)">0</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> bbox</span></span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-an-https-endpoint">Create an HTTPS endpoint<a href="https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids#create-an-https-endpoint" class="hash-link" aria-label="Direct link to Create an HTTPS endpoint" title="Direct link to Create an HTTPS endpoint" translate="no">​</a></h3>
<p>With Fused, it's easy to turn your UDF into an <a class="" href="https://docs-staging.fused.io/pr/1042/workbench/udf-builder/navigation/#share-snippets">HTTPS endpoint</a>. This enables you to <a class="" href="https://docs-staging.fused.io/pr/1042/guide/data-input-outputs/export-api/tokens-endpoints">run the UDF</a> it programmatically via HTTPS requests to integrate the functionality into various workflows and applications.</p>
<p>This endpoint runs a public UDF with the code above. You can call it with a geojson of a single polygon in the bbox query parameter and it will return a geojson with the polygon and an assigned GERS ID.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">https://www.fused.io/server/v1/realtime-shared/UDF_Overture_Buildings_GERS_Enrich/run/file?dtype_out_vector=geojson&amp;bbox={"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"coordinates":[[[-73.9945443706057,40.751205998161026],[-73.9945443706057,40.749882643934455],[-73.99222917395902,40.749882643934455],[-73.99222917395902,40.751205998161026],[-73.9945443706057,40.751205998161026]]],"type":"Polygon"}}]}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-a-udf-to-look-up-metadata-for-a-gers-ids">Create a UDF to look-up metadata for a GERS IDs<a href="https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids#create-a-udf-to-look-up-metadata-for-a-gers-ids" class="hash-link" aria-label="Direct link to Create a UDF to look-up metadata for a GERS IDs" title="Direct link to Create a UDF to look-up metadata for a GERS IDs" translate="no">​</a></h2>
<p>We can also create a sample UDF to do a reverse operation: look-up a Building and its attributes by passing a GERS id. A user will be able to pass a GERS id and the UDF will look-up the building and return its geometry along with attributes about the building.</p>
<p>To do this, we create a UDF that takes in a <code>gers_id</code> parameter. Because the first 16 digits of GERS correspond to an H3 cell, we can use the ID to create a polygon to spatially filter the dataset. It'll bring up any buildings that intersect the H3 cell. Once we have the building, we can easily work with its geometry object and attributes using GeoPandas.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">@fused</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">udf</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">udf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">gers_id</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">str</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'08b2a100d2cb6fff02000821de8bdff1'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> h3</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">from</span><span class="token plain"> shapely</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">geometry </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> Polygon</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> geopandas </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">as</span><span class="token plain"> gpd</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> pandas </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">as</span><span class="token plain"> pd</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    utils </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">load</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">"https://github.com/fusedio/udfs/tree/e1fefb7/public/Overture_Maps_Example/"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">utils</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 1. H3 from GERS</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    h3_index </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gers_id</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token number" style="color:hsl(29, 54%, 61%)">16</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">print</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">'h3_index'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> h3_index</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 2. Polygon from H3</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    bounds </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> Polygon</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">coord</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">1</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">for</span><span class="token plain"> coord </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">in</span><span class="token plain"> h3</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">cell_to_boundary</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">h3_index</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    bbox </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gpd</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">GeoDataFrame</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">'h3_index'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">h3_index</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'geometry'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">bounds</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 3. Load Overture Buildings</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> utils</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">get_overture</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> overture_type</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'building'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> min_zoom</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token number" style="color:hsl(29, 54%, 61%)">10</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 4. Subselect building</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'id'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">==</span><span class="token plain"> gers_id</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 5. De-struct the names column</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    normalized_df </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> pd</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">json_normalize</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'names'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">reset_index</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">drop</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token boolean" style="color:hsl(29, 54%, 61%)">True</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">join</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">normalized_df</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'id'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'subtype'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'class'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'geometry'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span></span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-an-https-endpoint-1">Create an HTTPS endpoint<a href="https://docs-staging.fused.io/pr/1042/blog/enhance-your-data-with-gers-ids#create-an-https-endpoint-1" class="hash-link" aria-label="Direct link to Create an HTTPS endpoint" title="Direct link to Create an HTTPS endpoint" translate="no">​</a></h3>
<p>Here's how you can create and use an HTTPS endpoint for your GERS building lookup UDF.</p>
<p>This endpoint returns a CSV table of the building's GERS ID, primary name, subtype, class, and geometry. You can use this endpoint to enrich your dataset with GERS IDs by calling it with a GERS ID query parameter.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="token plain">https://www.fused.io/server/v1/realtime-shared/UDF_Overture_Buildings_GERS_Lookup/run/file?08b2a100d2cb6fff02000821de8bdff1&amp;dtype_out_vector=csv</span><br></span></code></pre></div></div>
<p>For example, you could call this endpoint from a Google Sheet to enrich a dataset with GERS IDs. This sample Google Sheet returns the enriches the "primary" name column for any given Building GERS. Just drag the formula to apply it to any row below. It works by calling the "GERS lookup" endpoint with a GERS ID query parameter.</p>]]></content>
        <author>
            <name>Jennings Anderson</name>
            <uri>https://www.linkedin.com/in/jenningsanderson/</uri>
        </author>
        <author>
            <name>Plinio Guzman</name>
            <uri>https://www.linkedin.com/in/plinioguzman/</uri>
        </author>
        <category label="gers" term="gers"/>
        <category label="h3" term="h3"/>
        <category label="overture" term="overture"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[We're partnering with Overture to make their Data easily accessible with Fused]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture"/>
        <updated>2025-02-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[_TL;DR: We've made it easier to work with Overture data by leveraging Fused._]]></summary>
        <content type="html"><![CDATA[<p><strong><em>TL;DR: We've made it easier to work with Overture data by leveraging Fused.</em></strong></p>
<p>Fused has been working with the team at The <a href="https://overturemaps.org/" target="_blank" rel="noopener noreferrer" class="">Overture Maps Foundation</a> to enable direct access to their data through Fused UDFs. We are excited to share that the <a href="https://docs.overturemaps.org/getting-data/fused/" target="_blank" rel="noopener noreferrer" class="">Overture docs</a> now show examples on how to see how to integrate any Overture data into your workflows using Fused.</p>
<p><img decoding="async" loading="lazy" alt="Alt" src="https://docs-staging.fused.io/pr/1042/assets/images/overture_docs-27f92b1f4c47ece6cdf715e37b9daeca.png" width="2334" height="2228" class="img_ev3q"></p>
<p>Overture Maps aims to provide foundational building blocks of data across various themes designed to be broadly applicable across industries. Our goal at Fused is to make it easy to work with Overture data and adopt standards (such as <a href="https://docs.overturemaps.org/gers/" target="_blank" rel="noopener noreferrer" class="">GERS</a>). To this end, we are creating easy abstractions to access data, tools to perform foundational operations such as conflation and enrichment, and example workflows to inspire and help you understand how to leverage this data.</p>
<p>One of the key usecases for Overture + Fused is enriching datasets with Overture Maps data. This tutorial showcases 2 simple Python workflows that do this by performing a spatial join with Overture Buildings. This example of a simple enrichment operation will help you understand how to work with Overture data in your own workflows.</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>To follow along, check out the:</p><ul>
<li class=""><a href="https://docs.overturemaps.org/getting-data/data-mirrors/fused/" target="_blank" rel="noopener noreferrer" class="">Overture Maps Docs "Getting Data" Page</a></li>
<li class=""><a href="https://docs.overturemaps.org/examples/fused/" target="_blank" rel="noopener noreferrer" class="">Overture Maps Docs "Examples" Page</a></li>
<li class=""><a href="https://www.fused.io/workbench/catalog/Overture_Maps_Example-64071fb8-2c96-4015-adb9-596c3bac6787" target="_blank" rel="noopener noreferrer" class="">Overture Maps Example UDF</a></li>
<li class=""><a href="https://www.fused.io/workbench/catalog/Overture_Nsi-dd89972c-ce30-4544-ba0f-81fc09f5bbef" target="_blank" rel="noopener noreferrer" class="">Overture + NSI UDF</a></li>
</ul></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="overview">Overview<a href="https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview" translate="no">​</a></h2>
<p>The Overture Buildings dataset is dividen into themes. Two key themes are:</p>
<ul>
<li class=""><a href="https://docs.overturemaps.org/guides/buildings/#14/32.58453/-117.05154/0/60" target="_blank" rel="noopener noreferrer" class="">Buildings</a> is composed of building footprints represented as polygons</li>
<li class=""><a href="https://docs.overturemaps.org/guides/places/#14/32.58453/-117.05154/0/60" target="_blank" rel="noopener noreferrer" class="">Places</a> is composed of business establishment locations and associated metadata, represented with point coordinates.</li>
</ul>
<p>We'll first show how you can load Overture data by reusing an existing Fused UDF, then write a User Defined Function (UDF) with custom logic to perform enrichment with a spatial join. You'll be able to run the resulting UDF for any custom area of interest (AOI).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-load-data-with-the-overture-maps-udf">Step 1: Load data with the Overture Maps UDF<a href="https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture#step-1-load-data-with-the-overture-maps-udf" class="hash-link" aria-label="Direct link to Step 1: Load data with the Overture Maps UDF" title="Direct link to Step 1: Load data with the Overture Maps UDF" translate="no">​</a></h2>
<p>Fused has a catalog of pre-made UDFs you can easily copy and repurpose for your own data analysis workflows. In the catalog, you'll find the Fused Overture UDF which enables you to quickly load Overture data from any of the themes for an area of interest (AOI). You can run the UDF with <code>fused.run</code> and specify an AOI to load data for using the bbox parameter. You may also pass optional parameters to select between Overture releases, themes, and columns - that way you can fetch only the data you need. In this example, we can specify the 'building' theme by setting the <code>overture_type</code> parameter.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> fused</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">bounds </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9847</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.7666</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9810</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.7694</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">run</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">'UDF_Overture_Maps_Example'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> bounds</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bounds</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> overture_type</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'building'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span></span><br></span></code></pre></div></div>
<p>The output should look like this:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">id</span><span class="token plain">	                                geometry	                                        </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">class</span><span class="token plain">   </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24134</span><span class="token plain">	08b2a100d65a6fff0200b45ce7e2b99b	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98552</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76736</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98557</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.767</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	apartments  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24135</span><span class="token plain">	08b2a1008b259fff02007917db1c32d3	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98441</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76703</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98431</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.767</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	apartments  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24178</span><span class="token plain">	08b2a100d6516fff0200ded2bf849c8a	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98375</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76693</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98381</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.766</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	apartments  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24179</span><span class="token plain">	08b2a100d6516fff02006dc174022a7e	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98346</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76623</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98327</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.766</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	commercial  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24180</span><span class="token plain">	08b2a1008b248fff0200315983940aa8	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98407</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76749</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98402</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.767</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	</span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token plain">    </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span></code></pre></div></div>
<p>By browsing the UDF's <a href="https://www.fused.io/workbench/catalog/Overture_Maps_Example-64071fb8-2c96-4015-adb9-596c3bac6787" target="_blank" rel="noopener noreferrer" class="">catalog page</a>, you can see its code and even copy it to run it interactively on the Fused Workbench. You'll notice that the UDF uses the <code>get_overture</code> helper function to read from spatially partitioned parquets of the overture data releases, hosted in a Source Cooperative S3 bucket. The source code of the helper function is fully open and hosted on GitHub <a href="https://github.com/fusedio/udfs/blob/main/public/Overture_Maps_Example/utils.py" target="_blank" rel="noopener noreferrer" class="">here</a>.</p>
<p>Here's a simplified version to show the core of what's going on in <code>get_overture</code>. It constructs the table path on S3 and then uses the <a href="https://github.com/fusedio/udfs/blob/main/public/common/utils.py#L258" target="_blank" rel="noopener noreferrer" class="">table_to_tile</a> helper function from Fused to load data that falls within the specified bounding box. This approach allows you to efficiently perform spatial queries on a large dataset and load only the records within the given area.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token comment" style="color:hsl(220, 10%, 40%)"># Structure the table path with input parameters</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">table_path </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token string-interpolation string" style="color:hsl(95, 38%, 62%)">f"s3://us-west-2.opendata.source.coop/fused/overture/</span><span class="token string-interpolation interpolation punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string-interpolation interpolation">release</span><span class="token string-interpolation interpolation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token string-interpolation string" style="color:hsl(95, 38%, 62%)">/theme=</span><span class="token string-interpolation interpolation punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string-interpolation interpolation">theme</span><span class="token string-interpolation interpolation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token string-interpolation string" style="color:hsl(95, 38%, 62%)">/type=</span><span class="token string-interpolation interpolation punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string-interpolation interpolation">overture_type</span><span class="token string-interpolation interpolation punctuation" style="color:hsl(220, 14%, 71%)">}</span><span class="token string-interpolation string" style="color:hsl(95, 38%, 62%)">"</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token comment" style="color:hsl(220, 10%, 40%)"># Load the data within the bounding box</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">df </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> utils</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">table_to_tile</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> table</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">part_path</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span></span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-write-a-custom-udf-to-join-places-with-buildings">Step 2: Write a Custom UDF to join Places with Buildings<a href="https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture#step-2-write-a-custom-udf-to-join-places-with-buildings" class="hash-link" aria-label="Direct link to Step 2: Write a Custom UDF to join Places with Buildings" title="Direct link to Step 2: Write a Custom UDF to join Places with Buildings" translate="no">​</a></h2>
<p>The example above shows how to run an existing UDF to load Overture data, but it's likely you want to write your own data transformations. You can borrow <code>get_overture</code> to load data into your own UDFs. As an example, here is a UDF to load Overture Buildings polygons and Overture Places points. The UDF perform a spatial join between them to determine which points fall within each building.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">@fused</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">udf</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">udf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">types</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">TileGDF </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    utils </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">load</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">"https://github.com/fusedio/udfs/tree/e1fefb7/public/Overture_Maps_Example/"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">utils</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 1. Load Buildings</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf_buildings </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> utils</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">get_overture</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> theme</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'buildings'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 2. Load Places</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf_places </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> utils</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">get_overture</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> theme</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'places'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 3. Create a column with the Buliding Name</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf_buildings</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary_name'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gdf_buildings</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'names'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token builtin" style="color:hsl(95, 38%, 62%)">apply</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token keyword" style="color:hsl(286, 60%, 67%)">lambda</span><span class="token plain"> x</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> x</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">if</span><span class="token plain"> </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">isinstance</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">x</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">dict</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">else</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 4. Spatial join between Places and Buildings</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf_joined </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gdf_places</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">sjoin</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">gdf_buildings</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'geometry'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary_name'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">'id'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'names'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary_name'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'geometry'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> gdf_joined</span></span><br></span></code></pre></div></div>
<p>To run this UDF, you simply call it with your AOI. Fused will execute the code with the given parameter then return the UDF's output.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> fused</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> geopandas </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">as</span><span class="token plain"> gpd</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> shapely</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">bbox </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gpd</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">GeoDataFrame</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">geometry</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">shapely</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">box</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9847</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.7666</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.9810</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.7694</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> crs</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token number" style="color:hsl(29, 54%, 61%)">4326</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">run</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">udf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> bbox</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span></span><br></span></code></pre></div></div>
<p>This will return a GeoDataFrame with the geometry of the Place, the <code>primary_name</code> of the building it falls within, and other attributes as defined in the UDF's return statement.</p>
<p>The output should look like this:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">id</span><span class="token plain">	                                names                                                   primary_name	    geometry</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">3883</span><span class="token plain">	08f2a100d65160860308e7269804dcb7	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">'common'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'Alamo Rent A Car'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	The Sheffield </span><span class="token number" style="color:hsl(29, 54%, 61%)">57</span><span class="token plain">    POINT </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98404</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76661</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">3884</span><span class="token plain">	08f2a100d65160860306e05f63f3cbaf	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">'common'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> 'National Car Rent</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	The Sheffield </span><span class="token number" style="color:hsl(29, 54%, 61%)">57</span><span class="token plain">    POINT </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98403</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76661</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">3896</span><span class="token plain">	08f2a100d6516b110387be8074670bfa	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">'common'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'Quality Fashion'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	Hearst Tower	    POINT </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98370</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76660</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">3898</span><span class="token plain">	08f2a100d65147290359c345582a702e	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">{</span><span class="token string" style="color:hsl(95, 38%, 62%)">'common'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token string" style="color:hsl(95, 38%, 62%)">'primary'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> 'House Beautiful M</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	Hearst Tower	    POINT </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98338</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76664</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span></span><br></span></code></pre></div></div>
<!-- -->
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/join_places.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-write-a-custom-udf-to-join-buildings-with-the-nsi-dataset">Step 3: Write a Custom UDF to join Buildings with the NSI dataset<a href="https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture#step-3-write-a-custom-udf-to-join-buildings-with-the-nsi-dataset" class="hash-link" aria-label="Direct link to Step 3: Write a Custom UDF to join Buildings with the NSI dataset" title="Direct link to Step 3: Write a Custom UDF to join Buildings with the NSI dataset" translate="no">​</a></h2>
<p>As a second example, you can also enrich the Overture Buildings dataset with metadata data from the National Structure Inventory (NSI) API. The NSI API offers point data on buildings in the U.S. that is relevant to hazard analyses.</p>
<p>This UDF loads the Overture and NSI datasets, performs a spatial join to enrich the building polygons with hazard metadata, and returns the enriched GeoDataFrame. It can be used within a larger analysis workflow to enrich building polygons to calculate risk indices. You can read more about performing spatial operations to enrich Overture Buildings with NSI in our <a class="" href="https://docs-staging.fused.io/pr/1042/examples/zonal-stats">geospatial processing guide</a>.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">@fused</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token decorator annotation punctuation" style="color:hsl(220, 14%, 71%)">udf</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token keyword" style="color:hsl(286, 60%, 67%)">def</span><span class="token plain"> </span><span class="token function" style="color:hsl(207, 82%, 66%)">udf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">types</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">TileGDF </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token boolean" style="color:hsl(29, 54%, 61%)">None</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> geopandas </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">as</span><span class="token plain"> gpd</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> pandas </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">as</span><span class="token plain"> pd</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">import</span><span class="token plain"> requests</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    utils </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> fused</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">load</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token string" style="color:hsl(95, 38%, 62%)">"https://github.com/fusedio/udfs/tree/e1fefb7/public/Overture_Maps_Example/"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">utils</span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 1. Load Overture Buildings</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf_overture </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> utils</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">get_overture</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">bbox</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 2. Load NSI from API</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    response </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">post</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        url</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">"https://nsi.sec.usace.army.mil/nsiapi/structures?fmt=fc"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">        json</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain">bbox</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">__geo_interface__</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 3. Create NSI gdf</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    gdf </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gpd</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">GeoDataFrame</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">from_features</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">response</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">json</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">"features"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token comment" style="color:hsl(220, 10%, 40%)"># 4. Join Overture and NSI</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    cols </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">"id"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"geometry"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"metric"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"ground_elv_m"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"height"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"num_floors"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token string" style="color:hsl(95, 38%, 62%)">"num_story"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    join </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> gdf_overture</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">sjoin</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">gdf</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> how</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token string" style="color:hsl(95, 38%, 62%)">'left'</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    join</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token string" style="color:hsl(95, 38%, 62%)">"metric"</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token plain"> join</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token builtin" style="color:hsl(95, 38%, 62%)">apply</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token keyword" style="color:hsl(286, 60%, 67%)">lambda</span><span class="token plain"> row</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">:</span><span class="token plain"> row</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">height </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">if</span><span class="token plain"> pd</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">notnull</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token plain">row</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">height</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"> </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">else</span><span class="token plain"> row</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">num_story</span><span class="token operator" style="color:hsl(207, 82%, 66%)">*</span><span class="token number" style="color:hsl(29, 54%, 61%)">3</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> axis</span><span class="token operator" style="color:hsl(207, 82%, 66%)">=</span><span class="token number" style="color:hsl(29, 54%, 61%)">1</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">)</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">    </span><span class="token keyword" style="color:hsl(286, 60%, 67%)">return</span><span class="token plain"> join</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">[</span><span class="token plain">cols</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">]</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span></code></pre></div></div>
<p>The output should look like this:</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-background-color:hsl(220, 13%, 18%);--prism-color:hsl(220, 14%, 71%)"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="background-color:hsl(220, 13%, 18%);color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><code class="codeBlockLines_e6Vv codeBlockLinesWithNumbering_o6Pm" style="counter-reset:line-count 0"><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain" style="display:inline-block"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain">	    </span><span class="token builtin" style="color:hsl(95, 38%, 62%)">id</span><span class="token plain">	                                geometry	                                        val_struct      med_yr_blt  </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24178</span><span class="token plain">	08b2a100d6516fff0200ded2bf849c8a	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98375</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76693</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98381</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.766</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	</span><span class="token number" style="color:hsl(29, 54%, 61%)">378633.733</span><span class="token plain">	</span><span class="token number" style="color:hsl(29, 54%, 61%)">1939</span><span class="token plain">	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24178</span><span class="token plain">	08b2a100d6516fff0200ded2bf849c8a	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98375</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76693</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98381</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.766</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	</span><span class="token number" style="color:hsl(29, 54%, 61%)">348190.820</span><span class="token plain">	</span><span class="token number" style="color:hsl(29, 54%, 61%)">1939</span><span class="token plain">	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain"></span></span><br></span><span class="token-line codeLine_lJS_" style="color:hsl(220, 14%, 71%);text-shadow:0 1px rgba(0, 0, 0, 0.3)"><span class="codeLineNumber_Tfdd"></span><span class="codeLineContent_feaV"><span class="token plain"></span><span class="token number" style="color:hsl(29, 54%, 61%)">24178</span><span class="token plain">	08b2a100d6516fff0200ded2bf849c8a	POLYGON </span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">(</span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98375</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.76693</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">,</span><span class="token plain"> </span><span class="token operator" style="color:hsl(207, 82%, 66%)">-</span><span class="token number" style="color:hsl(29, 54%, 61%)">73.98381</span><span class="token plain"> </span><span class="token number" style="color:hsl(29, 54%, 61%)">40.766</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token plain">	</span><span class="token number" style="color:hsl(29, 54%, 61%)">378633.733</span><span class="token plain">	</span><span class="token number" style="color:hsl(29, 54%, 61%)">1939</span><span class="token plain">	</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span><span class="token punctuation" style="color:hsl(220, 14%, 71%)">.</span></span><br></span></code></pre></div></div>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/overture_nsi_2025.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://docs-staging.fused.io/pr/1042/blog/partnering-with-overture#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>In this short tutorial, we outlined how you can integrate Overture data into your workflows using Fused. We saw how you can use Fused to load the data, write a custom Python workflow, and run it for a custom AOI. We hope the these foundational pieces help you see how you can unlock the full potential of Overture Maps and start creating your own workflows to enrich your own datasets.</p>]]></content>
        <author>
            <name>Jennings Anderson</name>
            <uri>https://www.linkedin.com/in/jenningsanderson/</uri>
        </author>
        <author>
            <name>Plinio Guzman</name>
            <uri>https://www.linkedin.com/in/plinioguzman/</uri>
        </author>
        <category label="overture" term="overture"/>
        <category label="spatial" term="spatial"/>
        <category label="join" term="join"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Pilot Fiber creates internal tools to support telecom operations]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/how-pilot-fiber-creates-internal-tools-to-support-telecom-operations</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/how-pilot-fiber-creates-internal-tools-to-support-telecom-operations"/>
        <updated>2025-01-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR Pilot Fiber creates apps with Fused to quickly identify and resolve service interruptions for its New York City customers.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR Pilot Fiber creates apps with Fused to quickly identify and resolve service interruptions for its New York City customers.</strong></p>
<!-- -->
<div style="height:360px;width:100%" class="video__player"></div>
<br>
<p><a href="https://www.pilotfiber.com/" target="_blank" rel="noopener noreferrer" class="">Pilot Fiber</a> is a commercial <a href="https://en.wikipedia.org/wiki/Internet_service_provider" target="_blank" rel="noopener noreferrer" class="">Internet Service Provider</a> primarily in New York City. Our primary value proposition in competing with national-scale ISPs is our commitment to customer experience–we are fast and flexible in responding to customer needs in all aspects of the business:</p>
<ul>
<li class="">During the sales process, we aim to answer customer questions quickly and accurately, including technical details and routing.</li>
<li class="">When designing our deployment into new buildings, we equip our engineers with as much detail as possible before they arrive on-site to maximize the efficiency of time spent with building engineers.</li>
<li class="">When an incident interrupts a service we will immediately jump into action to address the cause and restore connectivity.</li>
</ul>
<p>We use Fused to support all of these areas, and this post focuses on the last one: incident management.</p>
<ul>
<li class="">What happens when a service interruption occurs?</li>
<li class="">How do we identify the likely location of an issue and get to a solution as quickly as possible?</li>
</ul>
<!-- -->
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem-why-speed-matters">The Problem: Why Speed Matters<a href="https://docs-staging.fused.io/pr/1042/blog/how-pilot-fiber-creates-internal-tools-to-support-telecom-operations#the-problem-why-speed-matters" class="hash-link" aria-label="Direct link to The Problem: Why Speed Matters" title="Direct link to The Problem: Why Speed Matters" translate="no">​</a></h3>
<p>One of the most common ways a customer's service can be impacted is through damage to the physical fiber cables connecting them back to a data center and the internet. Almost all fiber optic cables in Manhattan run through a shared manhole-and-duct system beneath the streets. As such, road construction or work by other providers in a manhole has the potential to damage the equipment of multiple providers. When that damage occurs, it is first come, first served to get your network repaired and customers back online. Field teams from multiple providers can't work in the same manhole simultaneously, so being onsite first and ready to repair can mean a difference of hours in customer downtime.</p>
<p>Because of this, Pilot uses an active fiber monitoring system across our network. Sophisticated devices in our data centers are constantly shooting light down the fibers in our network looking for potential damage. Those devices return a reflectance signature from the fiber and compare it with a reference "snapshot" created when that fiber was initially installed in a building.</p>
<p>When an anomaly is registered, it immediately fires an alert giving a fiber route and distance to the potential problem (i.e. "There is unexpected light loss on the fiber serving 1234 5th Avenue at a distance of 2.351 kilometers from the data center."). When this happens, our engineering and support teams analyze the data within minutes to determine the issue's exact location and, if necessary, get crews headed to the site to begin repairs.</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/pilotfiber_video.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<br>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-process-fused-as-the-glue-layer">The Process: Fused As The Glue-Layer<a href="https://docs-staging.fused.io/pr/1042/blog/how-pilot-fiber-creates-internal-tools-to-support-telecom-operations#the-process-fused-as-the-glue-layer" class="hash-link" aria-label="Direct link to The Process: Fused As The Glue-Layer" title="Direct link to The Process: Fused As The Glue-Layer" translate="no">​</a></h2>
<p>Historically, this analysis has required the attention of an Outside Plant engineer with access to specialized software and network knowledge, regardless of the time of day or day of the week. This bottleneck is not ideal when time is of the essence, even at 3 a.m. So today, we are creating a more sophisticated future using Fused to make this information accessible to more support team members and make our response times even faster.</p>
<p>Using Fused as a back-end glue layer, we built a web app allowing users to select a route and distance and calculate where the system has registered the fault. We also created a simple user interface that provides the user a view of nearby network infrastructure and automatically generates the reports field crews would need to complete repairs based on that nearby infrastructure.</p>
<p>The workflow requires a series of calls to UDFs that act as intermediaries to a <a href="https://www.postgresql.org/" target="_blank" rel="noopener noreferrer" class="">Postgres</a>/<a href="https://postgis.net/" target="_blank" rel="noopener noreferrer" class="">PostGIS</a> database, which in turn is sourcing data from other internal sources. This structure allows us to easily keep the business logic organized at the UDF layer while limiting the scope of data access and security via Postgres and internal processes maintaining the sync.</p>
<p>The basic process is seen below:</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/kyle1-30eda2325c15afb280926c5ac72fc818.png" alt="File"></div>
<p><em>Workflow diagram.</em></p>
<p>Two separate flows are initiated when the user inputs a route and a distance to process. One retrieves the selected route to load onto the Mapbox-based map within the app, while the second kicks off a processing chain to analyze the fault information. This chain utilizes UDFs that assist in isolating the location of the fault and relevant nearby infrastructure and adding elements to the map display to assist the user in visualizing what may be occurring.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/kyle2-a52573fdb14a66db182c087c31aacf11.png" alt="File"></div>
<p><em>UDF to find fault location.</em></p>
<p>If you consider the cables you see strung along utility poles, they are not perfectly straight: they can sag, bend, go up and down, and have coils of extra cable along the way. The same is true of our cables under the streets. All of those variations add distance to the run, which needs to be considered when determining where a fault is likely to be located.</p>
<p>Taking those variables into account, we use Fused to apply <a href="http://geopandas.org/" target="_blank" rel="noopener noreferrer" class="">GeoPandas</a> and PostGIS spatial functionality to assess where the fault is most likely to be located. After calculating that location, the tool loads splice cases along that route that point to where problems are most likely to have occurred, and slack loops built into the route to make the user aware of nearby capacity that could enable faster repair of more significant damage. We next determine which splice cases are closest to the likely damage point and if any of those are within 150m of the automated distance calculation. These manholes would be the first locations our field teams would be sent to investigate.</p>
<p>Once we have determined the relevant nearby splice cases, we use another UDF to build a CSV that reproduces what a splice report export looks like from our primary fiber mapping software. This report details what cables enter the case, what fibers on which cables are spliced to which fibers on other cables, and what building and/or customer circuits are being carried along which fibers. Fused then integrates with a separate process we previously built to process that CSV into the final file that goes to the field teams. This gives them the confidence to quickly address issues while minimizing the risk of damaging other circuits, as well as giving them the information needed to monitor the status of other services in the case while they work.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-impact-of-fused">The Impact of Fused<a href="https://docs-staging.fused.io/pr/1042/blog/how-pilot-fiber-creates-internal-tools-to-support-telecom-operations#the-impact-of-fused" class="hash-link" aria-label="Direct link to The Impact of Fused" title="Direct link to The Impact of Fused" translate="no">​</a></h2>
<p>The impact of Fused across this process is many-fold:</p>
<ul>
<li class="">The ability to easily work with data across several systems.</li>
<li class="">Centralizing business logic to the UDFs involved eliminates the tendency for this logic to be spread across client-side processes, server-side processes, and possibly the database itself.</li>
<li class="">Modularization of operations into UDFs. For example, the UDF that generates the splice reports for this process can easily be reused in any other method that requires the same functionality.</li>
<li class="">The effortless ability for the same UDF to simultaneously serve as a modular processing unit where needed in one workflow and a map service for display in another.</li>
<li class="">Using Python and standard libraries enables developers who may not be spatial data experts to read, understand, and modify UDFs as necessary.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://docs-staging.fused.io/pr/1042/blog/how-pilot-fiber-creates-internal-tools-to-support-telecom-operations#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>Pilot's success in the market is largely based on our flexibility and responsiveness to customer needs, which is never more important than when physical damage to the network is impacting their service. Within this scenario, Fused is providing a critical layer enabling us to offer more non-technical users access to data in multiple systems through a simple UI that will result in repair teams moving to restore service to our customers as quickly as possible.</p>
<p>Fused is an ideal product for Pilot Fiber in that we can increasingly make highly technical information available in a usable format to additional teams throughout the company in support of our drive to be fast, flexible, and accurate in delivering service to our customers in all aspects of the business.</p>]]></content>
        <author>
            <name>Kyle Pittman</name>
            <uri>https://www.linkedin.com/in/kwpittman/</uri>
        </author>
        <author>
            <name>Nelina Huang</name>
            <uri>https://www.linkedin.com/in/nelinahuang/</uri>
        </author>
        <category label="postgres" term="postgres"/>
        <category label="postgis" term="postgis"/>
        <category label="csv" term="csv"/>
        <category label="integrations" term="integrations"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[How Fused Powers BlackPrint's Acquisition Intelligence Platform]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/how-fused-powers-blackprints-acquisition-intelligence-platform</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/how-fused-powers-blackprints-acquisition-intelligence-platform"/>
        <updated>2025-01-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR BlackPrint streamlines and transforms fragmented real estate data into actionable insights across Latin America.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR BlackPrint streamlines and transforms fragmented real estate data into actionable insights across Latin America.</strong></p>
<!-- -->
<iframe style="width:100%;max-width:800px;aspect-ratio:16/9;height:auto;margin:0 auto 2rem auto;display:block" src="https://www.youtube.com/embed/_Im7OgLKp3g" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<p><a href="https://www.blackprint.ai/" target="_blank" rel="noopener noreferrer" class="">BlackPrint Technologies</a> began its journey as a satellite mapping service designed to help municipalities modernize their property registries. Recognizing a greater opportunity, we transitioned into the private sector to address a significant gap in the commercial real estate market: the need for accessible, actionable data. Today, our platform empowers professionals with precise acquisition intelligence, transforming how decisions are made across Mexico and, soon, all of Latin America.</p>
<p>In this blog post, we will explore how BlackPrint built the backend of its intelligence platform with Fused to provide a comprehensive view of the commercial real estate market in Mexico.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem-challenges-in-real-estate-data">The Problem: Challenges in Real Estate Data<a href="https://docs-staging.fused.io/pr/1042/blog/how-fused-powers-blackprints-acquisition-intelligence-platform#the-problem-challenges-in-real-estate-data" class="hash-link" aria-label="Direct link to The Problem: Challenges in Real Estate Data" title="Direct link to The Problem: Challenges in Real Estate Data" translate="no">​</a></h2>
<p>Real estate professionals face fragmented data sources and manual processes. This complexity limits access to critical metrics such as zoning regulations, demographic patterns, and traffic trends, making site selection decisions both high-stakes and prone to errors. BlackPrint recognized this challenge and set out to create an all-in-one platform, transforming disjointed data into actionable intelligence to empower professionals across the commercial real estate landscape in Latin America.
Our Solution: The BlackPrint Approach</p>
<p>BlackPrint's platform offers a comprehensive suite of tools and insights, including property and zoning data, demographic and socioeconomic analytics, and detailed foot and vehicle traffic analysis. Underpinning this solution is a staggering volume of geospatial data sourced from diverse datasets such as cadastral records, demographic studies, and traffic sensors. This vast amount of information is meticulously analyzed to deliver actionable insights, all while being presented through an intuitive and user-friendly interface. By simplifying complex data into accessible formats, BlackPrint empowers users—regardless of their technical expertise—to navigate and leverage insights with ease. Building such a robust platform required not only expertise but also the right tools. That's where Fused came in.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/blackprint1-ff3bd77cb03ac6a1c24e3f3f34be9eda.png" alt="File"></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="leveraging-fused-a-partnership-for-efficiency">Leveraging Fused: A Partnership for Efficiency<a href="https://docs-staging.fused.io/pr/1042/blog/how-fused-powers-blackprints-acquisition-intelligence-platform#leveraging-fused-a-partnership-for-efficiency" class="hash-link" aria-label="Direct link to Leveraging Fused: A Partnership for Efficiency" title="Direct link to Leveraging Fused: A Partnership for Efficiency" translate="no">​</a></h2>
<p>Fused became an indispensable partner in turning our vision for BlackPrint into reality. Its end-to-end cloud platform allowed us to move from concept to MVP significantly faster by simplifying our data processing and data delivery workflows. Before using Fused, we faced daunting challenges, such as processing and visually inspecting terabytes of traffic data and massive datasets from the <a href="https://docs.overturemaps.org/guides/places/" target="_blank" rel="noopener noreferrer" class="">Overture Maps Foundation</a> for points of interest.</p>
<p>These tasks, which previously required extensive time and resources, became streamlined and efficient with Fused. Its ability to process geospatial datasets via https-accessible Python functions made the development process seamless, enabling us to focus on creating an intuitive, high-performance platform. With Fused, we could deliver real-time insights and user-friendly visualizations at a scale that was unimaginable only a few years ago.</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/demo_blackprint_platform_short.mov" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<br>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="empowering-professionals-with-unprecedented-insights">Empowering Professionals with Unprecedented Insights<a href="https://docs-staging.fused.io/pr/1042/blog/how-fused-powers-blackprints-acquisition-intelligence-platform#empowering-professionals-with-unprecedented-insights" class="hash-link" aria-label="Direct link to Empowering Professionals with Unprecedented Insights" title="Direct link to Empowering Professionals with Unprecedented Insights" translate="no">​</a></h2>
<p>BlackPrint's platform is transforming real estate decision-making by delivering unprecedented insights to professionals. For example, a retailer in Mexico City utilized our tools to identify a high-traffic site with optimal customer reach, saving weeks of manual analysis and significantly improving accuracy.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/blackprint2-b0e8aceadb45cce505d37ffa3533a644.png" alt="File"></div>
<p>Our platform's effectiveness is measured through key metrics like time saved, improved precision, and enhanced ROI for our clients. Users have reported up to a 30% increase in efficiency when planning site expansions or evaluating investments.</p>
<p>Looking ahead, BlackPrint's vision extends beyond Mexico, aiming to revolutionize acquisition intelligence across Latin America. With partners like Fused, we continue to innovate, making geospatial analytics scalable, intuitive, and accessible to professionals at every level.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/blackprint3-59969cbb852d81f9bca17e5191976efc.png" alt="File"></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://docs-staging.fused.io/pr/1042/blog/how-fused-powers-blackprints-acquisition-intelligence-platform#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>BlackPrint Technologies is on a mission to redefine real estate intelligence by delivering actionable insights that drive smarter, faster decisions. This journey has been significantly accelerated thanks to Fused, whose serverless data delivery empowered us to process and serve complex geospatial data at an unprecedented scale. Together, we are shaping a future where real estate professionals can access intuitive, data-driven tools that simplify their workflows and enhance their outcomes. Join us in transforming the industry—visit <a href="https://www.blackprint.ai/" target="_blank" rel="noopener noreferrer" class="">blackprint.ai</a> to see how we are revolutionizing real estate decision-making.</p>]]></content>
        <author>
            <name>Gilberto S. Perezalonso</name>
            <uri>https://www.linkedin.com/in/gilberto-s-perezalonso/</uri>
        </author>
        <category label="site suitability" term="site suitability"/>
        <category label="real estate" term="real estate"/>
        <category label="overture" term="overture"/>
        <category label="app" term="app"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hot-spot analysis for invasive species using Overture Maps]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps"/>
        <updated>2025-01-21T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR Elizabeth Rosenbloom creates hotspot maps to identify key areas where Arundo donax is likely to spread, streamlining analysis to improve invasive species mitigation.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR Elizabeth Rosenbloom creates hotspot maps to identify key areas where Arundo donax is likely to spread, streamlining analysis to improve invasive species mitigation.</strong></p>
<!-- -->
<div class="video__wrapper"><video src="https://youtu.be/TKY1CY5qXiM" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<br>
<p>In 2020 while working in Silicon Valley for the county of Santa Clara Valley, I became obsessed with improving monitoring and prevention efforts surrounding Arundo donax. The search and mitigation process this invasive plant species, Arundo donax, was a Sisophisian struggle that had been subject to the same procedures year in and year out, with no progress on beating the spread. To improve the efficacy and efficiency in battling against this notorious weed, I decided to build a tool that would identify the key areas for mitigation - both for the frequency of propagation (occurrence) and for spread potential.</p>
<p>In this blog post I show how I used Fused to create a map of key hotspots where Arundo donax is likely to spread based on built-environment factors derived from Overture Maps data.</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>To follow along, you check out the UDF associated with the blog post:</p><ul>
<li class=""><a href="https://www.fused.io/workbench/catalog/Invasive_Species_Hotspot-410a8f87-f3ad-4cb9-a867-c59db519d2a5" target="_blank" rel="noopener noreferrer" class="">Invasive_Species_Hotspot UDF</a></li>
</ul></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>In 2020, the problem with managing Arundo was that many agency employees considered this to be a hopeless pursuit, given the exorbitant amount of time cleaning, layering, and calculating the weighted analysis would take. Despite our vast ArcGIS library of tools, engineers, hydrologists, and GIS managers all warned me that I was going to drive myself crazy trying to get the enterprise software to successfully run my analysis. My only regret in building the tool back then was that I didn't have a tool like Fused to expedite the data pulling, processing, and calculating - as it would have saved me from the very lunacy I was warned about.</p>
<p>The obsession with the grass species, Arundo donax, began with an insight to the positive feedback loops created by increased flooding and the spread of invasive species due to climate change. Arundo donax is one of the most invasive plant species worldwide. In addition to destroying biodiversity and disrupting habitats for native species, this large grass also contributes to significant flooding patterns. As weather events become more severe and biodiversity declines, these changes create compounded consequences in our changing climate.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/liz1-38b52736378aa34d74985b2a1d29a353.png" alt="File"></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="challenges-with-hot-spot-analysis">Challenges with Hot-spot Analysis<a href="https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps#challenges-with-hot-spot-analysis" class="hash-link" aria-label="Direct link to Challenges with Hot-spot Analysis" title="Direct link to Challenges with Hot-spot Analysis" translate="no">​</a></h2>
<p>Hot-spot analysis tools using weighted sums can significantly increase accuracy in targeting key areas for prevention. To build a hot-spot analysis for Arundo donax, the following variables need to be scored according to their degree of influence: distance to nutrient loading sources (such as a golf course), distance to a riparian buffer (creek or river), distance to a water-flow disruptor (such as a bridge), and size of the stream.</p>
<p>The key pain points of running a weighted sum on traditional GIS software include:</p>
<ul>
<li class="">Slow calculations: "State-of-the-art" software like ArcGIS can take several hours to calculate weighted sums. Furthermore, running weighted sums on large datasets/geographic areas can be nearly impossible given exhaustive RAM and GPU demands, so analyses over 1000 sq miles often require a user to split analyses into different geographic regions.</li>
<li class="">Program crashes: beyond the significant wait time required for typical weighted sum calculations, users of prominent GIS software often experience output delays as a result of runtime errors and other issues spurring a program crash.</li>
<li class="">Data transformations, cleaning, and standardization: most users of traditional GIS software will find they need to start from scratch when compiling data for a hot-spot analysis or weighted sum. Sometimes, standard base layers like slope and aspect will be searchable on the local software basis. Still, often, lengthy transformations are required to make the layers compatible with the final overlay calculation.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-fused-changed-my-workflow">How Fused Changed My Workflow<a href="https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps#how-fused-changed-my-workflow" class="hash-link" aria-label="Direct link to How Fused Changed My Workflow" title="Direct link to How Fused Changed My Workflow" translate="no">​</a></h2>
<p>Using cloud-based systems like Fused can significantly increase calculation speeds, program resilience, and access to public Cloud Native datasets.</p>
<p>After encountering the Fused and learning about how I could improve the speed and geographic spread of site suitability analyses, I wanted to put it to the test by expanding on a previous analysis I did in 2021 using ArcGIS. The original 2021 analysis took several months of data collection, interviews with other local agencies, and extensive data cleaning, standardization, and transformations. I experienced all the aforementioned pain points of hot-spot analysis/weighted sum calculations and more.</p>
<p>Flash forward to today, where I am compiling global data sets, layering them, and deriving statistical insights within 1% of the time that it took me using ArcGIS. Running buffer analyses, weighting variables, and procuring data has taken a fraction of the time for GLOBAL data - and if you remember from before, the previous analysis from 2021 took months for a county-wide calculation and final product.</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/elizabeth_blog.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<br>
<p>The most satisfying aspect of my new hot-spot analysis application wasn't just the expansive end product; the process was more seamless and engaging than I had imagined.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="workflow-design">Workflow Design<a href="https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps#workflow-design" class="hash-link" aria-label="Direct link to Workflow Design" title="Direct link to Workflow Design" translate="no">​</a></h2>
<p>I created a UDF with a simple model to identify hotspots susceptible to arundo. The model uses a weighted sum of several base Overture data classes:</p>
<ul>
<li class="">Golf Courses</li>
<li class="">Bridges</li>
<li class="">Water bodies (rivers, streams, etc.)</li>
</ul>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/liz_udf-8f6a409b07d794f6bf15d8b2cb148f89.png" alt="File"></div>
<p>The UDF performs the following steps:</p>
<ol>
<li class="">Create GeoDataFrames from the Overture maps dataset using get_overture</li>
<li class="">Generate an H3 score based on buffers around each feature</li>
<li class="">Aggregate the H3 scores to create a weighted sum</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="key-takeaways">Key Takeaways<a href="https://docs-staging.fused.io/pr/1042/blog/hot-spot-analysis-for-invasive-species-using-overture-maps#key-takeaways" class="hash-link" aria-label="Direct link to Key Takeaways" title="Direct link to Key Takeaways" translate="no">​</a></h2>
<p>Given the complexity of procuring, layering, and interweaving data along with significant wait times and resource consumption, many governmental agencies, non-profits, and even private corporations struggle to run spatial analyses such as site-suitability and hot-spot tools. Insights and tools can be created by improving the speed and efficacy of operations such as weighted sums and fuzzy analysis across spatial layers with UDFs.</p>
<p>Site-suitability and hot-spot analysis go beyond species detection. By simplifying the approach to these types of tools, we can more quickly and accurately detect climate-vulnerable zones, prioritize habitat restoration, and create models to build resilient communities. Industries such as real estate development, retail, and logistics can more quickly understand the variables that affect their businesses by using cloud-based systems like Fused, which can easily manage large datasets.</p>]]></content>
        <author>
            <name>Elizabeth Rosenbloom</name>
            <uri>https://www.linkedin.com/in/elizabethrosenbloom/</uri>
        </author>
        <category label="h3" term="h3"/>
        <category label="overture" term="overture"/>
        <category label="hot-spot" term="hot-spot"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Calculating Fire Ratings with Overture Buildings and Places]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/fire-ratings</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings"/>
        <updated>2025-01-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR Chris Amico shows how to combine Overture Maps data with fire perimeters to analyze wildfire impact on buildings and businesses.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR Chris Amico shows how to combine Overture Maps data with fire perimeters to analyze wildfire impact on buildings and businesses.</strong></p>
<!-- -->
<iframe style="width:100%;max-width:800px;aspect-ratio:16/9;height:auto;margin:0 auto 2rem auto;display:block" src="https://www.youtube.com/embed/iXYZQ8z2wP4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<p>As communities continue to rebuild and recover from the devastation caused by natural disasters such as wildfires, the question remains: How can we quantify what was lost, especially in the built environment? With the ability to analyze detailed building footprints and overlay fire boundaries, we can begin to answer this by providing a rough estimate of the damage and identifying which structures were impacted by the flames.</p>
<p>In this blog post, Chris Amico shows how by leveraging data such as Overture Building footprints and fire progression maps, we can gain insight into the extent of fire risk. This enables news agencies to derive insights such as count of shops or homes exposed or even assess the capacity of highway routes for residents to evacuate before a prospect fire reaches them.</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>To follow along, you check out the UDFs and app associated with the blog post:</p><ul>
<li class=""><a href="https://www.fused.io/workbench/catalog/Fire_Proximity_GERS_Lookup-51a55f1c-f7d6-4ae8-9587-ca9e3270b551" target="_blank" rel="noopener noreferrer" class="">Fire Proximity GERS_Lookup UDF</a></li>
<li class=""><a href="https://www.fused.io/workbench/catalog/Fire_Proximity_Building_Score-e17cbc0f-1541-4271-942e-00779838b19d" target="_blank" rel="noopener noreferrer" class="">Fire Proximity Building_Score UDF</a></li>
<li class=""><a href="https://www.fused.io/workbench/catalog/Fire_Proximity_Buffer-3257f367-5115-4310-8e74-5fdda4e7f82e" target="_blank" rel="noopener noreferrer" class="">Fire Proximity Buffer UDF</a></li>
<li class=""><a href="https://docs.google.com/spreadsheets/d/1swfP35TUrTx2eI3LSh1Jbguj77G1rdio0oZ_eKnt74I/edit?usp=sharing" target="_blank" rel="noopener noreferrer" class="">Google Sheet</a> that enriches the "Fire Risk" column for any given Building GERS</li>
<li class=""><a href="https://www.fused.io/workbench/apps#app/s/i/fa_6Lqarya7D9jVQ95hTUXFmH" target="_blank" rel="noopener noreferrer" class="">App: H3 rollups within water buffer</a></li>
</ul></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h3>
<p>Fused simplifies the process of spatially joining datasets with Overture Maps data, such as integrating with fire-related datasets.</p>
<p>For this example, we use the <a href="https://data-nifc.opendata.arcgis.com/datasets/nifc::interagencyfireperimeterhistory-all-years-view/about" target="_blank" rel="noopener noreferrer" class="">Inter Agency Fire Perimeter Historical dataset</a> (published by the <a href="https://www.nifc.gov/" target="_blank" rel="noopener noreferrer" class="">National Interagency Fire Center (NIFC)</a>) which includes historical fire perimeters up to 2024. Joining fire perimeters with Overture Buildings and Places data enables us to highlight service gaps or identify regions that may require immediate response.</p>
<p>This demo will first select buildings within a buffer zone to determine which fire perimeter they fall within. Then, it will perform an H3 stats roll-up of business categories from Overture Places, counting the number and types of businesses that fall within each distance range. This will involve rolling up Overture Places business categories into H3 hexagons.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-workflow">The Workflow<a href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings#the-workflow" class="hash-link" aria-label="Direct link to The Workflow" title="Direct link to The Workflow" translate="no">​</a></h2>
<p>These UDFs return Overture Buildings and Places within a buffer distance from a fire. They offers a simple way to determine the scope of possible fire damage and quickly assess the number of businesses, homes, and other significant structures within the affected area. By adjusting the buffer or selecting fire extent based on dates, users can fine-tune their analysis to gain deeper insights into how far the fire's reach extends and what establishments were most at risk.</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/fire_buffer_h3.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-fire-proximity-buffer">a. Fire Proximity Buffer<a href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings#a-fire-proximity-buffer" class="hash-link" aria-label="Direct link to a. Fire Proximity Buffer" title="Direct link to a. Fire Proximity Buffer" translate="no">​</a></h3>
<p>First, we create a buffer around the fire perimeter to define the area of interest. This buffer helps us understand the extent of the fire's impact and provides a clear boundary for further analysis.</p>
<ul>
<li class="">In Historic Perimeter: The building/point is within a historic perimeter</li>
<li class="">Near Historic Perimeter: The building/point is within 1km of a historic perimeter</li>
<li class="">Outside Perimeter: The building/point is within 10km of a historic perimeter</li>
</ul>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/fire_buffers-4371573d48e932d90b6d3d3f8959c23a.png" alt="File"></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="b-fire-proximity-building-score">b. Fire Proximity Building Score<a href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings#b-fire-proximity-building-score" class="hash-link" aria-label="Direct link to b. Fire Proximity Building Score" title="Direct link to b. Fire Proximity Building Score" translate="no">​</a></h3>
<p>Next, we load the Overture Buildings dataset and spatially join it with the fire buffer zones. This workflow categorizes buildings based on their proximity to the fire, helping us assess which structures are most at risk.</p>
<ol>
<li class="">Load the NIFC fire perimeter data</li>
<li class="">Create buffer zones around the fire perimeters</li>
<li class="">Load Overture Buildings</li>
<li class="">Spatially join buildings within the buffer zones to categorize them by proximity to the fire</li>
</ol>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/fire_buildings-53c757bcbef9f37defee091cb2bbe68b.png" alt="File"></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="c-overture-places-rollup-by-h3">c. Overture Places Rollup by H3<a href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings#c-overture-places-rollup-by-h3" class="hash-link" aria-label="Direct link to c. Overture Places Rollup by H3" title="Direct link to c. Overture Places Rollup by H3" translate="no">​</a></h3>
<p>Finally, we perform a spatial aggregation by calculating the H3 index for the centroids of Overture Places within the fire buffer. This allows us to roll up business categories into H3 hexagons, enabling a holistic overview of business distribution in relation to the fire perimeter.</p>
<ol>
<li class="">Load the NIFC fire perimeter data</li>
<li class="">Load Overture Places</li>
<li class="">Determine the H3 for the centroid of each building</li>
<li class="">Normalize the 'categories' column into individual columns</li>
<li class="">Roll-up categories by H3, create categories primary set</li>
</ol>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/fire_h3_broad-5c957e77933653ab577a39ec223d8e06.png" alt="File"></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion-and-next-steps">Conclusion and Next Steps<a href="https://docs-staging.fused.io/pr/1042/blog/fire-ratings#conclusion-and-next-steps" class="hash-link" aria-label="Direct link to Conclusion and Next Steps" title="Direct link to Conclusion and Next Steps" translate="no">​</a></h2>
<p>This kind of analysis helps understand not only the immediate impact but also in planning for future fire preparedness and recovery efforts. In this post, we saw how Overture and Fire-extent data can help us estimate the extent of the damage, from individual buildings to entire neighborhoods.</p>
<p>Organizations looking to integrate these types of perspectives into their workflows could create apps or API services that deliver derivative products, such as GERS lookups to categorize "fire risk" based on buffer proximity.</p>
<p>They could also use Fused <a class="" href="https://docs-staging.fused.io/pr/1042/guide/data-input-outputs/export-api/tokens-endpoints">HTTPS endpoints</a> from the UDF to return a CSV with the GERS and "Fire Risk" score for buildings within a defined bounding box, as specified by a query parameter. Additionally, they could also use the HTTPS endpoints to automatically enrich the "Fire Risk" column of an arbitrary dataset for any given Building GERS. Users could apply it to any row of their table, with the functionality powered by a "GERS lookup" endpoint using a GERS ID query parameter.</p>]]></content>
        <author>
            <name>Chris Amico</name>
            <uri>https://www.linkedin.com/in/chrisamico/</uri>
        </author>
        <author>
            <name>Plinio Guzman</name>
            <uri>https://www.linkedin.com/in/plinioguzman/</uri>
        </author>
        <category label="h3" term="h3"/>
        <category label="places" term="places"/>
        <category label="buffer" term="buffer"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Characterize cities with embeddings of Overture Place categories]]></title>
        <id>https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories</id>
        <link href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories"/>
        <updated>2025-01-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[TL;DR Maribel Hernandez shows how to create clusters of business categories using Overture Places data.]]></summary>
        <content type="html"><![CDATA[<p><strong>TL;DR Maribel Hernandez shows how to create clusters of business categories using Overture Places data.</strong></p>
<!-- -->
<div style="height:360px;width:100%" class="video__player"></div>
<br>
<p>Maribel Hernandez is a computer scientist and researcher at <a href="https://www.cinvestav.mx/" target="_blank" rel="noopener noreferrer" class="">CINVESTAV</a>, a multidisciplinary academic institution in Mexico. She specializes in graph theory in the field of computational genomics and complex networks. In this blog post, Maribel shows how she characterizes cities based on the distribution of businesses by rolling-up business categories by H3.</p>
<p>As someone who works with urban networks, Maribel's focus is on exploring how cities function and how their design impacts inclusivity. The core question driving this analysis is: Does the city have an even distribution of business services? Or are there shortages such as food deserts or unequal access to health facilities?</p>
<!-- -->
<div class="theme-admonition theme-admonition-info admonition_xJq3 alert alert--info"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_BuS1"><p>To follow along, you can clone and run the associated:</p><ul>
<li class=""><a href="https://colab.research.google.com/drive/11Q5iONwvEb9cg7ukGptBsQCV4yAM0r_b?authuser=1#scrollTo=FT478_wRzltw" target="_blank" rel="noopener noreferrer" class="">Colab Notebook</a></li>
<li class=""><a href="https://www.fused.io/workbench/catalog/Overture_Places_Embedding_Clusters-3d326d5a-87de-491a-92e4-cf2cdd4c93bb" target="_blank" rel="noopener noreferrer" class="">Overture Places Embedding Clusters UDF</a></li>
</ul></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="introduction">Introduction<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#introduction" class="hash-link" aria-label="Direct link to Introduction" title="Direct link to Introduction" translate="no">​</a></h2>
<p>Consider these scenarios:</p>
<ul>
<li class="">How connected are areas dominated by upper-class establishments to the broader city fabric?</li>
<li class="">Are health services distributed with equal access from low-income neighborhoods?</li>
<li class="">Do certain metropolis have better accessibility and service availability compared to others?</li>
</ul>
<p>Take, for example, a comparison between 3 key cities in Mexico: Mexico City, León, and Mérida. Are neighborhoods in these cities equally served by essential services such as healthcare, food, and transportation? Could some areas be considered food deserts, while others enjoy easy access to all services?</p>
<div class="video__wrapper"><video src="https://fused-magic.s3.us-west-2.amazonaws.com/blog-assets/maribel_embeddings.mp4" preload="metadata" controls="" muted="" playsinline="" style="width:100%;height:100%;display:block"></video></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="creating-embeddings-of-overture-places">Creating Embeddings of Overture Places<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#creating-embeddings-of-overture-places" class="hash-link" aria-label="Direct link to Creating Embeddings of Overture Places" title="Direct link to Creating Embeddings of Overture Places" translate="no">​</a></h2>
<p>To answer these questions, I use a method that can scale across cities and ensure consistency. By grouping business categories in Overture Places at the H3 grid level, we can analyze the distribution of services and their accessibility. This approach provides a quantifiable way to compare cities globally, shedding light on the urban inclusivity of different regions.
Workflow</p>
<p>The UDF I created follows this workflow:</p>
<ol>
<li class="">Load Overture Places records for a given H3</li>
<li class="">Create business category column</li>
<li class="">Create an embedding to represent business categories</li>
<li class="">Run UDF for all H3 spanning an area of interest (polyfill)</li>
<li class="">Calculate Kmeans clustering based on cosine similarity.</li>
<li class="">Describe each cluster</li>
</ol>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/workbench-40031a539a5c176695745e3530d89800.png" alt="File"></div>
<p><em>Preview of UDF on Workbench.</em></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="descriptive-analysis">Descriptive analysis<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#descriptive-analysis" class="hash-link" aria-label="Direct link to Descriptive analysis" title="Direct link to Descriptive analysis" translate="no">​</a></h2>
<p>When analyzing the urban fabric of cities like Mexico City, Leon, and Merida, we can obsere distinct patterns of service distribution that manifest as rings around the city center.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/cdmx-293897fc4011d9a7f01e9ab55bbe5507.png" alt="File"></div>
<p><em>Mexico City.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-the-heart-of-the-city">a. The heart of the city<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#a-the-heart-of-the-city" class="hash-link" aria-label="Direct link to a. The heart of the city" title="Direct link to a. The heart of the city" translate="no">​</a></h3>
<p>Especially in Leon and Merida, the central area tends to form a cohesive, dense cluster of services. The core zone houses a variety of businesses including health services, retail, and food outlets, which are generally well-connected and easily accessible. Intuitively, the central cluster can be thought of as the "heart" of the city, serving as the primary hub for commerce, social interaction, and access to essential services.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/leon-af4912bb6121a29388ba4b452c13b69f.png" alt="File"></div>
<p><em>Leon.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="b-islands-of-services">b. Islands of Services<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#b-islands-of-services" class="hash-link" aria-label="Direct link to b. Islands of Services" title="Direct link to b. Islands of Services" translate="no">​</a></h3>
<p>Beyond the center, we notice smaller clusters of services scattered across the city, often in the form of "islands." These islands represent pockets of neighborhoods that, while not part of the dense city center, offer an array of unique services. These can serve to highlight the phenomenon of emergent neighborhoods within a greater whole.</p>
<!-- -->
<div style="text-align:center"><img src="https://docs-staging.fused.io/pr/1042/assets/images/merida-fbae513ad83c1752a1510de02ba95f4f.png" alt="File"></div>
<p><em>Merida.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="c-peripheral-ring">c. Peripheral ring<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#c-peripheral-ring" class="hash-link" aria-label="Direct link to c. Peripheral ring" title="Direct link to c. Peripheral ring" translate="no">​</a></h3>
<p>The periphery of these cities forms another distinct pattern. These outer regions also tend to cluster together in similar service categories, forming a ring that surrounds the central core. It's possible services in these peripheral areas are often more limited in scope and may reflect a focus on residential and less commercial needs, or reflect lower-income neighborhoods with scarcer access to key services.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="conclusion">Conclusion<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#conclusion" class="hash-link" aria-label="Direct link to Conclusion" title="Direct link to Conclusion" translate="no">​</a></h2>
<p>This ring-like pattern of service distribution suggests a common trend where the core of the city is highly accessible, while the periphery often lacks the same diversity and depth of business services. The islands of services in between can be seen as attempts to bridge this gap, but they are not always as effective in meeting the needs of the population on the periphery.</p>
<p>These spatial patterns offer valuable insights into the inclusivity of urban networks, highlighting areas that may need attention to ensure strategic business placement and guarantee equitable access to essential services.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="future-work">Future work<a href="https://docs-staging.fused.io/pr/1042/blog/characterize-cities-with-embeddings-of-overture-place-categories#future-work" class="hash-link" aria-label="Direct link to Future work" title="Direct link to Future work" translate="no">​</a></h2>
<ul>
<li class="">Create Network: Create a bipartite network between place categories and H3 indices, using weights as counts for each category.</li>
<li class="">Tie in Demographic Data: Integrate INEGI sociodemographic data at the census block group level to understand how services align with population needs.</li>
<li class="">Access by Neighborhood: Use origin-destination (OD) movement networks to evaluate service accessibility by neighborhood of residence.</li>
<li class="">Segregation Analysis: Identify zones with low visit rates or difficult accessibility. These zones may represent areas of segregation or neglect in the urban network.</li>
</ul>]]></content>
        <author>
            <name>Maribel Hernandez</name>
            <uri>https://www.linkedin.com/in/maribel-hern%C3%A1ndez-758b24134/</uri>
        </author>
        <category label="overture" term="overture"/>
        <category label="places" term="places"/>
        <category label="embeddings" term="embeddings"/>
        <category label="clustering" term="clustering"/>
    </entry>
</feed>