|
1 | 1 | ^{:kindly/hide-code true |
2 | 2 | :clay {:title "GIS roadmap" |
3 | 3 | :quarto {:author :luke-zeitlin |
4 | | - :type :collaboration |
| 4 | + :type :post |
5 | 5 | :date "2025-10-23" |
6 | 6 | :draft true |
7 | 7 | :category :gis |
|
15 | 15 | ;; At present this document can serve as a location to add notes, todos and thoughts. |
16 | 16 | ;; Some future version of it may serve as a landing page. |
17 | 17 | ;; # 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... |
19 | 20 | ;; - Clojure's ability to interact with multiple host environments (Java, JS, Python, etc). |
20 | 21 | ;; - Same language on the front and backend |
21 | 22 | ;; - Ergonomic data workflow |
22 | 23 | ;; - Interactive development |
23 | 24 | ;; # GIS Task Categories |
24 | 25 | ;; ## Image formats |
25 | 26 | ;; ### 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 | +;; |
28 | 54 | ;; |
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) |
33 | 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 | +;; |
34 | 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 |
35 | 75 | ;; |
36 | 76 | ;; ### Vector |
37 | 77 | ;; #### GeoJSON |
|
43 | 83 | ;; #### Notes: |
44 | 84 | ;; Maybe [Factual/geo](https://github.com/Factual/geo) is good for some of this? |
45 | 85 | ;; |
46 | | -;; ## Serverless |
| 86 | +;; ## Cloud Optimized |
47 | 87 | ;; ### COG |
48 | 88 | ;; See GeoTIFF |
| 89 | +;; ### ZARR |
49 | 90 | ;; ### PMTiles |
50 | 91 | ;; - Reading: Timeverse PMtiles (Java interop) |
51 | 92 | ;; - Creation: CLI / Babashka? |
52 | 93 | ;; ### Notes: |
53 | 94 | ;; [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* |
55 | 101 | ;; |
56 | 102 | ;; ## Image processing |
57 | 103 | ;; Routing / Network analysis |
|
65 | 111 | ;; |
66 | 112 | ;; ## Spatial reference systems |
67 | 113 | ;; ### 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. |
69 | 115 |
|
70 | 116 | ;; ### H3 |
71 | 117 | ;; - again, [Factual/geo](https://github.com/factual/geo) may be a good starting point. |
|
0 commit comments