Julia Data Kartta ((hot)) May 2026
using GLMakie, Random Random.seed!(42) lats = 60.17 .+ randn(10_000_000) * 0.01 lons = 24.94 .+ randn(10_000_000) * 0.01
Because GeoArray behaves like a regular Julia Array , all your linear algebra, FFTs, and statistical functions work out of the box. No rasterio boilerplate. A map without a legend is a puzzle. Makie’s composable Axis system (borrowing ideas from Grammar of Graphics) allows you to build legends as first-class objects. julia data kartta
using GeoArrays, ArchGDAL ga = GeoArray("landsat_band4.tif") roi = ga[100:200, 100:200] Apply a filter (e.g., NDVI calculation) ndvi = (ga.band4 - ga.band3) / (ga.band4 + ga.band3) Write back with preserved georeferencing GeoArrays.write("ndvi_map.tif", ndvi) using GLMakie, Random Random
fig = Figure() ax1 = Axis(fig[1,1], title="Population Density") ax2 = Axis(fig[1,2], title="Seismic Risk") linkxaxes!(ax1, ax2) linkyaxes!(ax1, ax2) Add scale bar (manual) lines!(ax1, [0, 100], [ymin, ymin], color=:black, linewidth=3) text!(ax1, 50, ymin-5, text="100 km") No silent NaN propagation
using DataFrames, CSV df = CSV.read("earthquakes.csv", DataFrame)
But here’s the cartographic insight: . Julia’s missing union type forces you to be explicit. No silent NaN propagation. You must decide: impute, drop, or mark.