Skip to content

Commit 0b829ca

Browse files
author
Luke Zeitlin
committed
more details on several raster formats. More todos
1 parent fea9a1d commit 0b829ca

File tree

1 file changed

+57
-11
lines changed

1 file changed

+57
-11
lines changed

src/gis/roadmap.clj

Lines changed: 57 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
^{:kindly/hide-code true
22
:clay {:title "GIS roadmap"
33
:quarto {:author :luke-zeitlin
4-
:type :collaboration
4+
:type :post
55
:date "2025-10-23"
66
:draft true
77
:category :gis
@@ -15,23 +15,63 @@
1515
;; At present this document can serve as a location to add notes, todos and thoughts.
1616
;; Some future version of it may serve as a landing page.
1717
;; # Why Clojure?
18-
;; A few words about why clojure is good for GIS...
18+
;; ## TODO:
19+
;; A few words about why Clojure is good for GIS...
1920
;; - Clojure's ability to interact with multiple host environments (Java, JS, Python, etc).
2021
;; - Same language on the front and backend
2122
;; - Ergonomic data workflow
2223
;; - Interactive development
2324
;; # GIS Task Categories
2425
;; ## Image formats
2526
;; ### Raster
26-
;; #### GeoTIFF
27-
;; A guide for interacting with this format. Read, write, display.
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+
;;
2854
;;
29-
;; - Interop Java ([GeoTools example](https://gist.github.com/the80srobot/3042990))
30-
;; - Python bindings (rasterio)
31-
;; - Thought: pathway to a pure clojure library for geotiffs (whithout GDAL dep)?
32-
;; - display / frontend (openlayers, leaflet, other)
3355
;; #### 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+
;;
3468
;; #### 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
3575
;;
3676
;; ### Vector
3777
;; #### GeoJSON
@@ -43,15 +83,21 @@
4383
;; #### Notes:
4484
;; Maybe [Factual/geo](https://github.com/Factual/geo) is good for some of this?
4585
;;
46-
;; ## Serverless
86+
;; ## Cloud Optimized
4787
;; ### COG
4888
;; See GeoTIFF
89+
;; ### ZARR
4990
;; ### PMTiles
5091
;; - Reading: Timeverse PMtiles (Java interop)
5192
;; - Creation: CLI / Babashka?
5293
;; ### Notes:
5394
;; [The Cloud Native Geo guide](https://guide.cloudnativegeo.org/) may be a useful starting
54-
;; pount for some of this
95+
;; pount for some of this.
96+
;;
97+
^:kindly/hide-code
98+
(kind/image {:src "cogeo-formats-table.png"
99+
:style {:width "30em"}})
100+
;; *Image from https:/guide.cloudnativegeo.org*
55101
;;
56102
;; ## Image processing
57103
;; Routing / Network analysis
@@ -65,7 +111,7 @@
65111
;;
66112
;; ## Spatial reference systems
67113
;; ### Coordinate system conversions
68-
;; - [Coordinate Systems article](https://mgimond.github.io/Spatial/chp09_0.html) maybe a good starting point for a clojure oriented article on the same.
114+
;; - [Coordinate Systems article](https://mgimond.github.io/Spatial/chp09_0.html) maybe a good starting point for a Clojure oriented article on the same.
69115

70116
;; ### H3
71117
;; - again, [Factual/geo](https://github.com/factual/geo) may be a good starting point.

0 commit comments

Comments
 (0)