decode() / encode() del algoritmo Google Polyline (precision 5 y 6),
sin dependencias runtime. Reemplazo minimalista y 100 % compatible de
@mapbox/polyline para el
ecosistema TRANSCEND de Cargoffer.
- 🔬 Mismo algoritmo bit a bit que
@mapbox/polyline@1.2.1(solo las dos funciones que usa TRANSCEND:decodeyencode). - 🧪 Bateria de compatibilidad: vectores oficiales de la suite de
@mapbox/polyline+ vector real de Valhalla + test diferencial contra el paquete original (fuzz determinista de miles de polylines). - 📦 Build dual ESM + CJS con tipos TypeScript (
exportsmap). - ⚖️ Licencia MIT. Cero dependencias runtime.
🚛 Hecho para TRANSCEND — calculo de rutas, costes y tiempos para transporte por carretera en Europa: transcend.cargoffer.com
npm install @cargoffer/polylineimport polyline from '@cargoffer/polyline';
// o: import * as polyline from '@cargoffer/polyline';
// o: import { decode, encode } from '@cargoffer/polyline';
// decode: string polyline -> [lat, lng][]
const coords = polyline.decode('_p~iF~ps|U_ulLnnqC_mqNvxq`@');
// => [[38.5, -120.2], [40.7, -120.95], [43.252, -126.453]]
// encode: [lat, lng][] -> string
const shape = polyline.encode([[38.5, -120.2], [40.7, -120.95]]);
// => '_p~iF~ps|U_ulLnnqC_mqNvxq`@'- Por defecto 5 decimales (igual que
@mapbox/polyline). - Valhalla emite precision 6 por defecto (
shape_format: polyline6): hay que pasar6explícitamente.
polyline.decode(shape, 6); // shapes de Valhalla
polyline.encode(coords, 6);| Funcion | Firma | Devuelve |
|---|---|---|
decode |
decode(str: string, precision?: number) |
[lat, lng][] |
encode |
encode(coordinates: [lat, lng][], precision?: number) |
string |
decode('')→[]·encode([])→''precisionno entero (incl.undefined) → se usa5(semantica identica a@mapbox/polyline).- Las coordenadas con tercera componente (
[lat, lng, z]) se aceptan;zse ignora (igual que el original).
npm install # devDeps: typescript + @mapbox/polyline (solo para tests)
npm run build # compila dist/esm + dist/cjs + dist/types
npm test # node --test: vectores oficiales + Valhalla + diferencial
npm pack # comprueba el contenido del tarball antes de publicar
@mapbox/polylinees solo devDependency (para el test diferencial). Si no esta instalada, los tests diferenciales se saltan sin fallar.
Verificado ejecutando el paquete original lado a lado:
| Caso | Resultado |
|---|---|
Vectores oficiales de la suite de @mapbox/polyline (p0, p5, p6, p13, redondeos, backslashes) |
✔ identicos |
| Vector real de Valhalla p6 (`e~epoA | jfpOiDaK`) |
| Fuzz 9000 polylines aleatorios (p5 y p6, encode y decode) | ✔ strings y arrays identicos |
MIT — Cargoffer (TRANSCEND).
Algoritmo de referencia: Google Encoded Polyline Algorithm Format. Formato Valhalla: Valhalla API — Decoding shape.