How to filter geojson files?

I just want to try GeoMakie.jl package

follow this page:
csv :economic-growth
map:geojson

gdp.csv file include 173 countries and region , but geojson include 255 feature

how to alignment data ? how to fill color?

#import  package ....
path="./vis/data/countries.geojson"
json_str = read(path, String)
worldCountries = GeoJSON.read(json_str)
#n = length(worldCountries)

df=@pipe CSV.File("./vis/data/gdp-per-capita-penn-worldtable.csv")|>DataFrame
ys=2019
df=@chain df begin
   @clean_names
   @filter(year== !!ys)
   
end

lons = -180:180
lats = -90:90
field = [exp(cosd(l)) + 3(y/90) for l in lons, y in lats]

fig = Figure(size = (1200,800), fontsize = 22)

ax = GeoAxis(
    fig[1,1];
    dest="+proj=wintri",
    title = "World GDP",
    tellheight = true,
)

hm1 = surface!(ax, lons, lats, field)
translate!(hm1, 0, 0, -10)

hm2 = poly!(
    ax, worldCountries;
    color= ?,
    colormap = Reverse(:plasma),
    strokecolor = :black,
    strokewidth = 0.25
)


#fig

finally solved this problem,
actually it’s data problem , not plot problem

briefly routine is :

  1. load geosjon and data
  2. transform geojson to dataframe ,and just select column ISO_A3
  3. cause geojso has 255 rows , and data just 178 rows, so we @left_join(geo_df, df,"ISO_A3")
  4. fill missing gdp with zero :@pipe df.gdp|>coalesce.(_, 0)
  5. plot map

## 1. load package 
using Makie, CairoMakie, GeoMakie
import Downloads
using GeoMakie.GeoJSON
using GeometryBasics
using GeoMakie.GeoInterface
using CSV,DataFrames, Tidier,Pipe
using StatsBase

## 2. load geojson 
path="./vis/plots-gallery-data/countries.geojson"
json_str = read(path, String)
worldCountries = GeoJSON.read(json_str)
n = length(worldCountries)
geo_df = @chain DataFrame(worldCountries) @select(ISO_A3)

## 3. load gdp data
df=@pipe CSV.File("./vis/plots-gallery-data/gdp-per-capita-penn-world-table.csv")|>DataFrame|>transform(_,"GDP per capita (output, multiple price benchmarks)"=>"gdp")|>select(_,Not("GDP per capita (output, multiple price benchmarks)"))
ys=2019
df=@chain df begin
   @clean_names
   @filter(year== !!ys)
   @rename(ISO_A3=code)
 end

## 4. join dataframes by  "ISO_A3"
df=@left_join(geo_df, df,"ISO_A3")
df.gdp=@pipe df.gdp|>coalesce.(_, 0)



## 5. plot map 
lons = -180:180
lats = -90:90
field = [exp(cosd(l)) + 3(y/90) for l in lons, y in lats]
n,_=size(df)

function plot_map()
    fig = Figure(size = (1200,800), fontsize = 22)

ax = GeoAxis(
    fig[1,1];
    dest="+proj=wintri",
    title = "World GDP",
    tellheight = true,
)

hm1 = surface!(ax, lons, lats, field)
translate!(hm1, 0, 0, -10)

hm2 = poly!(
    ax, worldCountries;
    color=df.gdp,
    colormap = Reverse(:plasma),
    strokecolor = :black,
    strokewidth = 0.25
)
cb = Colorbar(fig[1,2]; colorrange = (1, n), colormap = Reverse(:plasma), label = "variable, color code", height = Relative(0.65))
fig
end
plot_map()