WME E40 Geometry

Anton Shevchuk
2019-08-07T20:01:30Z

A script that allows aligning, scaling, and copying POI geometry

WME 🇺🇦 E40

User script for Waze Map Editor. Create additional panel with buttons for change Place geometry in one click.

Development

Install & Build

npm install
npm run build       # one-off build → dist/WME-E40.user.js
npm run watch       # rebuild on changes

Project Structure

Source 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 Guide

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

Shortcuts

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²

Links

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