Skip to content

Commit d160cd3

Browse files
Merge pull request #105 from larzeitlin/gis_roadmap
GIS roadmap
2 parents d58476e + f987fd4 commit d160cd3

File tree

1 file changed

+153
-0
lines changed

1 file changed

+153
-0
lines changed

src/gis/roadmap.clj

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
^{:kindly/hide-code true
2+
:clay {:title "GIS roadmap"
3+
:quarto {:author :luke-zeitlin
4+
:type :post
5+
:date "2025-10-23"
6+
:draft true
7+
:category :gis
8+
:tags [:gis]}}}
9+
10+
(ns gis.roadmap
11+
(:require [scicloj.kindly.v4.kind :as kind]))
12+
13+
;; # Roadmap for Clojure GIS
14+
;; The plan is to present a cohesive story for GIS work in the Clojure ecosystem.
15+
;; At present this document can serve as a location to add notes, todos and thoughts.
16+
;; Some future version of it may serve as a landing page.
17+
;; # Why Clojure?
18+
;; ## TODO:
19+
;; A few words about why Clojure is good for GIS...
20+
;; - Clojure's ability to interact with multiple host environments (Java, JS, Python, etc).
21+
;; - Same language on the front and backend
22+
;; - Ergonomic data workflow
23+
;; - Interactive development
24+
;; # GIS Task Categories
25+
;; ## Image formats
26+
;; ### Raster
27+
;; #### Cloud Optimized GeoTIFF (COG)
28+
;; ##### What is a COG?
29+
;; **TIFF** is an extensible image file format. **GeoTIFFs** are TIFFs with geospatial metadata
30+
;; such as coordinate reference / projection information, Geographic extent,
31+
;; pixel resolution and so on.
32+
;; **Cloud Optimized GeoTIFFs (COGs)** are geoTIFFs arranged for efficient access over HTTP. This
33+
;; is achieved with tiled layouts allowing for partial access (using HTTP range requests),
34+
;; and resolution pyramids. This allows for fetching only the portion of the COG required.
35+
;;
36+
;; More details on the format at: [cogeo.org](https://www.cogeo.org)
37+
;;
38+
;; #### How to interact with COGs with Clojure
39+
;; Many libraries for creation and manipulation of GeoTIFF data in other languages rely on
40+
;; the [GDAL binary](https://gdal.org).
41+
;; This is performant and battle-tested but has a large footprint and is vulnerable to
42+
;; version mismatches between the client language and GDAL.
43+
;;
44+
;; Some pure language implementations (that do not depend on GDAL) exist, such as
45+
;; [geotiff.js](https://geotiffjs.github.io/) for JavaScript and [GeoTools](https://geotools.org/) in Java.
46+
;; For the sake of
47+
;; simplicity we recommend using interop with pure language GeoTIFF library where possible.
48+
;;
49+
;; ##### TODOs:
50+
;; - GeoTools / Java interop example
51+
;; - geotiff.js / JavaScript interop example
52+
;; - Example of a containerized Python bindings with GDAL setup.
53+
;;
54+
;;
55+
;; #### NetCDF
56+
;; NetCDF is a format for metadata enhanced, compressed, multidimensional arrays.
57+
;; Often used for weather, climate, remote sensing and
58+
;; oceanographic data.
59+
;; Both [GeoTools](https://geotools.org/) and [NetCDF-Java](https://docs.unidata.ucar.edu/netcdf-java) are acceptable ways to to handle and create
60+
;; netCDF files in Java-hosted Clojure. In JS we can read NetCDF files with
61+
;; [netcdfjs](https://github.com/cheminfo/netcdfjs)
62+
;; ##### TODOs:
63+
;; - GeoTools interop example
64+
;; - NetCDF-Java example
65+
;; - Which one is best?
66+
;; - netcdfjs example (maybe interactive with scittle/react/clay)
67+
;;
68+
;; #### HDF
69+
;; Another widely used multidimensional array format in the scientific GIS world.
70+
;;
71+
;; [HDF in clojure](https://scicloj.github.io/clojure-data-scrapbook/projects/data-formats/hdf/index.html)
72+
;; #### Zarr
73+
;; ##### TODO:
74+
;; - how to read in Clojure
75+
;;
76+
;; ### Vector
77+
;; #### GeoJSON
78+
;; - json->edn
79+
;; - spec validation for geoJSON
80+
;; - review [FarmLogs/geojson](https://github.com/FarmLogs/geojson)
81+
;; #### Shapefile
82+
;; - [ovid](https://github.com/willcohen/ovid)
83+
;; #### Notes:
84+
;; Maybe [Factual/geo](https://github.com/Factual/geo) is good for some of this?
85+
;;
86+
;; ## Cloud Optimized
87+
;; ### PMTiles
88+
;; - Reading: Timeverse PMtiles (Java interop)
89+
;; - Creation: CLI / Babashka?
90+
;; ### Notes:
91+
;; [The Cloud Native Geo guide](https://guide.cloudnativegeo.org/) may be a useful starting
92+
;; pount for some of this.
93+
;;
94+
^:kindly/hide-code
95+
(kind/image {:src "cogeo-formats-table.png"
96+
:style {:width "30em"}})
97+
;; *Image from https:/guide.cloudnativegeo.org*
98+
;;
99+
;; ## Image processing
100+
;; Routing / Network analysis
101+
;; ### Some articles to review
102+
;; - [GTFS](https://en.wikipedia.org/wiki/GTFS)
103+
;; - [MATSim](https://github.com/matsim-org)
104+
;;
105+
;; ## Spatial DBs
106+
;; - postGIS
107+
;; - MBTiles / sqllite
108+
;;
109+
;; ## Spatial reference systems
110+
;; ### Coordinate system conversions
111+
;; - [Coordinate Systems article](https://mgimond.github.io/Spatial/chp09_0.html) maybe a good starting point for a Clojure oriented article on the same.
112+
113+
;; ### H3
114+
;; - again, [Factual/geo](https://github.com/factual/geo) may be a good starting point.
115+
;;
116+
;; ## Map widgets
117+
;; - Leaflet
118+
;; - Openlayers
119+
;; - Kepler.gl
120+
;;
121+
;; ## Geo-coding / Addresses
122+
;;
123+
;; ## Remote sensing
124+
;; ### Satellite imagery
125+
;; - Sentinel2
126+
;; - Planet
127+
;; - Google Earth Engine
128+
;; ## Tile Servers
129+
;;
130+
;; # Python integration (libpython-clj)
131+
;; A lot of GIS work is done in Python. Creating documentation, tools, containers to
132+
;; make it quick/easy/simple to interact with Python from Clojure
133+
;; will make doing GIS work in Clojure more palatable.
134+
;;
135+
;; # Template Projects
136+
;; Some [deps-new](https://github.com/seancorfield/deps-new) or similar templates for
137+
;; getting started on GIS projects.
138+
;;
139+
;; # Existing articles for Clojure GIS
140+
;; Perhaps we can link to, rework or use some existing work including:
141+
;; - [Seattle Parks - Scicloj](https://scicloj.github.io/clojure-data-scrapbook/projects/geography/seattle-parks/index.html)
142+
;; - [Chicago Bikes - Scicloj](https://scicloj.github.io/clojure-data-scrapbook/projects/geography/chicago-bikes/index.html)
143+
;; - [Remote sensing water - Civitas](https://clojurecivitas.github.io/earth_observation/waterquality.html)
144+
;; - [Cesium - Civitas](https://clojurecivitas.github.io/cesium/geovis.html)
145+
;; - [Clojure Maps Examples](https://github.com/joannecheng/clojure-map-examples)
146+
^:kindly/hide-code
147+
(comment
148+
,
149+
(require '[scicloj.clay.v2.api :as clay])
150+
151+
(clay/make! {:source-path "src/gis/roadmap.clj"
152+
:live-reload :toggle}))
153+

0 commit comments

Comments
 (0)