springmeyer/arc.js
{ "createdAt": "2011-06-10T06:12:40Z", "defaultBranch": "main", "description": "great circle routes in javascript", "fullName": "springmeyer/arc.js", "homepage": "http://springmeyer.github.io/arc.js/", "language": "TypeScript", "name": "arc.js", "pushedAt": "2026-06-02T15:19:49Z", "stargazersCount": 384, "topics": [], "updatedAt": "2026-06-02T15:23:54Z", "url": "https://github.com/springmeyer/arc.js"}arc.js
Section titled “arc.js”Calculate great circle routes as lines in GeoJSON or WKT format.
🌍 Try the interactive demo - Click to plot great circle arcs on a map!
Features:
- Full TypeScript support with type definitions
- Works in Node.js and browsers
- Generates GeoJSON and WKT output formats
- Handles dateline crossing automatically
- Based on Ed Williams’ Aviation Formulary algorithms
Installation
Section titled “Installation”npm install arcQuick Start
Section titled “Quick Start”import { GreatCircle } from 'arc';const gc = new GreatCircle({x: -122, y: 48}, {x: -77, y: 39});const line = gc.Arc(); // npoints is optional, defaults to 100console.log(line.json()); // GeoJSON outputTypeScript
Section titled “TypeScript”import { GreatCircle, CoordinatePoint } from 'arc';
const start: CoordinatePoint = { x: -122, y: 48 };const end: CoordinatePoint = { x: -77, y: 39 };const gc = new GreatCircle(start, end);const line = gc.Arc(100);Browser (ESM)
Section titled “Browser (ESM)”<script type="module"> import { GreatCircle } from 'https://cdn.skypack.dev/arc@1'; const gc = new GreatCircle({x: -122, y: 48}, {x: -77, y: 39}); const line = gc.Arc();</script>API Reference
Section titled “API Reference”Basic Usage
Section titled “Basic Usage”1. Define coordinates
Section titled “1. Define coordinates”Coordinates use x for longitude and y for latitude (both in degrees):
const start = { x: -122, y: 48 }; // Seattleconst end = { x: -77, y: 39 }; // Washington DC2. Create a GreatCircle
Section titled “2. Create a GreatCircle”const gc = new GreatCircle(start, end, { name: 'Seattle to DC' });3. Generate the arc
Section titled “3. Generate the arc”const line = gc.Arc(); // defaults to 100 pointsconst line = gc.Arc(500); // or specify a custom valueParameters:
npoints(number, optional): Number of intermediate points (higher = more precise, default: 100)
TypeScript Support
Section titled “TypeScript Support”import { GreatCircle, CoordinatePoint, ArcOptions } from 'arc';
// Define custom properties interfaceinterface RouteProperties { name: string; color?: string;}
const start: CoordinatePoint = { x: -122, y: 48 };const end: CoordinatePoint = { x: -77, y: 39 };const properties: RouteProperties = { name: 'Seattle to DC', color: 'blue' };
const gc = new GreatCircle(start, end, properties);const line = gc.Arc(); // npoints is optional, defaults to 100
// Fully typed return valuesconst geojson = line.json(); // GeoJSONFeatureconst wkt = line.wkt(); // stringAvailable Types: CoordinatePoint, ArcOptions, Coord, GreatCircle, Arc, GeoJSONFeature
Output Formats
Section titled “Output Formats”Raw Arc Object
Section titled “Raw Arc Object”The generated arc contains intermediate coordinate pairs:
{ properties: { name: 'Seattle to DC' }, geometries: [ { coords: [ [-122, 48], [-112.06162, 47.724167], [-102.384043, 46.608132], [-93.227189, 44.716217], [-84.74824, 42.144155], [-77, 39] ], length: 6 } ]}GeoJSON Format
Section titled “GeoJSON Format”const geojson = line.json();// Returns:{ type: 'Feature', geometry: { type: 'LineString', coordinates: [[-122, 48], [-112.06162, 47.724167], ...] }, properties: { name: 'Seattle to DC' }}WKT Format
Section titled “WKT Format”const wkt = line.wkt();// Returns:'LINESTRING(-122 48,-112.061619 47.724167,-102.384043 46.608131,...)'Dateline Crossing
Section titled “Dateline Crossing”Routes that cross the international dateline are automatically detected and split into a MultiLineString with exact ±180° boundary points. No configuration is needed.
Examples
Section titled “Examples”See the interactive demo for sample code showing how to create GeoJSON feature collections from multiple routes.
Used in Turf.js
Section titled “Used in Turf.js”arc.js powers the greatCircle function in Turf.js, a popular geospatial JavaScript library. You can use great circle calculations directly through Turf:
License
Section titled “License”This project is licensed under the BSD license. See [LICENSE.md]!(LICENSE) for details.