User script for Waze Map Editor. Create additional panel with buttons for change Place geometry in one click.
npm install
npm run build # one-off build → dist/WME-E40.user.js
npm run watch # rebuild on changesSource is written in TypeScript under src/, built with Rollup into a single IIFE at dist/WME-E40.user.js.
src/
├── meta.ts # userscript header (comment block)
├── style.css # plain CSS
├── globals.d.ts # WME runtime globals
├── translations.ts # i18n (en, uk, ru)
├── types.ts # road type constants
├── settings.ts # default settings
├── layers.ts # navigation vector layer config
├── buttons.ts # button definitions (place, point, tab)
├── geo-utils.ts # GeoUtils — spherical geometry math
├── geometry.ts # polygon creation and manipulation
├── e40.ts # E40 class (main logic)
├── helpers.ts # standalone wrapper functions
└── index.ts # bootstrap entry point
| Module | Responsibility |
|---|---|
translations.ts |
NAME, REQUIRED_LEVEL, TRANSLATION (3 languages) |
types.ts |
Road type numeric constants (TYPES.street, TYPES.freeway, etc.) |
settings.ts |
Default options (navigation point visibility) |
layers.ts |
Layer style rules for navigation vector visualization |
buttons.ts |
Three button sets: getPlaceButtons() (polygon tools), getPointButtons() (point-to-shape), getTabButtons() (batch operations for rank 3+) |
geo-utils.ts |
GeoUtils class — bearing, angle, distance, intersection calculations on the sphere |
geometry.ts |
createCirclePolygon, createSquarePolygon, simplifyPolygon, normalizeRightAngles |
e40.ts |
E40 class — UI panels, keyboard shortcuts, layer management, all geometry operations |
helpers.ts |
Thin wrappers that delegate to the E40 instance (used by button callbacks) |
index.ts |
Bootstrap — registers translations/CSS, creates E40 instance on bootstrap.wme |
| Shortcut | Description |
|---|---|
Shift+1 |
Smooth selected POI(s) |
Shift+2 |
Orthogonalize selected POI(s) |
None |
Simplify selected POI(s) (tolerance = 0.00001) |
None |
Simplify selected POI(s) (tolerance = 0.00003) |
None |
Simplify selected POI(s) (tolerance = 0.00005) |
None |
Copy and paste selected POI(s) |
Shift+3 |
Enable Rotation for selected Place |
Shift+4 |
Enable Scale for selected Place |
Shift+5 |
Scale selected POI(s) to 500m² |
Shift+6 |
Scale selected POI(s) to 650m² |
Shift+7 |
Scale selected POI(s) to 650m² if the square lower than 650m² |
Author homepage: https://anton.shevchuk.name/
Author pet projects: https://hohli.com/
Support author: https://donate.hohli.com/
Script homepage: https://github.com/AntonShevchuk/wme-e40/
GreasyFork: https://greasyfork.org/uk/scripts/388271-wme-e40-geometry



