Sites
Planted sites followed every month from free Sentinel-2 images (10 m)No site matches this city and growth.
Loading the monthly records…
Greenness, month by month
The last twelve months, as the satellite saw them
Months that needed attention
Every month the rules flagged, with the reason. A single watch is a nudge to look at the pictures; a declining month is a call to check the site.
| Month | Status | Reason | Images |
|---|
Tree count, when a sharp picture exists
The tree detector counts single trees in 0.2 m Google Earth pictures of the same plot. Those pictures come every year or two, not monthly, so the count supports the monthly line rather than replacing it. Counts are the model's, not hand-checked.
Scan a picture for trees
Drop any sharp aerial or satellite picture (about 0.15–0.6 m per pixel: a Google Earth screenshot, a drone photo looking straight down, an export from Google Earth Pro). The tree detector runs inside this page and draws a box around every tree crown it finds; nothing is uploaded anywhere.
Pixel size: a Google Earth screenshot at eye altitude about 300 m is roughly 0.15 m per pixel; a Google Earth Pro export at range 700 m in 3840 × 2160 is 0.20 m; drone photos are usually 0.02–0.05 m and should be shrunk first. Guessing within a factor of two still works.
Satellite view: scan any place for trees
Pan and zoom to a place, then press Scan this view. The page takes the imagery on screen, works out its pixel size from the zoom level, runs the detector and draws the trees it finds on the map. The imagery is Esri World Imagery (free to use with its credit line; sharp enough for single trees in most of Saudi Arabia at the closest zoom levels).
The map needs the page served from the repository
This hosted preview cannot load map tiles from other websites. From the Namat repository, python monitor/serve.py (or the public site, once it is on) shows the live satellite map here, with the scan button. Meanwhile the links below open the same places in Google Earth and Google Maps, and a screenshot of either can be scanned on the Scan a picture tab.
Google's view is for looking and comparing only: Google does not let a web page read its imagery, so the scan runs on the free imagery above. To scan a Google picture, take a screenshot and drop it on the Scan a picture tab.
How a month gets its status
Each month, every Sentinel-2 image over the plot is measured. Images with cloud or cloud shadow over more than a tenth of the plot are dropped, and so are dust-hazy ones (aerosol thickness above 0.5) when a clearer image exists. The plot's greenness for the month is the median NDVI of the images that remain, so one odd day does not swing it.
The same images are measured over the bare ground around the plot: the pixels outside it that stayed bare in nine months out of ten across the whole record. Nothing was planted there, so that line should not move; when it does, the cause is weather, dust, sun angle or the sensor. The rules therefore work on the difference, plot minus bare ground: the greenness the plot has because of what grows on it.
A planted plot in the desert still has a small seasonal rhythm (annual plants after winter rain, cooler months). Each month's change is compared with the change over the same months a year earlier, so a dip that happens every spring is not an alert, while a dip that did not happen last year is.
One status per site
The rule above gives every month its own result, and those are what the chart's dots, the pictures and the list of flagged months show. A site's status joins that with its whole record, so it answers both "is anything happening now?" and "how does the plot stand against its past?" in one word and one sentence. If the latest month was a drop (declining or watch), that is the status: something is happening now. Otherwise the record decides, from 12-month means, which are far steadier than single months: declining when the last year sits 30% or more below the plot's best year (a grove that lost half its trees in 2019 and has not recovered is still a declining site), growing when the last year is well above the first and near the best, stable otherwise. The sentence under the status says both parts, for example "has lost 49% of its plant cover since its best year (2017), and held steady in October 2026".
Why monthly
A young planted tree cut off from water dies fast in this climate. Once its leaves close their pores, the water left in a small tree lasts about 4 to 14 days at mild air dryness, and summer air in central Saudi Arabia is several times drier than that (Blackman et al. 2019). At one Saudi Green Initiative site, 23% of planting pits were already empty one to four months after planting (Morgan et al. 2026); acacia seedlings watered weekly instead of daily lost a quarter of their number in full sun (Abbas et al. 2019). A plot whose irrigation stops therefore turns brown within weeks, which the next monthly check catches as a sharp drop. Established trees fail the other way, slowly over months, with growth reduced for one to four years after a severe drought (Anderegg et al. 2015): that is what the slow-decline rule watches for. Growth itself is a months-to-years signal, so monthly points show it while weekly ones would mostly show noise.
What the numbers can and cannot say
A Sentinel-2 pixel is 10 × 10 m, larger than any young tree, so the line measures the plot's plant cover as a whole, not single trees. It tells you that the plot is greening or browning and when that started; it cannot say which trees. For that the plot needs a sharp picture (0.2–0.6 m), which the detector counts when one exists. Irrigated plantings in the desert keep their green through the year, so the seasonal swing is small; the rules still compare each month with the same month a year earlier, in case it is not.
Sources
- Sentinel-2 Level-2A surface reflectance, European Space Agency, through the Microsoft Planetary Computer (free, no account).
- Blackman, C. J. et al. (2019). Desiccation time during drought is highly predictable across species of Eucalyptus from contrasting climates. New Phytologist 224, 632–643.
- Morgan, B. et al. (2026). Drone-based survey of seedling survival at a Saudi Green Initiative planting site. Results in Engineering.
- Abbas, A. M. et al. (2019). Effects of irrigation and shading on seedling survival of Acacia species in Saudi Arabia. South African Journal of Botany.
- Anderegg, W. R. L. et al. (2015). Pervasive drought legacies in forest ecosystems and their implications for carbon cycle models. Science 349, 528–532.
Running it every month
One script does the month's work for every site: it finds the new Sentinel-2 images, measures them, applies the rules and rewrites the records and pictures this page reads. Months already measured are kept, so a monthly run takes a few minutes.
python3 -m pip install -r monitor/requirements.txt # once python3 monitor/monitor.py # every site, new months only python3 monitor/monitor.py alahsa # one site python3 monitor/serve.py # then open http://localhost:8000
Adding a site
Add it to monitor/sites.json: a name, the centre point, the plot's width and height in metres, the planting date and the month to start from. The next run fills in its record from that month to today.
Letting it run by itself
The repository carries a GitHub Actions workflow that runs the script on the first day of each month and commits the updated records, so the page stays current without anyone remembering to run it. GitHub Actions and the imagery are free.
Files
monitor/ sites.json the sites monitor.py the monthly loop tree_counts.py the detector's counts, for the supporting panel data/.json every month: greenness, bare-ground reference, images used, status and reason images/ / one true-colour picture and one greenness map per month (1.5 km view, plot outlined) cache/ / per-image measurements, so nothing is downloaded twice index.html, serve.py this page