# mapnik

> Tile rendering library for node

Latest version **4.5.9** (published 2021-10-28) · BSD-3-Clause license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install mapnik
pnpm add mapnik
yarn add mapnik
bun add mapnik
```

Provides the commands `mapnik-index.js`, `mapnik-render.js`, `mapnik-inspect.js`, `mapnik-shapeindex.js`.

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 4.5.9 |
| Published | 2021-10-28 |
| First published | 2011-01-27 |
| Weekly downloads | 0 |
| License | BSD-3-Clause |
| TypeScript types | separate (@types/mapnik) |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 1.4 MB |
| Known vulnerabilities | 0 |
| Install scripts | yes |
| GitHub stars | 545 |
| Author | Dane Springmeyer |
| Maintainers | artem, springmeyer, gretacb, kkaefer, jrpruit1, flippmoke, bergwerkgis, yhahn, mapsam |
| Keywords | map, graphics, canvas, tile, mapnik, carto |

## Links

- npm: https://www.npmjs.com/package/mapnik
- Repository: https://github.com/mapnik/node-mapnik
- Homepage: http://mapnik.org
- Issues: http://github.com/mapnik/node-mapnik/issues
- npm.io page: https://npm.io/package/mapnik

## Dependencies (3)

- [node-addon-api](https://npm.io/package/node-addon-api.md) ~3.1.x
- [mapnik-vector-tile](https://npm.io/package/mapnik-vector-tile.md) 3.0.1
- [@mapbox/node-pre-gyp](https://npm.io/package/@mapbox/node-pre-gyp.md) ^1.x

## Alternatives

- [exif-parser](https://npm.io/package/exif-parser.md) — 3.8M weekly downloads
- [vite-plugin-compression](https://npm.io/package/vite-plugin-compression.md) — 569.5K weekly downloads
- [pica](https://npm.io/package/pica.md) — 442.4K weekly downloads
- [@reportportal/client-javascript](https://npm.io/package/@reportportal/client-javascript.md) — 408.8K weekly downloads
- [@tldraw/state](https://npm.io/package/@tldraw/state.md) — 316.0K weekly downloads

## Recent versions

- 4.5.9 (latest) — 2021-10-28
- 4.5.3-imagetest.1 (dev) — 2020-10-15
- 4.5.9-dev2 — 2021-10-18
- 4.5.9-dev — 2021-10-08
- 4.5.8 — 2021-04-21
- 4.5.6 — 2021-02-18
- 4.5.5 — 2020-12-10
- 4.5.3-imagetest.2 — 2020-10-23
- 4.5.4 — 2020-10-20
- 4.5.3 — 2020-10-09
- 4.5.2 — 2020-08-11
- 4.5.1 — 2020-08-07
- 4.5.0 — 2020-08-05
- 4.4.0-napi.1 — 2020-08-04
- 4.4.0 — 2020-01-31
- … 168 more at https://npm.io/package/mapnik/versions

## README

# node-mapnik

Bindings to [Mapnik](http://mapnik.org) for [node](http://nodejs.org).

[![NPM](https://nodei.co/npm/mapnik.png?downloads=true&downloadRank=true)](https://nodei.co/npm/mapnik/)

[![Build Status](https://secure.travis-ci.org/mapnik/node-mapnik.png)](https://travis-ci.org/mapnik/node-mapnik)
[![Coverage Status](https://coveralls.io/repos/mapnik/node-mapnik/badge.svg)](https://coveralls.io/r/mapnik/node-mapnik)

## Usage

Render a map from a stylesheet:

```js
var mapnik = require('mapnik');
var fs = require('fs');

// register fonts and datasource plugins
mapnik.register_default_fonts();
mapnik.register_default_input_plugins();

