/mapnik-clj

Primary LanguageClojure

mapnik-clj

A Clojure client library for Mapnik using Coffi for Foreign Function Interface.

Prerequisites

  • JDK 22+ (required for Foreign Function & Memory API)
  • Mapnik 3.x+ installed on your system
  • Clojure CLI tools

Installation

Add to your deps.edn:

{:deps {mapnik-clj/mapnik-clj {:local/root "/path/to/mapnik-clj"}}}

Usage

Basic Example

(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))))

Loading from XML

(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))))

API Reference

Core Functions

  • register-datasources - Register Mapnik datasource plugins
  • register-fonts - Register font directory

Map Functions

  • create-map - Create a new map with dimensions
  • load-map! - Load map configuration from XML
  • zoom-all! - Zoom to fit all layers
  • zoom-to-box! - Zoom to specific bounds
  • set-background! - Set map background color
  • set-srs! - Set spatial reference system

Datasource Functions

  • shapefile-datasource - Create shapefile datasource
  • postgis-datasource - Create PostGIS datasource
  • geojson-datasource - Create GeoJSON datasource

Layer Functions

  • create-layer - Create a new layer
  • set-datasource! - Attach datasource to layer
  • add-style! - Add style to layer
  • add-layer-to-map! - Add layer to map

Rendering Functions

  • render-map - Render map to image buffer
  • save-to-file! - Save image to file
  • render-to-file! - Convenience function for direct file rendering

Running

Remember to enable native access:

clj -M:dev -J--enable-native-access=ALL-UNNAMED

License

[Your license here]