Version: 1.4.0 | QGIS: 3.0+
QGIS plugin to export vector layers as interactive HTML maps with QGIS symbology preservation.
Click on the Universal Map2web icon in the QGIS toolbar.
| Action | Command |
|---|---|
| Zoom | Scroll / + / - |
| Pan | Click-drag |
| View attributes | Click on feature |
| Open attribute table | Click the table icon before the layer name |
| Zoom to layer | Click the magnifier icon before the layer name |
| Reset view | Double-click on map |
In the map sidebar: select layer → field → operator → enter value → Apply.
Available operators: = ≠ contains starts with > < ≥ ≤
For layers already connected to PostgreSQL/PostGIS in QGIS, enable "Load PostGIS layers dynamically from PostgreSQL (instead of a static export)" in the dialog.
Each vector layer (shapefile, WFS or PostgreSQL) has a table icon in front of its name in the map legend. Click it to open the attribute table in a floating window.
;, UTF-8 with BOM for ExcelGetFeature, JSON) directly from the server at
each load. No PHP backend is needed. Symbology, popups, filtering and the attribute table work as for any
vector layer.GetFeatureInfo) and shows the result in a popup.The connection settings are read from the layer already configured in QGIS: nothing to re-enter.
application/json output format must be available (default in GeoServer).
The exported map is opened from another origin than your GeoServer (your website, or
http://localhost:PORT with the built-in local server). The browser only lets the page read GeoServer
responses if GeoServer sends the Access-Control-Allow-Origin header.
| Service | Without CORS |
|---|---|
| WFS | The layer cannot be loaded ("blocked by CORS" message in the legend) |
| WMS | Tiles still display, but click-to-query (GetFeatureInfo as JSON) is blocked and falls back to an HTML frame |
Option A – Web Administration (recent GeoServer versions): enable the CORS setting in the GeoServer Web Administration interface (see "Enable CORS" in the GeoServer documentation), then restart GeoServer.
Option B – web.xml (all versions): edit
webapps/geoserver/WEB-INF/web.xml, uncomment (or add) the CORS filter and its
filter-mapping, then restart.
Standalone / binary installer (Jetty):
<filter> <filter-name>cross-origin</filter-name> <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class> </filter> <filter-mapping> <filter-name>cross-origin</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
WAR deployed in Tomcat:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
* allows any website: in production, replace it with your own site(s), e.g.
https://maps.example.orgcurl -I -H "Origin: https://maps.example.org" "https://your-geoserver/geoserver/ows?service=WFS&request=GetCapabilities"
must return an Access-Control-Allow-Origin header| Component | Requirement |
|---|---|
| QGIS | 3.0 or higher |
| Browser | Chrome 90+, Firefox 88+, Edge 90+ |
| Memory | 4 GB RAM minimum |
| Internet | Required for basemaps and libraries |
Jean-Baptiste KIBORA
📧 Email: jeanbaptiste.kibora@tic.gov.bf
📱 Phone: +226 64 41 25 14
Universal Map2web v1.4.0 | © kibora B. Jean-Baptiste | November 2026