Analysis of OpenStreetMap changesets that use imagery services from the imagery_used column. The imagery tag is set automatically by iD, Vespucci and Go Map!!. As other editors are not using it and iD is vastly more popular than other relevant editors this graph is very close to 'market share of iD by edit volume'. JOSM users are typically using source field to note actually used sources.
df = duckdb.sql("""
WITH monthly_with_imagery AS (
SELECT
year,
month,
CONCAT(year, '-', LPAD(CAST(month as VARCHAR), 2, '0')) as months,
COUNT(DISTINCT user_name) as contributors_with_imagery,
SUM(edit_count) as edits_with_imagery
FROM '../changeset_data/year=*/month=*/*.parquet'
WHERE imagery_used IS NOT NULL
GROUP BY year, month
),
monthly_total AS (
SELECT
year,
month,
CONCAT(year, '-', LPAD(CAST(month as VARCHAR), 2, '0')) as months,
COUNT(DISTINCT user_name) as total_contributors,
SUM(edit_count) as total_edits
FROM '../changeset_data/year=*/month=*/*.parquet'
GROUP BY year, month
)
SELECT
mt.months,
COALESCE(ROUND((mwi.contributors_with_imagery * 100.0) / mt.total_contributors, 2), 0) as 'Percentage Contributors with Imagery',
COALESCE(ROUND((mwi.edits_with_imagery * 100.0) / mt.total_edits, 2), 0) as 'Percentage Edits with Imagery'
FROM monthly_total mt
LEFT JOIN monthly_with_imagery mwi ON mt.year = mwi.year AND mt.month = mwi.month
ORDER BY mt.year, mt.month
""").df()
util.show_figure(
[
util.FigureConfig(
title="Monthly Percentage of Contributors Using Imagery Services",
label="Contributors",
x_col="months",
y_col="Percentage Contributors with Imagery",
y_unit_hover_template="%",
query_or_df=df,
),
util.FigureConfig(
title="Monthly Percentage of Edits Using Imagery Services",
label="Edits",
x_col="months",
y_col="Percentage Edits with Imagery",
y_unit_hover_template="%",
query_or_df=df,
),
]
)
# Get top 10 imagery services by total edits
df = duckdb.sql("""
WITH imagery_expanded AS (
SELECT
year,
month,
user_name,
edit_count,
unnest(imagery_used) as imagery_service
FROM '../changeset_data/year=*/month=*/*.parquet'
WHERE imagery_used IS NOT NULL
),
top_imagery AS (
SELECT imagery_service
FROM (
SELECT
imagery_service,
SUM(edit_count) as total_edits
FROM imagery_expanded
GROUP BY imagery_service
ORDER BY total_edits DESC
LIMIT 10
)
),
monthly_imagery_data AS (
SELECT
ie.year,
ie.month,
CONCAT(ie.year, '-', LPAD(CAST(ie.month as VARCHAR), 2, '0')) as months,
ie.imagery_service,
COUNT(DISTINCT ie.user_name) as "Contributors",
SUM(ie.edit_count) as "Edits"
FROM imagery_expanded ie
WHERE ie.imagery_service IN (SELECT imagery_service FROM top_imagery)
GROUP BY ie.year, ie.month, ie.imagery_service
)
SELECT
months,
imagery_service,
"Contributors",
"Edits",
SUM("Contributors") OVER (PARTITION BY imagery_service ORDER BY year, month) as "Contributors Accumulated",
SUM("Edits") OVER (PARTITION BY imagery_service ORDER BY year, month) as "Edits Accumulated"
FROM monthly_imagery_data
ORDER BY year, month, imagery_service
""").df()
util.show_figure(
[
util.FigureConfig(
title="Monthly Edits by Top 10 Imagery Services",
label="Edits",
x_col="months",
y_col="Edits",
group_col="imagery_service",
query_or_df=df,
),
util.FigureConfig(
title="Accumulated Edits by Top 10 Imagery Services",
label="Edits Accumulated",
x_col="months",
y_col="Edits Accumulated",
group_col="imagery_service",
query_or_df=df,
),
util.FigureConfig(
title="Monthly Contributors by Top 10 Imagery Services",
label="Contributors",
x_col="months",
y_col="Contributors",
group_col="imagery_service",
query_or_df=df,
),
util.FigureConfig(
title="Accumulated Contributors by Top 10 Imagery Services",
label="Contributors Accumulated",
x_col="months",
y_col="Contributors Accumulated",
group_col="imagery_service",
query_or_df=df,
),
]
)
import json
# Load replacement rules for clickable links
with open("../config/replace_rules_imagery_and_source.json") as f:
imagery_name_to_html_link = {
name: f'<a href="{item["link"]}">{name}</a>' for name, item in json.load(f).items() if "link" in item
}
query = """
WITH imagery_expanded AS (
SELECT
year,
user_name,
edit_count,
unnest(imagery_used) as imagery_service
FROM '../changeset_data/year=*/month=*/*.parquet'
WHERE imagery_used IS NOT NULL
),
user_first_year AS (
SELECT
user_name,
imagery_service,
MIN(year) as first_year
FROM imagery_expanded
GROUP BY user_name, imagery_service
),
imagery_totals AS (
SELECT
imagery_service as "Imagery Service",
CAST(SUM(edit_count) as BIGINT) as total_edits_all_time,
CAST(SUM(CASE WHEN year >= 2021 THEN edit_count ELSE 0 END) as BIGINT) as total_edits_2021_now,
CAST(COUNT(DISTINCT user_name) as BIGINT) as total_contributors_all_time,
CAST(COUNT(DISTINCT CASE WHEN year >= 2021 THEN user_name END) as BIGINT) as total_contributors_2021_now
FROM imagery_expanded
GROUP BY imagery_service
),
yearly_metrics AS (
SELECT
ie.year,
ie.imagery_service as "Imagery Service",
CAST(SUM(ie.edit_count) as BIGINT) as "Edits",
CAST(COUNT(DISTINCT ie.user_name) as BIGINT) as "Contributors",
CAST(COUNT(DISTINCT CASE WHEN ufy.first_year = ie.year THEN ie.user_name END) as BIGINT) as "New Contributors"
FROM imagery_expanded ie
LEFT JOIN user_first_year ufy
ON ie.user_name = ufy.user_name AND ie.imagery_service = ufy.imagery_service
GROUP BY ie.year, ie.imagery_service
)
SELECT
ym.year,
ym."Imagery Service",
ym."Edits",
ym."New Contributors",
ym."Contributors",
it.total_edits_all_time as "Total Edits",
it.total_edits_2021_now as "Total Edits (2021 - Now)",
it.total_contributors_all_time as "Total Contributors",
it.total_contributors_2021_now as "Total Contributors (2021 - Now)"
FROM yearly_metrics ym
JOIN imagery_totals it
ON ym."Imagery Service" = it."Imagery Service"
ORDER BY year DESC, "Edits" DESC
"""
df = duckdb.sql(query).df()
# Apply HTML links to imagery service names
df["Imagery Service"] = df["Imagery Service"].apply(
lambda name: imagery_name_to_html_link[name] if name in imagery_name_to_html_link else name
)
top_100_contributors = df.groupby("Imagery Service")["Total Contributors"].first().nlargest(100)
top_100_contributors_2021_now = df.groupby("Imagery Service")["Total Contributors (2021 - Now)"].first().nlargest(100)
top_100_edits = df.groupby("Imagery Service")["Total Edits"].first().nlargest(100)
top_100_edits_2021_now = df.groupby("Imagery Service")["Total Edits (2021 - Now)"].first().nlargest(100)
table_configs = [
util.TableConfig(
title="Top 100 Imagery Services by Contributors",
query_or_df=df[df["Imagery Service"].isin(top_100_contributors.index)],
x_axis_col="year",
y_axis_col="Imagery Service",
value_col="Contributors",
center_columns=["Rank", "Imagery Service"],
sum_col="Total Contributors",
),
util.TableConfig(
title="Top 100 Imagery Services by Contributors 2021 - Now",
query_or_df=df[(df["Imagery Service"].isin(top_100_contributors_2021_now.index)) & (df["year"] >= 2021)],
x_axis_col="year",
y_axis_col="Imagery Service",
value_col="Contributors",
center_columns=["Rank", "Imagery Service"],
sum_col="Total Contributors (2021 - Now)",
),
util.TableConfig(
title="Top 100 Imagery Services by Edits",
query_or_df=df[df["Imagery Service"].isin(top_100_edits.index)],
x_axis_col="year",
y_axis_col="Imagery Service",
value_col="Edits",
center_columns=["Rank", "Imagery Service"],
sum_col="Total Edits",
),
util.TableConfig(
title="Top 100 Imagery Services by Edits 2021 - Now",
query_or_df=df[(df["Imagery Service"].isin(top_100_edits_2021_now.index)) & (df["year"] >= 2021)],
x_axis_col="year",
y_axis_col="Imagery Service",
value_col="Edits",
center_columns=["Rank", "Imagery Service"],
sum_col="Total Edits (2021 - Now)",
),
]
util.show_tables(table_configs)
| Rank | Imagery Service | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 | Total Contributors |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Bing Aerial Imagery | 55,606 | 123,437 | 130,064 | 134,295 | 166,720 | 174,812 | 155,602 | 169,325 | 151,032 | 126,243 | 148,789 | 153,769 | 149,334 | 62,169 | 1,357,177 |
| 2 | .gpx data file | 835 | 4,243 | 7,927 | 28,777 | 45,339 | 50,670 | 47,816 | 76,173 | 82,985 | 52,319 | 45,790 | 11,851 | 10,275 | 4,560 | 369,030 |
| 3 | Esri World Imagery | 0 | 0 | 0 | 1 | 4,439 | 14,942 | 19,510 | 25,003 | 23,783 | 21,113 | 34,686 | 34,227 | 35,613 | 14,858 | 152,985 |
| 4 | Maxar Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 17,936 | 35,634 | 53,021 | 48,224 | 30,163 | 221 | 11 | 4 | 150,596 |
| 5 | Custom | 345 | 1,807 | 4,729 | 9,193 | 19,536 | 12,985 | 14,523 | 37,108 | 30,860 | 4,339 | 2,912 | 3,622 | 3,433 | 1,282 | 129,081 |
| 6 | OpenStreetMap (Standard) | 0 | 0 | 0 | 1,444 | 10,559 | 12,257 | 12,768 | 11,741 | 13,993 | 13,432 | 14,584 | 14,558 | 14,863 | 6,020 | 89,460 |
| 7 | Mapbox Satellite | 0 | 4,168 | 6,217 | 9,999 | 9,165 | 7,459 | 8,491 | 10,857 | 14,309 | 11,113 | 17,925 | 11,016 | 11,441 | 7,785 | 88,277 |
| 8 | .geojson data file | 0 | 0 | 0 | 0 | 9 | 87 | 165 | 572 | 334 | 320 | 9,326 | 36,367 | 25,656 | 8,033 | 72,152 |
| 9 | BDOrtho | 0 | 0 | 0 | 0 | 0 | 9,870 | 12,262 | 14,168 | 13,363 | 12,923 | 13,228 | 13,109 | 9,080 | 25 | 60,856 |
| 10 | DigitalGlobe Imagery (now Maxar) | 0 | 0 | 0 | 1 | 14,193 | 19,685 | 12,718 | 14 | 3 | 3 | 0 | 0 | 0 | 0 | 38,697 |
| 11 | GPS | 912 | 4,325 | 4,547 | 4,323 | 5,420 | 5,156 | 5,271 | 5,187 | 4,391 | 3,644 | 3,619 | 3,550 | 3,766 | 1,561 | 37,547 |
| 12 | Geoportal 2: Orthophotomap | 0 | 0 | 0 | 0 | 1 | 3,265 | 4,817 | 5,052 | 3,270 | 5,698 | 5,749 | 6,105 | 6,554 | 3,350 | 26,214 |
| 13 | None | 308 | 1,684 | 1,811 | 1,735 | 1,538 | 1,867 | 2,690 | 2,641 | 2,892 | 3,793 | 2,522 | 3,203 | 3,364 | 1,231 | 24,851 |
| 14 | PNOA Spain | 0 | 0 | 0 | 256 | 4,186 | 4,283 | 4,613 | 3,489 | 4,190 | 4,560 | 3,751 | 3,582 | 3,719 | 1,693 | 24,645 |
| 15 | MAPNIK | 1,117 | 4,851 | 6,283 | 8,281 | 255 | 115 | 48 | 4,155 | 40 | 9 | 11 | 3 | 0 | 0 | 23,041 |
| 16 | Mapillary | 0 | 0 | 0 | 1,551 | 3,253 | 3,297 | 3,083 | 3,431 | 3,380 | 2,724 | 2,720 | 2,623 | 3,066 | 1,505 | 20,755 |
| 17 | basemap.at | 13 | 171 | 391 | 2,708 | 2,983 | 3,191 | 3,101 | 3,351 | 3,418 | 3,495 | 3,511 | 3,631 | 3,857 | 1,701 | 20,219 |
| 18 | Bavaria (80 cm) | 0 | 0 | 0 | 43 | 259 | 3,656 | 4,059 | 4,602 | 4,769 | 4,663 | 4,705 | 3,715 | 17 | 1 | 18,627 |
| 19 | PDOK aerial imagery | 0 | 0 | 0 | 0 | 0 | 2,229 | 3,354 | 2,854 | 3,193 | 3,199 | 3,035 | 3,287 | 3,798 | 1,831 | 16,858 |
| 20 | OpenTopoMap | 0 | 0 | 0 | 0 | 1 | 182 | 2,358 | 3,290 | 2,971 | 2,099 | 2,591 | 2,694 | 2,737 | 1,257 | 15,125 |
| 21 | BD Ortho IGN | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8,481 | 6,703 | 12,476 |
| 22 | Geoportal.gov.pl (Orthophotomap) | 0 | 262 | 1,095 | 4,496 | 4,887 | 3,227 | 139 | 15 | 0 | 1 | 1 | 1 | 0 | 0 | 10,733 |
| 23 | NRW Orthophoto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,176 | 4,453 | 4,371 | 3,141 | 514 | 25 | 1 | 9,390 |
| 24 | swisstopo SWISSIMAGE | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,315 | 2,456 | 2,616 | 2,714 | 3,150 | 1,361 | 8,796 |
| 25 | Saxony latest aerial imagery | 0 | 0 | 0 | 0 | 0 | 1,299 | 1,506 | 1,309 | 1,657 | 1,609 | 1,763 | 1,813 | 1,887 | 849 | 7,756 |
| 26 | OpenStreetCam Images | 0 | 0 | 0 | 0 | 363 | 2,240 | 2,124 | 2,248 | 2,200 | 410 | 12 | 1 | 2 | 0 | 7,142 |
| 27 | Hesse DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,115 | 2,262 | 2,411 | 2,566 | 1,124 | 6,874 |
| 28 | NRW Orthophoto (RGB) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,125 | 4,757 | 1,924 | 6,727 |
| 29 | MML Orthophoto | 0 | 0 | 0 | 0 | 0 | 961 | 1,104 | 960 | 1,359 | 1,225 | 1,312 | 1,537 | 1,454 | 700 | 6,339 |
| 30 | Norway Orthophoto | 0 | 0 | 0 | 0 | 0 | 780 | 1,167 | 1,016 | 1,166 | 1,218 | 1,211 | 1,277 | 1,490 | 639 | 6,260 |
| 31 | South Africa CD:NGI Aerial | 17 | 36 | 99 | 705 | 889 | 735 | 681 | 796 | 661 | 477 | 666 | 833 | 720 | 447 | 6,108 |
| 32 | Japan GSI | 0 | 0 | 27 | 709 | 513 | 850 | 1,162 | 589 | 817 | 754 | 864 | 965 | 885 | 370 | 5,563 |
| 33 | OpenRailwayMap | 0 | 0 | 0 | 0 | 0 | 6 | 17 | 798 | 1,101 | 851 | 852 | 936 | 1,007 | 361 | 5,358 |
| 34 | SPW(allonie) most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 725 | 969 | 945 | 1,133 | 1,097 | 1,201 | 1,131 | 1,171 | 636 | 5,327 |
| 35 | AIV Flanders | 0 | 0 | 0 | 0 | 0 | 0 | 1,148 | 1,664 | 1,909 | 1,859 | 1,204 | 6 | 0 | 0 | 5,226 |
| 36 | CyclOSM | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 20 | 515 | 2,746 | 1,795 | 58 | 30 | 11 | 4,688 |
| 37 | LINZ NZ Aerial Imagery | 0 | 0 | 0 | 0 | 324 | 693 | 665 | 603 | 796 | 697 | 836 | 825 | 941 | 487 | 4,408 |
| 38 | Cadastre | 0 | 0 | 0 | 0 | 0 | 821 | 1,043 | 1,175 | 1,087 | 994 | 1,000 | 978 | 992 | 458 | 4,389 |
| 39 | SDFE aerial imagery | 0 | 0 | 0 | 0 | 574 | 1,052 | 937 | 753 | 1,154 | 1,119 | 758 | 10 | 0 | 0 | 4,343 |
| 40 | Orthophotos of mainland Portugal - 25cm - 2018 (DGT) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 668 | 1,466 | 1,514 | 1,822 | 282 | 3 | 4,277 |
| 41 | NC OneMap Latest Orthoimagery (Natural Color) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 802 | 1,247 | 1,148 | 1,524 | 870 | 4,138 |
| 42 | KartaView Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 1,195 | 1,370 | 1,317 | 1,489 | 663 | 4,116 |
| 43 | Stamen Terrain | 0 | 0 | 0 | 120 | 556 | 749 | 661 | 565 | 696 | 629 | 380 | 44 | 26 | 3 | 4,107 |
| 44 | Czechia CUZK orthophoto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,909 | 2,337 | 1,065 | 3,930 |
| 45 | PDOK Luchtfoto Beeldmateriaal 25cm | 0 | 0 | 0 | 0 | 2,632 | 1,901 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3,924 |
| 46 | Digitaal Vlaanderen most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 974 | 1,673 | 1,935 | 895 | 3,811 |
| 47 | Geoportal 2 Nazwy ulic | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3,484 | 144 | 131 | 136 | 142 | 88 | 3,686 |
| 48 | Ortofotomozaika SR | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 50 | 565 | 957 | 1,203 | 1,097 | 1,186 | 556 | 3,562 |
| 49 | NRW Liegenschaftskataster | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,179 | 1,858 | 257 | 169 | 3,536 |
| 50 | Belgium AGIV Orthophoto Flanders | 0 | 0 | 107 | 1,493 | 1,722 | 1,037 | 3 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 3,433 |
| 51 | Baden-Württemberg DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,954 | 1,998 | 3,228 |
| 52 | LPI NSW Imagery | 0 | 0 | 5 | 202 | 1,005 | 1,120 | 996 | 757 | 4 | 2 | 0 | 0 | 0 | 0 | 3,216 |
| 53 | MD Latest 6 Inch Aerial Imagery | 0 | 0 | 0 | 0 | 25 | 38 | 63 | 54 | 311 | 932 | 828 | 783 | 893 | 409 | 3,139 |
| 54 | National Agriculture Imagery Program | 0 | 0 | 0 | 0 | 0 | 0 | 240 | 644 | 670 | 507 | 654 | 791 | 718 | 203 | 2,943 |
| 55 | Thunderforest Landscape | 0 | 0 | 0 | 1,132 | 1,323 | 683 | 18 | 12 | 3 | 1 | 2 | 2 | 2 | 1 | 2,910 |
| 56 | OpenAerialMap Mosaic, by Kontur.io | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 127 | 1,017 | 862 | 922 | 314 | 2,889 |
| 57 | USGS Topographic Maps | 68 | 140 | 216 | 230 | 278 | 394 | 383 | 418 | 547 | 536 | 531 | 522 | 512 | 215 | 2,858 |
| 58 | SDFI | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 523 | 1,243 | 1,445 | 605 | 2,826 |
| 59 | TIGER Roads | 111 | 26 | 0 | 0 | 119 | 447 | 739 | 736 | 845 | 420 | 320 | 296 | 350 | 136 | 2,645 |
| 60 | Mapilio Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 548 | 1,097 | 1,326 | 592 | 2,614 |
| 61 | .kml data file | 0 | 0 | 0 | 0 | 53 | 413 | 438 | 559 | 387 | 366 | 454 | 467 | 530 | 220 | 2,569 |
| 62 | Berlin aerial photography | 0 | 0 | 0 | 0 | 0 | 762 | 1,215 | 950 | 367 | 0 | 0 | 0 | 0 | 0 | 2,544 |
| 63 | Brandenburg GeoBasis-DE/LGB (latest) / DOP20c | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 252 | 1,247 | 1,427 | 582 | 2,518 |
| 64 | GURS: Slovenia orthophoto 25cm (DOF025) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 156 | 587 | 631 | 669 | 701 | 744 | 293 | 2,409 |
| 65 | GeoScribble latest notes | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 605 | 1,451 | 566 | 2,406 |
| 66 | © GeoBasis-DE/LVermGeo LSA, DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 133 | 380 | 883 | 914 | 931 | 389 | 2,404 |
| 67 | Lithuania - NŽT ORT10LT | 0 | 81 | 79 | 96 | 294 | 345 | 310 | 285 | 365 | 377 | 424 | 424 | 455 | 189 | 2,351 |
| 68 | MassGIS 2021 Aerial Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,065 | 1,169 | 789 | 47 | 27 | 2,348 |
| 69 | dgu.hr: Croatia 2019-2020 aerial imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 447 | 887 | 887 | 798 | 37 | 12 | 2,284 |
| 70 | Panoramax Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 597 | 1,537 | 762 | 2,217 |
| 71 | Helsinki region orthophoto | 0 | 0 | 0 | 0 | 0 | 47 | 445 | 383 | 457 | 510 | 493 | 504 | 567 | 261 | 2,187 |
| 72 | NRW vDOP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 121 | 1,973 | 105 | 23 | 2,056 |
| 73 | HOTOSM | 0 | 0 | 0 | 0 | 2,028 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,028 |
| 74 | MassGIS 2023 Aerial Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 593 | 1,396 | 578 | 2,015 |
| 75 | Strava | 4 | 290 | 378 | 546 | 571 | 318 | 112 | 110 | 76 | 53 | 133 | 283 | 292 | 21 | 1,991 |
| 76 | ICGC - Ortofoto de Catalunya 1:2.500 vigent | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 966 | 1,200 | 305 | 2 | 1,978 |
| 77 | Orthophotos of mainland Portugal - 25 cm - 2018 (DGT) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,506 | 688 | 1,933 |
| 78 | Niedersachsen DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 850 | 1,448 | 1,921 |
| 79 | GRAFCAN OrtoExpress Urbana - Canary Islands | 0 | 0 | 0 | 0 | 0 | 0 | 16 | 235 | 348 | 431 | 427 | 447 | 476 | 250 | 1,918 |
| 80 | StratMap CapArea, Brazos & Kerr Imagery (Natural Color 2021) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 136 | 510 | 499 | 412 | 564 | 304 | 1,903 |
| 81 | Catastro Spain | 0 | 0 | 0 | 0 | 0 | 220 | 337 | 360 | 383 | 366 | 374 | 447 | 473 | 253 | 1,766 |
| 82 | OpenStreetMap | 1,708 | 1 | 1 | 0 | 4 | 7 | 0 | 0 | 1 | 2 | 4 | 5 | 2 | 1 | 1,730 |
| 83 | Kanton Zurich, Orthofoto ZH Frühjahr 2021 RGB 5cm | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 431 | 692 | 771 | 529 | 16 | 1,704 |
| 84 | DCS NSW Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 305 | 982 | 585 | 189 | 175 | 172 | 105 | 1,699 |
| 85 | AGIV Flanders most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 1,129 | 879 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1,699 |
| 86 | MassGIS 2019 Orthos | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 278 | 1,356 | 268 | 80 | 25 | 1 | 0 | 1,657 |
| 87 | OS OpenData StreetView | 58 | 192 | 208 | 214 | 285 | 310 | 443 | 451 | 302 | 0 | 0 | 0 | 0 | 0 | 1,649 |
| 88 | PNOA-Spain-TMS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,573 | 29 | 0 | 0 | 0 | 0 | 0 | 1,596 |
| 89 | Orthophoto (2016–2018), 1:5000, Latvia | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 373 | 419 | 437 | 447 | 494 | 207 | 1,551 |
| 90 | Latest available ortho geoportail.lu | 0 | 0 | 0 | 0 | 0 | 243 | 262 | 231 | 281 | 302 | 305 | 298 | 347 | 141 | 1,533 |
| 91 | Actueel_ortho25_WMS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,462 | 58 | 0 | 0 | 0 | 0 | 0 | 1,489 |
| 92 | FR-Cadastre | 0 | 0 | 40 | 681 | 842 | 281 | 1 | 1 | 3 | 0 | 0 | 0 | 0 | 0 | 1,439 |
| 93 | Berlin/Geoportal DOP20RGBI (2022) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 475 | 1,159 | 16 | 5 | 0 | 1,421 |
| 94 | ICGC - Ortofoto de Catalunya | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,052 | 574 | 1,401 |
| 95 | Thüringen DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 318 | 1,049 | 448 | 1,393 |
| 96 | South Tyrol Orthofoto 2020 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 225 | 548 | 575 | 412 | 25 | 6 | 1,346 |
| 97 | Berlin/Geoportal DOP20RGBI (2024) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 615 | 959 | 2 | 1,345 |
| 98 | Berlin/Geoportal DOP20RGB (2021) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 521 | 997 | 21 | 12 | 9 | 3 | 1,331 |
| 99 | Berlin/Geoportal DOP20RGB (2024) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 868 | 628 | 1,285 |
| 100 | South Tyrol Orthofoto 2014/2015 | 0 | 0 | 0 | 0 | 222 | 391 | 456 | 292 | 295 | 6 | 7 | 6 | 4 | 2 | 1,250 |