A Clojure client library for Mapnik using Coffi for Foreign Function Interface.
- JDK 22+ (required for Foreign Function & Memory API)
- Mapnik 3.x+ installed on your system
- Clojure CLI tools
Add to your deps.edn:
{:deps {mapnik-clj/mapnik-clj {:local/root "/path/to/mapnik-clj"}}}(require '[mapnik-clj.core :as mapnik]
'[mapnik-clj.map :as m]
'[mapnik-clj.datasource :as ds]
'[mapnik-clj.layer :as layer]
'[mapnik-clj.render :as render])
;; Initialize Mapnik
(mapnik/register-datasources "/usr/local/lib/mapnik/input")
(mapnik/register-fonts "/usr/share/fonts/truetype")
;; Create and render a map
(let [my-map (m/create-map 800 600)
datasource (ds/shapefile-datasource "data/world.shp")
lyr (layer/create-layer "World")]
(try
;; Configure map
(-> my-map
(m/set-background! {:r 255 :g 255 :b 255})
(m/set-srs! "+proj=longlat +datum=WGS84"))
;; Configure layer
(-> lyr
(layer/set-datasource! datasource)
(layer/add-style! "default-style"))
;; Add layer and render
(layer/add-layer-to-map! my-map lyr)
(m/zoom-all! my-map)
(render/render-to-file! my-map "world.png")
(finally
(ds/destroy-datasource datasource)
(layer/destroy-layer lyr)
(m/destroy-map my-map))))(let [my-map (m/create-map 800 600)]
(try
(m/load-map! my-map "map-config.xml")
(m/zoom-all! my-map)
(render/render-to-file! my-map "output.png")
(finally
(m/destroy-map my-map))))register-datasources- Register Mapnik datasource pluginsregister-fonts- Register font directory
create-map- Create a new map with dimensionsload-map!- Load map configuration from XMLzoom-all!- Zoom to fit all layerszoom-to-box!- Zoom to specific boundsset-background!- Set map background colorset-srs!- Set spatial reference system
shapefile-datasource- Create shapefile datasourcepostgis-datasource- Create PostGIS datasourcegeojson-datasource- Create GeoJSON datasource
create-layer- Create a new layerset-datasource!- Attach datasource to layeradd-style!- Add style to layeradd-layer-to-map!- Add layer to map
render-map- Render map to image buffersave-to-file!- Save image to filerender-to-file!- Convenience function for direct file rendering
Remember to enable native access:
clj -M:dev -J--enable-native-access=ALL-UNNAMED[Your license here]