Skip to content

Repository files navigation

@cargoffer/polyline

npm versionnpm downloadsCILicense: MIT

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: decode y encode).
  • 🧪 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 (exports map).
  • ⚖️ Licencia MIT. Cero dependencias runtime.

🚛 Hecho para TRANSCEND — calculo de rutas, costes y tiempos para transporte por carretera en Europa: transcend.cargoffer.com

Instalacion

npm install @cargoffer/polyline

Uso

importpolylinefrom'@cargoffer/polyline';// o: import * as polyline from '@cargoffer/polyline';// o: import { decode, encode } from '@cargoffer/polyline';// decode: string polyline -> [lat, lng][]constcoords=polyline.decode('_p~iF~ps|U_ulLnnqC_mqNvxq`@');// => [[38.5, -120.2], [40.7, -120.95], [43.252, -126.453]]// encode: [lat, lng][] -> stringconstshape=polyline.encode([[38.5,-120.2],[40.7,-120.95]]);// => '_p~iF~ps|U_ulLnnqC_mqNvxq`@'

Precision

  • Por defecto 5 decimales (igual que @mapbox/polyline).
  • Valhalla emite precision 6 por defecto (shape_format: polyline6): hay que pasar 6 explícitamente.
polyline.decode(shape,6);// shapes de Valhallapolyline.encode(coords,6);

API

FuncionFirmaDevuelve
decodedecode(str: string, precision?: number)[lat, lng][]
encodeencode(coordinates: [lat, lng][], precision?: number)string
  • decode('')[] · encode([])''
  • precision no entero (incl. undefined) → se usa 5 (semantica identica a @mapbox/polyline).
  • Las coordenadas con tercera componente ([lat, lng, z]) se aceptan; z se ignora (igual que el original).

Desarrollo

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/polyline es solo devDependency (para el test diferencial). Si no esta instalada, los tests diferenciales se saltan sin fallar.

Compatibilidad con @mapbox/polyline

Verificado ejecutando el paquete original lado a lado:

CasoResultado
Vectores oficiales de la suite de @mapbox/polyline (p0, p5, p6, p13, redondeos, backslashes)✔ identicos
Vector real de Valhalla p6 (`e~epoAjfpOiDaK`)
Fuzz 9000 polylines aleatorios (p5 y p6, encode y decode)✔ strings y arrays identicos

Licencia

MIT — Cargoffer (TRANSCEND).


Algoritmo de referencia: Google Encoded Polyline Algorithm Format. Formato Valhalla: Valhalla API — Decoding shape.

About

decode()/encode() Google Polyline (precision 5/6) — 0 deps, 100% compatible con @mapbox/polyline. Propiedad de Cargoffer para el ecosistema TRANSCEND.

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages