mapserver-wasm
v2.2.0
Published
WebAssembly version of MapServer with a dispatchRequest interface
Downloads
25
Maintainers
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.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 [email protected]:codeart1st/mapserver-wasm.git
git clone [email protected]: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