Library to provide basic geospatial operations like distance calculation, conversion of decimal coordinates to sexagesimal and vice versa, etc.
npx @tessl/cli install tessl/npm-geolib@3.3.0Geolib is a comprehensive TypeScript library that provides geospatial operations for Node.js and browser environments. It offers 39 functions covering distance calculations, coordinate conversions, geometric operations, spatial queries, and navigation utilities with support for multiple coordinate formats and high precision calculations.
npm install geolibimport {
getDistance,
getPreciseDistance,
getCenter,
getBounds,
isPointInPolygon,
convertDistance,
computeDestinationPoint
} from "geolib";For CommonJS:
const {
getDistance,
getPreciseDistance,
getCenter,
getBounds,
isPointInPolygon,
convertDistance,
computeDestinationPoint
} = require("geolib");import { getDistance, getCenter, isPointInPolygon } from "geolib";
// Calculate distance between two points
const distance = getDistance(
{ latitude: 51.5103, longitude: 7.49347 },
{ latitude: 51.514, longitude: 7.4138 }
);
console.log(distance); // Distance in meters
// Find center of multiple points
const center = getCenter([
{ latitude: 52.516272, longitude: 13.377722 },
{ latitude: 51.515, longitude: 7.453619 },
{ latitude: 51.503, longitude: -0.119 }
]);
console.log(center); // { longitude: 6.904114, latitude: 51.678095 }
// Check if point is inside polygon
const polygon = [
{ latitude: 51.513357, longitude: 7.45574 },
{ latitude: 51.515400, longitude: 7.45574 },
{ latitude: 51.515504, longitude: 7.47150 },
{ latitude: 51.513357, longitude: 7.47150 }
];
const isInside = isPointInPolygon(
{ latitude: 51.514, longitude: 7.46 },
polygon
);
console.log(isInside); // true or falseGeolib is built around several key concepts:
{lat, lng}) or GeoJSON arrays ([lng, lat])// Coordinate input types
type GeolibInputCoordinates =
| { lat: number; lng: number; }
| { latitude: number; longitude: number; }
| { lat: number; lon: number; }
| [number, number] // [lng, lat] GeoJSON format
| [number, number, number]; // [lng, lat, alt]
// Bounding box type
interface GeolibBounds {
maxLat: number;
minLat: number;
maxLng: number;
minLng: number;
}
// Coordinates with timestamp for speed calculations
interface GeolibInputCoordinatesWithTime extends GeolibInputCoordinates {
time: number; // Unix timestamp
}Core distance measurement functions using various algorithms from simple spherical to high-precision geodetic calculations.
function getDistance(
from: GeolibInputCoordinates,
to: GeolibInputCoordinates,
accuracy?: number
): number;
function getPreciseDistance(
start: GeolibInputCoordinates,
end: GeolibInputCoordinates,
accuracy?: number
): number;Functions for converting between different coordinate formats, including decimal to sexagesimal conversion and coordinate extraction utilities.
function decimalToSexagesimal(decimal: number, format?: string): string;
function sexagesimalToDecimal(sexagesimal: string): number;
function toDecimal(value: any): any;Functions for calculating centers, bounds, areas, and other geometric properties of coordinate sets.
function getCenter(points: GeolibInputCoordinates[]):
{ longitude: number; latitude: number } | false;
function getBounds(points: GeolibInputCoordinates[]): GeolibBounds;
function getAreaOfPolygon(points: GeolibInputCoordinates[]): number;Functions for testing spatial relationships between points, lines, and polygons.
function isPointInPolygon(
point: GeolibInputCoordinates,
polygon: GeolibInputCoordinates[]
): boolean;
function isPointWithinRadius(
point: GeolibInputCoordinates,
center: GeolibInputCoordinates,
radius: number
): boolean;Functions for calculating bearings, compass directions, and computing destination points from start points, distances, and bearings.
function getGreatCircleBearing(
origin: GeolibInputCoordinates,
dest: GeolibInputCoordinates
): number;
function computeDestinationPoint(
start: GeolibInputCoordinates,
distance: number,
bearing: number,
radius?: number
): { latitude: number; longitude: number };Functions for converting between different units of distance, area, and speed measurements.
function convertDistance(meters: number, targetUnit?: string): number;
function convertArea(squareMeters: number, targetUnit?: string): number;
function convertSpeed(
metersPerSecond: number,
targetUnit?: string
): number;Functions for validating coordinates, calculating speeds, and other utility operations.
function isValidCoordinate(point: GeolibInputCoordinates): boolean;
function getSpeed(
start: GeolibInputCoordinatesWithTime,
end: GeolibInputCoordinatesWithTime,
distanceFn?: Function
): number;// Earth radius in meters
const earthRadius: number; // 6378137
// Coordinate bounds
const MINLAT: number; // -90
const MAXLAT: number; // 90
const MINLON: number; // -180
const MAXLON: number; // 180
// Coordinate key arrays for flexible property name lookup
const longitudeKeys: LongitudeKeys[]; // ['lng', 'lon', 'longitude', 0]
const latitudeKeys: LatitudeKeys[]; // ['lat', 'latitude', 1]
const altitudeKeys: AltitudeKeys[]; // ['alt', 'altitude', 'elevation', 'elev', 2]
// Unit conversion factors
const distanceConversion: { [unit: string]: number };
const areaConversion: { [unit: string]: number };
const timeConversion: { [unit: string]: number };
// Sexagesimal pattern for coordinate parsing
const sexagesimalPattern: RegExp;