[object Object]

← back to Rentv 2026

News map: add Street/Satellite base-layer toggle (Esri World Imagery, $0 no key)

eacf3831633943ba1ba42aac41b4756f93c09e60 · 2026-08-06 09:14:29 -0700 · Steve Abrams

Satellite view lets you see the actual properties/areas behind each story. Free Esri
World Imagery tiles — no Google Maps, no API key, no billing.

TK-10284

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit eacf3831633943ba1ba42aac41b4756f93c09e60
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Aug 6 09:14:29 2026 -0700

    News map: add Street/Satellite base-layer toggle (Esri World Imagery, $0 no key)
    
    Satellite view lets you see the actual properties/areas behind each story. Free Esri
    World Imagery tiles — no Google Maps, no API key, no billing.
    
    TK-10284
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 public/map.html | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/public/map.html b/public/map.html
index 2956a25e..8987de74 100644
--- a/public/map.html
+++ b/public/map.html
@@ -98,9 +98,14 @@ var CUTOFF=(function(){var d=new Date();d.setMonth(d.getMonth()-3);return d;})()
 function isFresh(a){ return a.date && new Date(a.date+'T00:00:00') >= CUTOFF; }
 
 var map=L.map('map',{zoomControl:true,worldCopyJump:true}).setView([37.5,-119],5); // Western US default
-L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
+// Two free base layers (no API key): OSM streets + Esri World Imagery satellite.
+var streets=L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
   maxZoom:18, attribution:'© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
 }).addTo(map);
+var satellite=L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',{
+  maxZoom:19, attribution:'Imagery © <a href="https://www.esri.com/">Esri</a>, Maxar, Earthstar Geographics'
+});
+L.control.layers({'Streets':streets,'Satellite':satellite},null,{position:'topright',collapsed:false}).addTo(map);
 
 // Cluster group whose badge turns GREEN if it holds any fresh story, else RED.
 var cluster=L.markerClusterGroup({

← 83953f44 fix(deals): parseOccupancy counts 'N% pre-leased' (new-dev p  ·  back to Rentv 2026  ·  PR intel: tenant-scope core entity reads + 2nd-tenant safety f0ce5eb3 →