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 | 48,919 | 1,348,252 |
| 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 | 3,528 | 368,661 |
| 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 | 11,898 | 151,184 |
| 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,016 | 128,923 |
| 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 | 4,665 | 88,627 |
| 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 | 6,169 | 87,232 |
| 8 | .geojson data file | 0 | 0 | 0 | 0 | 9 | 87 | 165 | 572 | 334 | 320 | 9,326 | 36,367 | 25,656 | 6,148 | 70,617 |
| 9 | BDOrtho | 0 | 0 | 0 | 0 | 0 | 9,870 | 12,262 | 14,168 | 13,363 | 12,923 | 13,228 | 13,109 | 9,080 | 17 | 60,853 |
| 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,261 | 37,388 |
| 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 | 2,662 | 25,829 |
| 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 | 928 | 24,632 |
| 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,370 | 24,476 |
| 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,240 | 20,608 |
| 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,331 | 20,028 |
| 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,472 | 16,651 |
| 20 | OpenTopoMap | 0 | 0 | 0 | 0 | 1 | 182 | 2,358 | 3,290 | 2,971 | 2,099 | 2,591 | 2,694 | 2,737 | 963 | 14,931 |
| 21 | BD Ortho IGN | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8,481 | 5,422 | 11,477 |
| 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,068 | 8,631 |
| 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 | 657 | 7,674 |
| 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 | 867 | 6,738 |
| 28 | NRW Orthophoto (RGB) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,125 | 4,757 | 1,515 | 6,481 |
| 29 | MML Orthophoto | 0 | 0 | 0 | 0 | 0 | 961 | 1,104 | 960 | 1,359 | 1,225 | 1,312 | 1,537 | 1,454 | 542 | 6,279 |
| 30 | Norway Orthophoto | 0 | 0 | 0 | 0 | 0 | 780 | 1,167 | 1,016 | 1,166 | 1,218 | 1,211 | 1,277 | 1,490 | 495 | 6,186 |
| 31 | South Africa CD:NGI Aerial | 17 | 36 | 99 | 705 | 889 | 735 | 681 | 796 | 661 | 477 | 666 | 833 | 720 | 318 | 6,003 |
| 32 | Japan GSI | 0 | 0 | 27 | 709 | 513 | 850 | 1,162 | 589 | 817 | 754 | 864 | 965 | 885 | 305 | 5,526 |
| 33 | OpenRailwayMap | 0 | 0 | 0 | 0 | 0 | 6 | 17 | 798 | 1,101 | 851 | 852 | 936 | 1,007 | 262 | 5,271 |
| 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 | 493 | 5,259 |
| 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 | 7 | 4,686 |
| 37 | Cadastre | 0 | 0 | 0 | 0 | 0 | 821 | 1,043 | 1,175 | 1,087 | 994 | 1,000 | 978 | 992 | 439 | 4,381 |
| 38 | LINZ NZ Aerial Imagery | 0 | 0 | 0 | 0 | 324 | 693 | 665 | 603 | 796 | 697 | 836 | 825 | 941 | 406 | 4,362 |
| 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 | Stamen Terrain | 0 | 0 | 0 | 120 | 556 | 749 | 661 | 565 | 696 | 629 | 380 | 44 | 26 | 3 | 4,107 |
| 42 | KartaView Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 1,195 | 1,370 | 1,317 | 1,489 | 511 | 4,024 |
| 43 | NC OneMap Latest Orthoimagery (Natural Color) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 802 | 1,247 | 1,148 | 1,524 | 699 | 4,015 |
| 44 | PDOK Luchtfoto Beeldmateriaal 25cm | 0 | 0 | 0 | 0 | 2,632 | 1,901 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3,924 |
| 45 | Czechia CUZK orthophoto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,909 | 2,337 | 856 | 3,821 |
| 46 | Digitaal Vlaanderen most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 974 | 1,673 | 1,935 | 709 | 3,707 |
| 47 | Geoportal 2 Nazwy ulic | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3,484 | 144 | 131 | 136 | 142 | 77 | 3,677 |
| 48 | NRW Liegenschaftskataster | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,179 | 1,858 | 257 | 148 | 3,527 |
| 49 | Ortofotomozaika SR | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 50 | 565 | 957 | 1,203 | 1,097 | 1,186 | 446 | 3,501 |
| 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 | LPI NSW Imagery | 0 | 0 | 5 | 202 | 1,005 | 1,120 | 996 | 757 | 4 | 2 | 0 | 0 | 0 | 0 | 3,216 |
| 52 | MD Latest 6 Inch Aerial Imagery | 0 | 0 | 0 | 0 | 25 | 38 | 63 | 54 | 311 | 932 | 828 | 783 | 893 | 303 | 3,072 |
| 53 | National Agriculture Imagery Program | 0 | 0 | 0 | 0 | 0 | 0 | 240 | 644 | 670 | 507 | 654 | 791 | 718 | 159 | 2,916 |
| 54 | Thunderforest Landscape | 0 | 0 | 0 | 1,132 | 1,323 | 683 | 18 | 12 | 3 | 1 | 2 | 2 | 2 | 1 | 2,910 |
| 55 | Baden-Württemberg DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,954 | 1,580 | 2,899 |
| 56 | USGS Topographic Maps | 68 | 140 | 216 | 230 | 278 | 394 | 383 | 418 | 547 | 536 | 531 | 522 | 512 | 184 | 2,846 |
| 57 | OpenAerialMap Mosaic, by Kontur.io | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 127 | 1,017 | 862 | 922 | 245 | 2,832 |
| 58 | SDFI | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 523 | 1,243 | 1,445 | 478 | 2,748 |
| 59 | TIGER Roads | 111 | 26 | 0 | 0 | 119 | 447 | 739 | 736 | 845 | 420 | 320 | 296 | 350 | 119 | 2,636 |
| 60 | Berlin aerial photography | 0 | 0 | 0 | 0 | 0 | 762 | 1,215 | 950 | 367 | 0 | 0 | 0 | 0 | 0 | 2,544 |
| 61 | .kml data file | 0 | 0 | 0 | 0 | 53 | 413 | 438 | 559 | 387 | 366 | 454 | 467 | 530 | 177 | 2,542 |
| 62 | Mapilio Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 548 | 1,097 | 1,326 | 446 | 2,521 |
| 63 | Brandenburg GeoBasis-DE/LGB (latest) / DOP20c | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 252 | 1,247 | 1,427 | 444 | 2,448 |
| 64 | GURS: Slovenia orthophoto 25cm (DOF025) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 156 | 587 | 631 | 669 | 701 | 744 | 237 | 2,380 |
| 65 | © GeoBasis-DE/LVermGeo LSA, DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 133 | 380 | 883 | 914 | 931 | 311 | 2,359 |
| 66 | MassGIS 2021 Aerial Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,065 | 1,169 | 789 | 47 | 22 | 2,344 |
| 67 | Lithuania - NŽT ORT10LT | 0 | 81 | 79 | 96 | 294 | 345 | 310 | 285 | 365 | 377 | 424 | 424 | 455 | 157 | 2,330 |
| 68 | GeoScribble latest notes | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 605 | 1,451 | 428 | 2,285 |
| 69 | dgu.hr: Croatia 2019-2020 aerial imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 447 | 887 | 887 | 798 | 37 | 11 | 2,283 |
| 70 | Helsinki region orthophoto | 0 | 0 | 0 | 0 | 0 | 47 | 445 | 383 | 457 | 510 | 493 | 504 | 567 | 220 | 2,167 |
| 71 | Panoramax Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 597 | 1,537 | 613 | 2,117 |
| 72 | NRW vDOP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 121 | 1,973 | 105 | 17 | 2,054 |
| 73 | HOTOSM | 0 | 0 | 0 | 0 | 2,028 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,028 |
| 74 | Strava | 4 | 290 | 378 | 546 | 571 | 318 | 112 | 110 | 76 | 53 | 133 | 283 | 292 | 18 | 1,990 |
| 75 | 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 |
| 76 | MassGIS 2023 Aerial Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 593 | 1,396 | 463 | 1,939 |
| 77 | GRAFCAN OrtoExpress Urbana - Canary Islands | 0 | 0 | 0 | 0 | 0 | 0 | 16 | 235 | 348 | 431 | 427 | 447 | 476 | 206 | 1,891 |
| 78 | StratMap CapArea, Brazos & Kerr Imagery (Natural Color 2021) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 136 | 510 | 499 | 412 | 564 | 238 | 1,854 |
| 79 | Orthophotos of mainland Portugal - 25 cm - 2018 (DGT) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,506 | 535 | 1,822 |
| 80 | Catastro Spain | 0 | 0 | 0 | 0 | 0 | 220 | 337 | 360 | 383 | 366 | 374 | 447 | 473 | 224 | 1,748 |
| 81 | OpenStreetMap | 1,708 | 1 | 1 | 0 | 4 | 7 | 0 | 0 | 1 | 2 | 4 | 5 | 2 | 0 | 1,729 |
| 82 | Kanton Zurich, Orthofoto ZH Frühjahr 2021 RGB 5cm | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 431 | 692 | 771 | 529 | 15 | 1,704 |
| 83 | AGIV Flanders most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 1,129 | 879 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1,699 |
| 84 | DCS NSW Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 305 | 982 | 585 | 189 | 175 | 172 | 85 | 1,690 |
| 85 | MassGIS 2019 Orthos | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 278 | 1,356 | 268 | 80 | 25 | 1 | 0 | 1,657 |
| 86 | OS OpenData StreetView | 58 | 192 | 208 | 214 | 285 | 310 | 443 | 451 | 302 | 0 | 0 | 0 | 0 | 0 | 1,649 |
| 87 | Niedersachsen DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 850 | 1,134 | 1,646 |
| 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 | 168 | 1,530 |
| 90 | Latest available ortho geoportail.lu | 0 | 0 | 0 | 0 | 0 | 243 | 262 | 231 | 281 | 302 | 305 | 298 | 347 | 116 | 1,520 |
| 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 | Berlin/Geoportal DOP20RGBI (2024) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 615 | 959 | 1 | 1,345 |
| 95 | South Tyrol Orthofoto 2020 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 225 | 548 | 575 | 412 | 25 | 4 | 1,345 |
| 96 | ICGC - Ortofoto de Catalunya | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,052 | 473 | 1,333 |
| 97 | Berlin/Geoportal DOP20RGB (2021) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 521 | 997 | 21 | 12 | 9 | 2 | 1,330 |
| 98 | Thüringen DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 318 | 1,049 | 339 | 1,323 |
| 99 | South Tyrol Orthofoto 2014/2015 | 0 | 0 | 0 | 0 | 222 | 391 | 456 | 292 | 295 | 6 | 7 | 6 | 4 | 1 | 1,249 |
| 100 | Kanton Zürich 2015 10cm | 0 | 0 | 0 | 376 | 481 | 533 | 262 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,227 |