A Web Mapping Application using Vue 3, Vite, OpenLayers & GeoServer (WFS)
This project is a web-based map application that displays public toilets in the city of Kiel. The toilet locations are extracted from OpenStreetMap (OSM), published via GeoServer as a WFS layer, and rendered on an interactive map using OpenLayers.
Users can:
- View all public toilet locations in Kiel
- Click a toilet to see detailed attributes
- Filter toilets that are wheelchair-accessible
- Use custom floating map controls (Zoom In, Zoom Out, Recenter)
- Navigate a responsive and highly accessible interface
This application was developed as part of the Geographical Web Development course at HAW Kiel.
After building the project, you can preview the production build locally:
npm run previewThe application will be available at:
http://localhost:4173
- Built with OpenLayers
- Custom zoom controls (Google Maps style)
- Centered on Kiel, Germany
- Served through GeoServer WFS
- Efficient
bboxloading strategy - Popup shows toilet attributes:
nameamenitywheelchairaccessibility
- Filter toilets with
wheelchair = "yes" - Other features are hidden dynamically.
- A clean, responsive overlay shows toilet details when clicking on features.
- Lighthouse scores:
- Performance: 100
- Accessibility: 100
- Best Practices: 96
- SEO: 91
public-toilet-finder/
โ
โโโ src/
โ โโโ assets/
โ โ โโโ toilet-icon.png
โ โโโ components/
โ โ โโโ MapView.vue
โ โโโ App.vue
โ โโโ main.ts
โ
โโโ public/
โโโ vite.config.ts
โโโ package.json
โโโ README.md
| Category | Technology |
|---|---|
| Frontend Framework | Vue 3 (Composition API) |
| Build Tool | Vite |
| Mapping Library | OpenLayers |
| GIS Backend | GeoServer WFS |
| Data Format | GeoJSON |
| Styling | Custom CSS |
| Language | TypeScript |
To replicate the backend setup:
- Workspace:
ptf - Data Store: Upload the OSM-derived toilet dataset.
- Layer Name:
ptf:toilets_kiel - Enable WFS:
- Version:
1.1.0 - Output format:
application/json - SRS:
EPSG:3857
- Version:
WFS Endpoint Used by the App:
/geoserver/ptf/ows?
service=WFS&
version=1.1.0&
request=GetFeature&
typename=ptf:toilets_kiel&
outputFormat=application/json&
srsName=EPSG:3857&
bbox={extent},EPSG:3857git clone https://github.com/coderfeye13/public-toilet-finder
cd public-toilet-findernpm installnpm run devRuns at: http://localhost:5173
To build the app for production:
npm run buildTo preview the build:
npm run previewPreview runs at: http://localhost:4173
| Metric | Score |
|---|---|
| Performance | ๐ข 100 |
| Accessibility | ๐ข 100 |
| Best Practices | ๐ข 96 |
| SEO | ๐ข 91 |
A full HTML Lighthouse report is included in the project export.
- Optimized JS bundle from Vite
- Very fast FCP & LCP
- Zero blocking JS
- High contrast accessible controls
- Keyboard-friendly interface
- โ Keyboard navigation supported
- โ Buttons include ARIA labels
- โ Color contrast meets WCAG standards
- โ Popup readable with assistive technology
- โ Mobile-friendly responsive layout
- Chrome
- Firefox
- Popup content loads correctly.
- Zoom controls work seamlessly with mouse & keyboard.
- Wheelchair filter updates icons instantly.
- No console errors in production build.
- UI tested in Chrome DevTools responsive mode.
- Buttons and popup scale correctly on smaller screens.
- Nearest public toilet routing using shortest path algorithms
- Marker clustering for dense urban areas
- WFS-T support for user-driven data updates
- Advanced filters (price, opening hours, gender-specific toilets)
- Progressive Web App (PWA) support for offline usage
- Real-time user feedback and ratings
This project is licensed under the MIT License.
- OpenStreetMap Contributors
- GeoServer
- OpenLayers
- FH Kiel GIS/Web Mapping module