var map = new mapnik.Map(256, 256);
map.load('./test/stylesheet.xml', function(err,map) {
    if (err) throw err;
    map.zoomAll();
    var im = new mapnik.Image(256, 256);
    map.render(im, function(err,im) {
      if (err) throw err;
      im.encode('png', function(err,buffer) {
          if (err) throw err;
          fs.writeFile('map.png',buffer, function(err) {
              if (err) throw err;
              console.log('saved map image to map.png');
          });
      });
    });
});
```

Convert a jpeg image to a png:

```js
var mapnik = require('mapnik');
new mapnik.Image.open('input.jpg').save('output.png');
```

Convert a shapefile to GeoJSON:

```js
var mapnik = require('mapnik');
mapnik.register_datasource(path.join(mapnik.settings.paths.input_plugins,'shape.input'));
var ds = new mapnik.Datasource({type:'shape',file:'test/data/world_merc.shp'});
var featureset = ds.featureset()
var geojson = {
  "type": "FeatureCollection",
  "features": [
  ]
}
var feat = featureset.next();
while (feat) {
    geojson.features.push(JSON.parse(feat.toJSON()));
    feat = featureset.next();
}
fs.writeFileSync("output.geojson",JSON.stringify(geojson,null,2));
```

For more sample code see [the tests](./test) and [sample code](https://github.com/mapnik/node-mapnik-sample-code).

## Requirements

Starting from `v4.5.0`, `node-mapnik` module is published as "universal" binaries using [node-addon-api](https://github.com/nodejs/node-addon-api)
All Node.js versions >= 10 are known to work, consult N-API documentation for more details: https://nodejs.org/dist/latest/docs/api/n-api.html#n_api_node_api_version_matrix

An installation error like below indicates your system does not have a modern enough libstdc++/gcc-base toolchain:

```
Error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version GLIBCXX_3.4.21 not found (required by /node_modules/mapnik/lib/binding/mapnik.node)
```

If you are running Ubuntu older than 16.04 you can easily upgrade your libstdc++ version like:

```
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update -y
sudo apt-get install -y libstdc++-6-dev
```

To upgrade libstdc++ on travis (without sudo) you can do:

```yaml
language: cpp

sudo: false

addons:
  apt:
    sources:
     - ubuntu-toolchain-r-test
    packages:
     - libstdc++-6-dev # upgrade libstdc++
```


## Installing
### With npm
Just do:

    npm install mapnik

Note: This will install the latest node-mapnik 4.5.x series, which is recommended.

## Source Build

There are two ways to build from source. These work on both OS X and Linux:

 - A) Against a binary package from Mapnik from [mason](https://github.com/mapbox/mason)
 - B) Against an existing version of Mapnik on your system

Using `A)` is recommended. You do not need to have Mapnik installed already, so this is the easiest and most predictable approach. When you use the route a binary package of Mapnik is downloaded dynamically from [mason](https://github.com/mapbox/mason).

You can invoke this method simply by running:

  `make release`

Or, for debug builds:

  `make debug`

If you want to do a full rebuild do:

  `make distclean`

And then re-run the build:

  `make release`

Using `B)` is also possible, if you would like to build node-mapnik against an external, already installed Mapnik version.

In this case you need to have a Mapnik version installed that is at least as recent as the `mapnik_version` property in the [`package.json`](./package.json) for the branch of node-mapnik you want to build.

And you need to have the `mapnik-config` program is available and on your `${PATH}`.

Then run (within the cloned `node-mapnik` directory:

    make release_base
    
or
    
    make debug_base
    
for release and debug builds, respectively.

#### Note on SSE:

By default node mapnik is built with SSE support. If you are building on a platform that is not `x86_64` you will need to disable feature by setting the environment variable `SSE_MATH=false`.

```
SSE_MATH=false make
```

### Building against Mapnik 3.0.x

The `master` branch of node-mapnik is not compatible with `3.0.x` series of Mapnik. To build against Mapnik 3.0.x, use [`v3.0.x`](https://github.com/mapnik/node-mapnik/tree/v3.0.x) branch.


## Using node-mapnik from your node app

To require node-mapnik as a dependency of another package put in your package.json:

    "dependencies"  : { "mapnik":"*" } // replace * with a given semver version string

## Tests

To run the tests do:
  
    npm test

## License

BSD, see LICENSE.txt

---
_Source: https://npm.io/package/mapnik · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
