Week 6: Spatial Joins and Areal-Weighted Interpolation

PPOL 6805 / DSAN 6750: GIS for Spatial Data Science
Fall 2025

Class Sessions
Author
Affiliation

Jeff Jacobs

Published

Wednesday, October 2, 2024

Open slides in new tab →

Doing Things with DE-9IM (Back to Binary Operations)

Almost a Spatial Join

Code
source("../dsan-globals/_globals.r")
library(tidyverse) |> suppressPackageStartupMessages()
library(sf) |> suppressPackageStartupMessages()
library(rnaturalearth) |> suppressPackageStartupMessages()
library(mapview) |> suppressPackageStartupMessages()
africa_sf <- ne_countries(continent = "Africa", scale = 50)
africa_union_sf <- sf::st_union(africa_sf)
africa_map <- mapview(africa_sf, label="geounit", legend=FALSE)
N <- 10
sampled_points_sf <- sf::st_sample(africa_union_sf, N) |> sf::st_sf() |> mutate(temp = runif(N, 0, 100))
sampled_points_map <- mapview(sampled_points_sf, label="Random Point", col.regions=cbPalette[1], legend=FALSE)
countries_points_sf <- africa_sf[sampled_points_sf,]
filtered_map <- mapview(countries_points_sf, label="geounit", legend=FALSE) + sampled_points_map
(africa_map + sampled_points_map) | filtered_map
Loading required namespace: leaflet.extras2

Spatial Filter \(\neq\) Spatial Join

  • The issue: Data attributes of POINTs are not merged into data attributes of POLYGONs
