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
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.4.0 | https://mapserver.org/ | MIT | ✅ |
| GDAL/OGR | 3.10.1 | https://gdal.org/ | MIT/X style | ✅ |
| PROJ | 9.5.1 | https://proj.org/ | MIT/X style | ✅ |
| GEOS | 3.13.0 | https://libgeos.org/ | LGPL-2.1 | ✅ |
| SQLite | 3.48.0 | https://www.sqlite.org/ | Public Domain | ✅ |
| Libxml2 | 2.13.5 | http://xmlsoft.org/ | MIT | ✅ |
✅ up-to-date | 🚧 needs-update | Last update check 17.01.2025
Getting started
Installation
To download mapserver-wasm run:
npm install mapserver-wasm
# or
yarn add mapserver-wasmUsage
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.gitgit clone git@github.com:codeart1st/mapserver-wasm.git
git submodule update --init --recursiveUpdate
git pull --recurse-submodulesCompilation
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.68 bashAnd 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 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=/srcTest
Tests will be executed with Vitest framework. Test execution needs compilation of mapserver-wasm first.
npm ci && npm testLogging
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