@pranavpatel.ca/algo-gridpointcode
Version:
Grid Point Code (GPC) is a global geocoding system that provides a unique, lossless, and compact alphanumeric code for any geographic location (home, office, or other places). It enables precise identification and offline conversion between geographic coo
74 lines (46 loc) • 2.42 kB
Markdown
# Grid Point Code (GPC) – TypeScript
## Overview
**Grid Point Code (GPC)** is a geocoding system that provides a unique, compact, and lossless alphanumeric code for any geographic location. This TypeScript implementation enables offline encoding and decoding of latitude/longitude coordinates into a highly precise and standardized string format.
## Features
* **Compact Global Codes**: Unique alphanumeric string for every lat/lng location
* **Bidirectional Conversion**: Encode and decode with precision up to 5 decimal places
* **Offline Support**: No internet or API required
* **Formatted Output**: Default format is `#XXXX-XXXX-XXX` for easy readability
* **Proximity-Aware**: Nearby locations produce similar codes
* **Open Source**: Licensed under Apache License 2.0
## Installation
Add the package (assumes you publish it to npm):
```bash
npm install @pranavpatel.ca/algo-gridpointcode
```
## Usage
```ts
import { GPC } from '@pranavpatel.ca/algo-gridpointcode';
// Encode latitude and longitude to GPC
const code = GPC.encode(43.65, -79.38); // Toronto
console.log(code); // Example: #FN5G-CDKL-HDC
// Decode a GPC back to coordinates
const [lat, lng] = GPC.decode('#FN5G-CDKL-HDC');
console.log(lat, lng);
// Validate a GPC string
const [valid, message] = GPC.isValid('#FN5G-CDKL-HDC');
console.log(valid, message);
```
## Code Structure
* **GPC Format**: `#XXXX-XXXX-XXX` (11 characters, base-27)
* **Alphabet**: `"CDFGHJKLMNPRTVWXY0123456789"` (Base-27 encoding)
* **Precision**: \~5 decimal places for lat/lng
* **Validation**: Coordinates and GPCs are range-checked and format-verified
## API Reference
### `GPC.encode(latitude: number, longitude: number, formatted = true): string`
Encodes a latitude/longitude pair into a GPC string. Optional `formatted` flag adds separators.
### `GPC.decode(code: string): [number, number]`
Decodes a GPC string back into `[latitude, longitude]`.
### `GPC.isValidCoordinates(lat: number, lng: number): [boolean, string]`
Checks if latitude and longitude are within valid global ranges.
### `GPC.isValid(code: string): [boolean, string]`
Validates the GPC format and ensures it maps to a valid point.
## License
Licensed under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0).
## Contributing
Pull requests, issues, and suggestions are welcome!