JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 26
  • Score
    100M100P100Q47065F
  • License MIT

WebAssembly version of MapServer with a dispatchRequest interface

Package Exports

  • mapserver-wasm
  • mapserver-wasm/dist/mapserver.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mapserver-wasm) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

mapserver-wasm

MapServer WFS and WMS inside Web Worker
Build environment to compile MapServer with Emscripten to a WebAssembly package

Features

  • Use MapServer inside your browser
  • Expose WFS 2.0.0 and WMS 1.3.0 services
  • Read vector and raster data from GeoPackage

ThirdParty Dependencies

Name Version Home page License Status
MapServer 8.2.2 https://mapserver.org/ MIT
GDAL/OGR 3.9.2 https://gdal.org/ MIT/X style
PROJ 9.5.0 https://proj.org/ MIT/X style
GEOS 3.13.0 https://libgeos.org/ LGPL-2.1
SQLite 3.46.1 https://www.sqlite.org/ Public Domain
Libxml2 2.13.4 http://xmlsoft.org/ MIT

✅ up-to-date | 🚧 needs-update | Last update check 24.09.2024

Getting started

Installation

To download mapserver-wasm run:

npm install mapserver-wasm
# or
yarn add mapserver-wasm

Usage

import MapServer from 'mapserver-wasm'

MapServer().then(async Module => {
  const WORKERFS = Module.FS.filesystems['WORKERFS']
  const MEMFS = Module.FS.filesystems['MEMFS']

  Module.FS.mkdir('/ms')
  Module.FS.mkdir('/proj')

  try {
    WORKERFS.node_ops.mknod = MEMFS.node_ops.mknod // GDAL needs temporary file support
    Module.FS.mount(WORKERFS, {
      blobs: [
        { name: 'test.gpkg', data: /* gpkg blob */ }
      ]
    }, '/ms')
    Module.FS.writeFile('/proj/epsg', crsDefinitions.map(({ crs, definition }) => {
      return `<${crs.replace('EPSG:', '')}>${definition}<>`
    }).join('\n'), { flags: 'w+' })
    // ...
    resolve()
  } catch (e) {
    reject(e)
  }
})

Please look into the demo project or into the test folder for further information.

Development

Required Web APIs

WebAssembly 1.0 | WebAssembly Exception Handling

Checkout

git clone --recurse-submodules git@github.com:codeart1st/mapserver-wasm.git
git clone git@github.com:codeart1st/mapserver-wasm.git
git submodule update --init --recursive

Update

git pull --recurse-submodules

Compilation

Start the build container with the following command to ensure the filesystem permissions for newly created files are correct.

docker run -it --rm -v $(pwd):/src -v /etc/passwd:/etc/passwd --user "$(id -u):$(id -g)" --name mapserver-wasm emscripten/emsdk:3.1.67 bash

And execute in a second terminal the following command to install the missing build depedencies as root user.

docker exec --user root mapserver-wasm bash -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y tcl automake pkgconf libtool brotli"

After that execute all job script commands described in .github/workflows/ci.yml inside the interactive build container. It can be helpful to set the GITHUB_WORKSPACE environment variable beforehand.

GITHUB_WORKSPACE=/src

Test

Tests will be executed with Vitest framework. Test execution needs compilation of mapserver-wasm first.

npm ci && npm test

Logging

To avoid debugging in first place it can be helpful to activate file logging for MapServer and GDAL.

MAP
  DEBUG 5
  CONFIG "MS_ERRORFILE" "error.log"
  CONFIG "CPL_LOG" "error.log"
  CONFIG "CPL_DEBUG" "ON"
  CONFIG "CPL_LOG_ERRORS" "ON"
  CONFIG "CPL_TIMESTAMP" "ON"
END

Debugging

Debugging in DWARF format has initial support in Chrome.