POINT Attributes
Code
st_geometry(sampled_points_sf) <- c("geom")
sampled_points_sf |> head()
geom temp
POINT (33.5931 29.08277) 97.0442031
POINT (1.979177 13.72218) 63.0309917
POINT (5.197797 32.08048) 75.3301563
POINT (2.091349 8.460578) 0.0173522
POINT (10.31404 1.262392) 75.3951204
POINT (19.00772 -17.86188) 81.0229567
POLYGON Attributes
Code
countries_points_sf |> head(4)
featurecla scalerank labelrank sovereignt sov_a3 adm0_dif level type tlc admin adm0_a3 geou_dif geounit gu_a3 su_dif subunit su_a3 brk_diff name name_long brk_a3 brk_name brk_group abbrev postal formal_en formal_fr name_ciawf note_adm0 note_brk name_sort name_alt mapcolor7 mapcolor8 mapcolor9 mapcolor13 pop_est pop_rank pop_year gdp_md gdp_year economy income_grp fips_10 iso_a2 iso_a2_eh iso_a3 iso_a3_eh iso_n3 iso_n3_eh un_a3 wb_a2 wb_a3 woe_id woe_id_eh woe_note adm0_iso adm0_diff adm0_tlc adm0_a3_us adm0_a3_fr adm0_a3_ru adm0_a3_es adm0_a3_cn adm0_a3_tw adm0_a3_in adm0_a3_np adm0_a3_pk adm0_a3_de adm0_a3_gb adm0_a3_br adm0_a3_il adm0_a3_ps adm0_a3_sa adm0_a3_eg adm0_a3_ma adm0_a3_pt adm0_a3_ar adm0_a3_jp adm0_a3_ko adm0_a3_vn adm0_a3_tr adm0_a3_id adm0_a3_pl adm0_a3_gr adm0_a3_it adm0_a3_nl adm0_a3_se adm0_a3_bd adm0_a3_ua adm0_a3_un adm0_a3_wb continent region_un subregion region_wb name_len long_len abbrev_len tiny homepart min_zoom min_label max_label label_x label_y ne_id wikidataid name_ar name_bn name_de name_en name_es name_fa name_fr name_el name_he name_hi name_hu name_id name_it name_ja name_ko name_nl name_pl name_pt name_ru name_sv name_tr name_uk name_ur name_vi name_zh name_zht fclass_iso tlc_diff fclass_tlc fclass_us fclass_fr fclass_ru fclass_es fclass_cn fclass_tw fclass_in fclass_np fclass_pk fclass_de fclass_gb fclass_br fclass_il fclass_ps fclass_sa fclass_eg fclass_ma fclass_pt fclass_ar fclass_jp fclass_ko fclass_vn fclass_tr fclass_id fclass_pl fclass_gr fclass_it fclass_nl fclass_se fclass_bd fclass_ua geometry
57 Admin-0 country 1 2 South Africa ZAF 0 2 Sovereign country 1 South Africa ZAF 0 South Africa ZAF 0 South Africa ZAF 0 South Africa South Africa ZAF South Africa NA S.Af. ZA Republic of South Africa NA South Africa NA NA South Africa NA 2 3 4 2 58558270 16 2019 351431 2019 5. Emerging region: G20 3. Upper middle income SF ZA ZA ZAF ZAF 710 710 710 ZA ZAF 23424942 23424942 Exact WOE match as country ZAF NA ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF -99 -99 Africa Africa Southern Africa Sub-Saharan Africa 12 12 5 -99 1 0 1.7 6.7 23.665734 -29.708776 1159321431 Q258 جنوب أفريقيا দক্ষিণ আফ্রিকা Südafrika South Africa Sudáfrica آفریقای جنوبی Afrique du Sud Νότια Αφρική דרום אפריקה दक्षिण अफ़्रीका Dél-afrikai Köztársaság Afrika Selatan Sudafrica 南アフリカ共和国 남아프리카 공화국 Zuid-Afrika Południowa Afryka África do Sul ЮАР Sydafrika Güney Afrika Cumhuriyeti Південно-Африканська Республіка جنوبی افریقا Cộng hòa Nam Phi 南非 南非 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA MULTIPOLYGON (((29.36484 -2…
92 Admin-0 country 1 3 Niger NER 0 2 Sovereign country 1 Niger NER 0 Niger NER 0 Niger NER 0 Niger Niger NER Niger NA Niger NE Republic of Niger NA Niger NA NA Niger NA 4 5 3 13 23310715 15 2019 12911 2019 7. Least developed region 5. Low income NG NE NE NER NER 562 562 562 NE NER 23424906 23424906 Exact WOE match as country NER NA NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER -99 -99 Africa Africa Western Africa Sub-Saharan Africa 5 5 5 -99 1 0 3.0 8.0 9.504356 17.446195 1159321087 Q1032 النيجر নাইজার Niger Niger Níger نیجر Niger Νίγηρας ניז’ר नाइजर Niger Niger Niger ニジェール 니제르 Niger Niger Níger Нигер Niger Nijer Нігер نائجر Niger 尼日尔 尼日 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA MULTIPOLYGON (((13.60635 13…
102 Admin-0 country 1 3 Namibia NAM 0 2 Sovereign country 1 Namibia NAM 0 Namibia NAM 0 Namibia NAM 0 Namibia Namibia NAM Namibia NA Nam. NA Republic of Namibia NA Namibia NA NA Namibia NA 4 1 1 7 2494530 12 2019 12366 2019 6. Developing region 3. Upper middle income WA NA NA NAM NAM 516 516 516 NA NAM 23424987 23424987 Exact WOE match as country NAM NA NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM -99 -99 Africa Africa Southern Africa Sub-Saharan Africa 7 7 4 -99 1 0 3.0 7.5 17.108166 -20.575298 1159321085 Q1030 ناميبيا নামিবিয়া Namibia Namibia Namibia نامیبیا Namibie Ναμίμπια נמיביה नामीबिया Namíbia Namibia Namibia ナミビア 나미비아 Namibië Namibia Namíbia Намибия Namibia Namibya Намібія نمیبیا Namibia 纳米比亚 納米比亞 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA MULTIPOLYGON (((23.38066 -1…
172 Admin-0 country 1 2 Ethiopia ETH 0 2 Sovereign country 1 Ethiopia ETH 0 Ethiopia ETH 0 Ethiopia ETH 0 Ethiopia Ethiopia ETH Ethiopia NA Eth. ET Federal Democratic Republic of Ethiopia NA Ethiopia NA NA Ethiopia NA 4 4 1 13 112078730 17 2019 95912 2019 7. Least developed region 5. Low income ET ET ET ETH ETH 231 231 231 ET ETH 23424808 23424808 Exact WOE match as country ETH NA ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH -99 -99 Africa Africa Eastern Africa Sub-Saharan Africa 8 8 4 -99 1 0 2.0 7.0 39.088600 8.032795 1159320617 Q115 إثيوبيا ইথিওপিয়া Äthiopien Ethiopia Etiopía اتیوپی Éthiopie Αιθιοπία אתיופיה इथियोपिया Etiópia Ethiopia Etiopia エチオピア 에티오피아 Ethiopië Etiopia Etiópia Эфиопия Etiopien Etiyopya Ефіопія ایتھوپیا Ethiopia 埃塞俄比亚 衣索比亞 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA MULTIPOLYGON (((35.26836 5….

Our First Real Spatial Join: st_join()

Code
joined_sf <- countries_points_sf |> st_join(sampled_points_sf)
joined_sf |> head()
featurecla scalerank labelrank sovereignt sov_a3 adm0_dif level type tlc admin adm0_a3 geou_dif geounit gu_a3 su_dif subunit su_a3 brk_diff name name_long brk_a3 brk_name brk_group abbrev postal formal_en formal_fr name_ciawf note_adm0 note_brk name_sort name_alt mapcolor7 mapcolor8 mapcolor9 mapcolor13 pop_est pop_rank pop_year gdp_md gdp_year economy income_grp fips_10 iso_a2 iso_a2_eh iso_a3 iso_a3_eh iso_n3 iso_n3_eh un_a3 wb_a2 wb_a3 woe_id woe_id_eh woe_note adm0_iso adm0_diff adm0_tlc adm0_a3_us adm0_a3_fr adm0_a3_ru adm0_a3_es adm0_a3_cn adm0_a3_tw adm0_a3_in adm0_a3_np adm0_a3_pk adm0_a3_de adm0_a3_gb adm0_a3_br adm0_a3_il adm0_a3_ps adm0_a3_sa adm0_a3_eg adm0_a3_ma adm0_a3_pt adm0_a3_ar adm0_a3_jp adm0_a3_ko adm0_a3_vn adm0_a3_tr adm0_a3_id adm0_a3_pl adm0_a3_gr adm0_a3_it adm0_a3_nl adm0_a3_se adm0_a3_bd adm0_a3_ua adm0_a3_un adm0_a3_wb continent region_un subregion region_wb name_len long_len abbrev_len tiny homepart min_zoom min_label max_label label_x label_y ne_id wikidataid name_ar name_bn name_de name_en name_es name_fa name_fr name_el name_he name_hi name_hu name_id name_it name_ja name_ko name_nl name_pl name_pt name_ru name_sv name_tr name_uk name_ur name_vi name_zh name_zht fclass_iso tlc_diff fclass_tlc fclass_us fclass_fr fclass_ru fclass_es fclass_cn fclass_tw fclass_in fclass_np fclass_pk fclass_de fclass_gb fclass_br fclass_il fclass_ps fclass_sa fclass_eg fclass_ma fclass_pt fclass_ar fclass_jp fclass_ko fclass_vn fclass_tr fclass_id fclass_pl fclass_gr fclass_it fclass_nl fclass_se fclass_bd fclass_ua temp geometry
57 Admin-0 country 1 2 South Africa ZAF 0 2 Sovereign country 1 South Africa ZAF 0 South Africa ZAF 0 South Africa ZAF 0 South Africa South Africa ZAF South Africa NA S.Af. ZA Republic of South Africa NA South Africa NA NA South Africa NA 2 3 4 2 58558270 16 2019 351431 2019 5. Emerging region: G20 3. Upper middle income SF ZA ZA ZAF ZAF 710 710 710 ZA ZAF 23424942 23424942 Exact WOE match as country ZAF NA ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF ZAF -99 -99 Africa Africa Southern Africa Sub-Saharan Africa 12 12 5 -99 1 0 1.7 6.7 23.665734 -29.708776 1159321431 Q258 جنوب أفريقيا দক্ষিণ আফ্রিকা Südafrika South Africa Sudáfrica آفریقای جنوبی Afrique du Sud Νότια Αφρική דרום אפריקה दक्षिण अफ़्रीका Dél-afrikai Köztársaság Afrika Selatan Sudafrica 南アフリカ共和国 남아프리카 공화국 Zuid-Afrika Południowa Afryka África do Sul ЮАР Sydafrika Güney Afrika Cumhuriyeti Південно-Африканська Республіка جنوبی افریقا Cộng hòa Nam Phi 南非 南非 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 67.81674 MULTIPOLYGON (((29.36484 -2…
92 Admin-0 country 1 3 Niger NER 0 2 Sovereign country 1 Niger NER 0 Niger NER 0 Niger NER 0 Niger Niger NER Niger NA Niger NE Republic of Niger NA Niger NA NA Niger NA 4 5 3 13 23310715 15 2019 12911 2019 7. Least developed region 5. Low income NG NE NE NER NER 562 562 562 NE NER 23424906 23424906 Exact WOE match as country NER NA NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER NER -99 -99 Africa Africa Western Africa Sub-Saharan Africa 5 5 5 -99 1 0 3.0 8.0 9.504356 17.446195 1159321087 Q1032 النيجر নাইজার Niger Niger Níger نیجر Niger Νίγηρας ניז’ר नाइजर Niger Niger Niger ニジェール 니제르 Niger Niger Níger Нигер Niger Nijer Нігер نائجر Niger 尼日尔 尼日 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 63.03099 MULTIPOLYGON (((13.60635 13…
102 Admin-0 country 1 3 Namibia NAM 0 2 Sovereign country 1 Namibia NAM 0 Namibia NAM 0 Namibia NAM 0 Namibia Namibia NAM Namibia NA Nam. NA Republic of Namibia NA Namibia NA NA Namibia NA 4 1 1 7 2494530 12 2019 12366 2019 6. Developing region 3. Upper middle income WA NA NA NAM NAM 516 516 516 NA NAM 23424987 23424987 Exact WOE match as country NAM NA NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM NAM -99 -99 Africa Africa Southern Africa Sub-Saharan Africa 7 7 4 -99 1 0 3.0 7.5 17.108166 -20.575298 1159321085 Q1030 ناميبيا নামিবিয়া Namibia Namibia Namibia نامیبیا Namibie Ναμίμπια נמיביה नामीबिया Namíbia Namibia Namibia ナミビア 나미비아 Namibië Namibia Namíbia Намибия Namibia Namibya Намібія نمیبیا Namibia 纳米比亚 納米比亞 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 81.02296 MULTIPOLYGON (((23.38066 -1…
172 Admin-0 country 1 2 Ethiopia ETH 0 2 Sovereign country 1 Ethiopia ETH 0 Ethiopia ETH 0 Ethiopia ETH 0 Ethiopia Ethiopia ETH Ethiopia NA Eth. ET Federal Democratic Republic of Ethiopia NA Ethiopia NA NA Ethiopia NA 4 4 1 13 112078730 17 2019 95912 2019 7. Least developed region 5. Low income ET ET ET ETH ETH 231 231 231 ET ETH 23424808 23424808 Exact WOE match as country ETH NA ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH ETH -99 -99 Africa Africa Eastern Africa Sub-Saharan Africa 8 8 4 -99 1 0 2.0 7.0 39.088600 8.032795 1159320617 Q115 إثيوبيا ইথিওপিয়া Äthiopien Ethiopia Etiopía اتیوپی Éthiopie Αιθιοπία אתיופיה इथियोपिया Etiópia Ethiopia Etiopia エチオピア 에티오피아 Ethiopië Etiopia Etiópia Эфиопия Etiopien Etiyopya Ефіопія ایتھوپیا Ethiopia 埃塞俄比亚 衣索比亞 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 81.21944 MULTIPOLYGON (((35.26836 5….
175 Admin-0 country 1 4 Equatorial Guinea GNQ 0 2 Sovereign country 1 Equatorial Guinea GNQ 0 Equatorial Guinea GNQ 0 Equatorial Guinea GNQ 0 Eq. Guinea Equatorial Guinea GNQ Eq. Guinea NA Eq. G. GQ Republic of Equatorial Guinea NA Equatorial Guinea NA NA Equatorial Guinea NA 4 1 4 8 1355986 12 2019 11026 2019 7. Least developed region 2. High income: nonOECD EK GQ GQ GNQ GNQ 226 226 226 GQ GNQ 23424804 23424804 Exact WOE match as country GNQ NA GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ GNQ -99 -99 Africa Africa Middle Africa Sub-Saharan Africa 10 17 6 -99 1 0 4.0 9.0 8.990200 2.333000 1159320801 Q983 غينيا الاستوائية বিষুবীয় গিনি Äquatorialguinea Equatorial Guinea Guinea Ecuatorial گینه استوایی Guinée équatoriale Ισημερινή Γουινέα גינאה המשוונית भूमध्यरेखीय गिनी Egyenlítői-Guinea Guinea Khatulistiwa Guinea Equatoriale 赤道ギニア 적도 기니 Equatoriaal-Guinea Gwinea Równikowa Guiné Equatorial Экваториальная Гвинея Ekvatorialguinea Ekvator Ginesi Екваторіальна Гвінея استوائی گنی Guinea Xích Đạo 赤道几内亚 赤道幾內亞 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 75.39512 MULTIPOLYGON (((8.735742 3….
177 Admin-0 country 1 2 Egypt EGY 0 2 Sovereign country 1 Egypt EGY 0 Egypt EGY 0 Egypt EGY 0 Egypt Egypt EGY Egypt NA Egypt EG Arab Republic of Egypt NA Egypt NA NA Egypt, Arab Rep. NA 4 6 7 2 100388073 17 2019 303092 2019 5. Emerging region: G20 4. Lower middle income EG EG EG EGY EGY 818 818 818 EG EGY 23424802 23424802 Exact WOE match as country EGY NA EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY EGY -99 -99 Africa Africa Northern Africa Middle East & North Africa 5 5 5 -99 1 0 1.7 6.7 29.445837 26.186173 1159320575 Q79 مصر মিশর Ägypten Egypt Egipto مصر Égypte Αίγυπτος מצרים मिस्र Egyiptom Mesir Egitto エジプト 이집트 Egypte Egipt Egito Египет Egypten Mısır Єгипет مصر Ai Cập 埃及 埃及 Admin-0 country NA Admin-0 country NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 97.04420 MULTIPOLYGON (((36.87139 21…

But… We Were Still in Easy Mode

  • Every point could be matched one-to-one with a country. But what if… 😱
Code
g <- st_make_grid(st_bbox(st_as_sfc("LINESTRING(0 0,1 1)")), n = c(2,2))
par(mar = rep(0,4))
plot(g)
plot(g[1] * diag(c(3/4, 1)) + c(0.25, 0.125), add = TRUE, lty = 2)
text(c(.2, .8, .2, .8), c(.2, .2, .8, .8), c(1,2,4,8), col = 'red')

Spatially Intensive vs. Spatially Extensive

  • Extensive attributes: associated with a physical size (length, area, volume, counts of items). Ex: population count.
    • Associated with an area \(\implies\) if that area is cut into smaller areas, the population count needs to be split too
    • (At minimum, the sum of the population counts for the smaller areas needs to equal the total for the larger area)
  • Intensive attributes: Not proportional to support: if the area is split, values may vary but on average remain the same. Ex: population density
    • If an area is split into smaller areas, population density is not split similarly!
    • The sum of population densities for the smaller areas is a meaningless measure
    • Instead, the mean will be more useful as ~similar to the density of the total

Handling the Extensive Case

  • Assume the extensive attribute \(Y\) is uniformly distributed over a space \(S_i\) (e.g., for population counts we assume everyone is evenly-spaced across the region)

  • We first compute \(Y_{ij}\), derived from \(Y_i\) for a sub-area of \(S_i\), \(A_{ij} = S_i \cap T_j\):

    \[ \hat{Y}_{ij}(A_{ij}) = \frac{|A_{ij}|}{|S_i|}Y_i(S_i) \]

    where \(|\cdot|\) denotes area.

  • Then we can compute \(Y_j(T_j)\) by summing all the elements over area \(T_j\):

\[ \hat{Y}_j(T_j) = \sum_{i=1}^{p}\frac{|A_{ij}|}{|S_i|}Y_i(S_i) \]

Handling the Intensive Case

  • Assume the variable \(Y\) has constant value over a space \(S_i\) (e.g., population density in assumed to be the same across all sub-areas)
  • Then the estimate for a sub-area is the same as the estimate for the total area:

\[ \hat{Y}_{ij} = Y_i(S_i) \]

  • So that we can obtain estimates of \(Y\) for new spatial units \(T_j\) via area-weighted average of the source values:

\[ \hat{Y}_j(T_j) = \sum_{i=1}^{p}\frac{|A_{ij}|}{|T_j|}Y_j(S_i) \]

Let’s Go See It In Action!

 

Week 6 Lab: Interpolating Kurdistan

References