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 | 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 | 129,247 | 1,306,449 |
| 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 | 9,395 | 367,367 |
| 3 | Maxar Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 17,936 | 35,634 | 53,021 | 48,224 | 30,163 | 221 | 10 | 150,593 |
| 4 | Esri World Imagery | 0 | 0 | 0 | 1 | 4,439 | 14,942 | 19,510 | 25,003 | 23,783 | 21,113 | 34,686 | 34,227 | 31,082 | 143,071 |
| 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,036 | 128,144 |
| 6 | OpenStreetMap (Standard) | 0 | 0 | 0 | 1,444 | 10,559 | 12,257 | 12,768 | 11,741 | 13,993 | 13,432 | 14,584 | 14,558 | 13,114 | 84,971 |
| 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 | 9,527 | 83,194 |
| 8 | .geojson data file | 0 | 0 | 0 | 0 | 9 | 87 | 165 | 572 | 334 | 320 | 9,326 | 36,367 | 21,331 | 62,500 |
| 9 | BDOrtho | 0 | 0 | 0 | 0 | 0 | 9,870 | 12,262 | 14,168 | 13,363 | 12,923 | 13,228 | 13,109 | 9,076 | 60,847 |
| 10 | DigitalGlobe Imagery (now Maxar) | 0 | 0 | 0 | 1 | 14,193 | 19,685 | 12,718 | 14 | 3 | 3 | 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,331 | 36,580 |
| 12 | Geoportal 2: Orthophotomap | 0 | 0 | 0 | 0 | 1 | 3,265 | 4,817 | 5,052 | 3,270 | 5,698 | 5,749 | 6,105 | 5,711 | 24,063 |
| 13 | PNOA Spain | 0 | 0 | 0 | 256 | 4,186 | 4,283 | 4,613 | 3,489 | 4,190 | 4,560 | 3,751 | 3,582 | 3,271 | 23,638 |
| 14 | None | 308 | 1,684 | 1,811 | 1,735 | 1,538 | 1,867 | 2,690 | 2,641 | 2,892 | 3,793 | 2,522 | 3,203 | 2,888 | 23,630 |
| 15 | MAPNIK | 1,117 | 4,851 | 6,283 | 8,281 | 255 | 115 | 48 | 4,155 | 40 | 9 | 11 | 3 | 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 | 2,723 | 19,868 |
| 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,474 | 19,357 |
| 18 | Bavaria (80 cm) | 0 | 0 | 0 | 43 | 259 | 3,656 | 4,059 | 4,602 | 4,769 | 4,663 | 4,705 | 3,715 | 17 | 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,359 | 15,733 |
| 20 | OpenTopoMap | 0 | 0 | 0 | 0 | 1 | 182 | 2,358 | 3,290 | 2,971 | 2,099 | 2,591 | 2,694 | 2,368 | 14,100 |
| 21 | Geoportal.gov.pl (Orthophotomap) | 0 | 262 | 1,095 | 4,496 | 4,887 | 3,227 | 139 | 15 | 0 | 1 | 1 | 1 | 0 | 10,733 |
| 22 | NRW Orthophoto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,176 | 4,453 | 4,371 | 3,141 | 514 | 24 | 9,389 |
| 23 | swisstopo SWISSIMAGE | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,315 | 2,456 | 2,616 | 2,714 | 2,821 | 7,973 |
| 24 | Saxony latest aerial imagery | 0 | 0 | 0 | 0 | 0 | 1,299 | 1,506 | 1,309 | 1,657 | 1,609 | 1,763 | 1,813 | 1,708 | 7,362 |
| 25 | OpenStreetCam Images | 0 | 0 | 0 | 0 | 363 | 2,240 | 2,124 | 2,248 | 2,200 | 410 | 12 | 1 | 2 | 7,142 |
| 26 | BD Ortho IGN | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 6,531 | 6,531 |
| 27 | Hesse DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,115 | 2,262 | 2,411 | 2,315 | 6,248 |
| 28 | MML Orthophoto | 0 | 0 | 0 | 0 | 0 | 961 | 1,104 | 960 | 1,359 | 1,225 | 1,312 | 1,537 | 1,256 | 5,958 |
| 29 | Norway Orthophoto | 0 | 0 | 0 | 0 | 0 | 780 | 1,167 | 1,016 | 1,166 | 1,218 | 1,211 | 1,277 | 1,357 | 5,861 |
| 30 | South Africa CD:NGI Aerial | 17 | 36 | 99 | 705 | 889 | 735 | 681 | 796 | 661 | 477 | 666 | 833 | 616 | 5,712 |
| 31 | NRW Orthophoto (RGB) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,125 | 4,313 | 5,390 |
| 32 | Japan GSI | 0 | 0 | 27 | 709 | 513 | 850 | 1,162 | 589 | 817 | 754 | 864 | 965 | 771 | 5,337 |
| 33 | AIV Flanders | 0 | 0 | 0 | 0 | 0 | 0 | 1,148 | 1,664 | 1,909 | 1,859 | 1,204 | 6 | 0 | 5,226 |
| 34 | SPW(allonie) most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 725 | 969 | 945 | 1,133 | 1,097 | 1,201 | 1,131 | 1,038 | 4,972 |
| 35 | OpenRailwayMap | 0 | 0 | 0 | 0 | 0 | 6 | 17 | 798 | 1,101 | 851 | 852 | 936 | 831 | 4,886 |
| 36 | CyclOSM | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 20 | 515 | 2,746 | 1,795 | 58 | 24 | 4,680 |
| 37 | SDFE aerial imagery | 0 | 0 | 0 | 0 | 574 | 1,052 | 937 | 753 | 1,154 | 1,119 | 758 | 10 | 0 | 4,343 |
| 38 | Orthophotos of mainland Portugal - 25cm - 2018 (DGT) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 668 | 1,466 | 1,514 | 1,822 | 282 | 4,275 |
| 39 | Cadastre | 0 | 0 | 0 | 0 | 0 | 821 | 1,043 | 1,175 | 1,087 | 994 | 1,000 | 978 | 893 | 4,246 |
| 40 | Stamen Terrain | 0 | 0 | 0 | 120 | 556 | 749 | 661 | 565 | 696 | 629 | 380 | 44 | 24 | 4,104 |
| 41 | LINZ NZ Aerial Imagery | 0 | 0 | 0 | 0 | 324 | 693 | 665 | 603 | 796 | 697 | 836 | 825 | 830 | 4,099 |
| 42 | PDOK Luchtfoto Beeldmateriaal 25cm | 0 | 0 | 0 | 0 | 2,632 | 1,901 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 3,924 |
| 43 | KartaView Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 1,195 | 1,370 | 1,317 | 1,315 | 3,693 |
| 44 | Geoportal 2 Nazwy ulic | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 3,484 | 144 | 131 | 136 | 118 | 3,646 |
| 45 | NRW Liegenschaftskataster | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,179 | 1,858 | 241 | 3,487 |
| 46 | Belgium AGIV Orthophoto Flanders | 0 | 0 | 107 | 1,493 | 1,722 | 1,037 | 3 | 0 | 1 | 0 | 1 | 0 | 0 | 3,433 |
| 47 | NC OneMap Latest Orthoimagery (Natural Color) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 802 | 1,247 | 1,148 | 1,264 | 3,383 |
| 48 | Czechia CUZK orthophoto | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,909 | 2,079 | 3,274 |
| 49 | Ortofotomozaika SR | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 50 | 565 | 957 | 1,203 | 1,097 | 1,059 | 3,252 |
| 50 | Digitaal Vlaanderen most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 974 | 1,673 | 1,704 | 3,224 |
| 51 | LPI NSW Imagery | 0 | 0 | 5 | 202 | 1,005 | 1,120 | 996 | 757 | 4 | 2 | 0 | 0 | 0 | 3,216 |
| 52 | Thunderforest Landscape | 0 | 0 | 0 | 1,132 | 1,323 | 683 | 18 | 12 | 3 | 1 | 2 | 2 | 2 | 2,910 |
| 53 | National Agriculture Imagery Program | 0 | 0 | 0 | 0 | 0 | 0 | 240 | 644 | 670 | 507 | 654 | 791 | 654 | 2,813 |
| 54 | MD Latest 6 Inch Aerial Imagery | 0 | 0 | 0 | 0 | 25 | 38 | 63 | 54 | 311 | 932 | 828 | 783 | 753 | 2,799 |
| 55 | USGS Topographic Maps | 68 | 140 | 216 | 230 | 278 | 394 | 383 | 418 | 547 | 536 | 531 | 522 | 464 | 2,766 |
| 56 | TIGER Roads | 111 | 26 | 0 | 0 | 119 | 447 | 739 | 736 | 845 | 420 | 320 | 296 | 308 | 2,564 |
| 57 | Berlin aerial photography | 0 | 0 | 0 | 0 | 0 | 762 | 1,215 | 950 | 367 | 0 | 0 | 0 | 0 | 2,544 |
| 58 | OpenAerialMap Mosaic, by Kontur.io | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 127 | 1,017 | 862 | 797 | 2,544 |
| 59 | .kml data file | 0 | 0 | 0 | 0 | 53 | 413 | 438 | 559 | 387 | 366 | 454 | 467 | 493 | 2,446 |
| 60 | SDFI | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 523 | 1,243 | 1,293 | 2,385 |
| 61 | MassGIS 2021 Aerial Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,065 | 1,169 | 789 | 43 | 2,337 |
| 62 | dgu.hr: Croatia 2019-2020 aerial imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 447 | 887 | 887 | 798 | 35 | 2,281 |
| 63 | GURS: Slovenia orthophoto 25cm (DOF025) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 156 | 587 | 631 | 669 | 701 | 680 | 2,240 |
| 64 | Lithuania - NŽT ORT10LT | 0 | 81 | 79 | 96 | 294 | 345 | 310 | 285 | 365 | 377 | 424 | 424 | 397 | 2,204 |
| 65 | Mapilio Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 548 | 1,097 | 1,151 | 2,187 |
| 66 | © GeoBasis-DE/LVermGeo LSA, DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 133 | 380 | 883 | 914 | 827 | 2,173 |
| 67 | Brandenburg GeoBasis-DE/LGB (latest) / DOP20c | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 252 | 1,247 | 1,279 | 2,158 |
| 68 | NRW vDOP | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 121 | 1,973 | 98 | 2,046 |
| 69 | Helsinki region orthophoto | 0 | 0 | 0 | 0 | 0 | 47 | 445 | 383 | 457 | 510 | 493 | 504 | 493 | 2,045 |
| 70 | HOTOSM | 0 | 0 | 0 | 0 | 2,028 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2,028 |
| 71 | Strava | 4 | 290 | 378 | 546 | 571 | 318 | 112 | 110 | 76 | 53 | 133 | 283 | 288 | 1,988 |
| 72 | ICGC - Ortofoto de Catalunya 1:2.500 vigent | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 966 | 1,200 | 304 | 1,975 |
| 73 | GeoScribble latest notes | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 605 | 1,235 | 1,748 |
| 74 | OpenStreetMap | 1,708 | 1 | 1 | 0 | 4 | 7 | 0 | 0 | 1 | 2 | 4 | 5 | 2 | 1,729 |
| 75 | GRAFCAN OrtoExpress Urbana - Canary Islands | 0 | 0 | 0 | 0 | 0 | 0 | 16 | 235 | 348 | 431 | 427 | 447 | 407 | 1,726 |
| 76 | Kanton Zurich, Orthofoto ZH Frühjahr 2021 RGB 5cm | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 431 | 692 | 771 | 527 | 1,700 |
| 77 | AGIV Flanders most recent aerial imagery | 0 | 0 | 0 | 0 | 0 | 1,129 | 879 | 1 | 0 | 0 | 0 | 0 | 0 | 1,699 |
| 78 | Catastro Spain | 0 | 0 | 0 | 0 | 0 | 220 | 337 | 360 | 383 | 366 | 374 | 447 | 428 | 1,659 |
| 79 | DCS NSW Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 305 | 982 | 585 | 189 | 175 | 154 | 1,658 |
| 80 | MassGIS 2019 Orthos | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 278 | 1,356 | 268 | 80 | 25 | 1 | 1,657 |
| 81 | OS OpenData StreetView | 58 | 192 | 208 | 214 | 285 | 310 | 443 | 451 | 302 | 0 | 0 | 0 | 0 | 1,649 |
| 82 | Panoramax Images | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 597 | 1,320 | 1,645 |
| 83 | PNOA-Spain-TMS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,573 | 29 | 0 | 0 | 0 | 0 | 1,596 |
| 84 | StratMap CapArea, Brazos & Kerr Imagery (Natural Color 2021) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 136 | 510 | 499 | 412 | 448 | 1,575 |
| 85 | MassGIS 2023 Aerial Imagery | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 593 | 1,202 | 1,530 |
| 86 | Actueel_ortho25_WMS | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,462 | 58 | 0 | 0 | 0 | 0 | 1,489 |
| 87 | FR-Cadastre | 0 | 0 | 40 | 681 | 842 | 281 | 1 | 1 | 3 | 0 | 0 | 0 | 0 | 1,439 |
| 88 | Latest available ortho geoportail.lu | 0 | 0 | 0 | 0 | 0 | 243 | 262 | 231 | 281 | 302 | 305 | 298 | 307 | 1,437 |
| 89 | Berlin/Geoportal DOP20RGBI (2022) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 475 | 1,159 | 16 | 5 | 1,421 |
| 90 | Orthophoto (2016–2018), 1:5000, Latvia | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 373 | 419 | 437 | 447 | 436 | 1,419 |
| 91 | Berlin/Geoportal DOP20RGBI (2024) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 615 | 959 | 1,345 |
| 92 | South Tyrol Orthofoto 2020 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 225 | 548 | 575 | 412 | 23 | 1,344 |
| 93 | Berlin/Geoportal DOP20RGB (2021) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 521 | 997 | 21 | 12 | 5 | 1,325 |
| 94 | Orthophotos of mainland Portugal - 25 cm - 2018 (DGT) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,308 | 1,308 |
| 95 | Baden-Württemberg DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1,247 | 1,247 |
| 96 | South Tyrol Orthofoto 2014/2015 | 0 | 0 | 0 | 0 | 222 | 391 | 456 | 292 | 295 | 6 | 7 | 6 | 3 | 1,247 |
| 97 | Kanton Zürich 2015 10cm | 0 | 0 | 0 | 376 | 481 | 533 | 262 | 0 | 0 | 0 | 0 | 0 | 0 | 1,227 |
| 98 | Baden-Würrtemberg DOP20 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 231 | 1,094 | 1,221 |
| 99 | Stuttgart Luftbild Stadtmessungsamt 2021 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 372 | 645 | 490 | 6 | 1,162 |
| 100 | Berlin/Geoportal DOP20RGBI (2023) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 272 | 973 | 18 | 1,124 |