hunter547 / Leaflet.SmoothGeodesic

Smooth geodesic curves for Leaflet

Home Page:https://leaflet-smoothgeodesic.netlify.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🌎 Leaflet.SmoothGeodesic

NPM Version

Image of smooth geodesic path

Purpose

Draw smooth geodesic (Great Circle) paths from a source latitude/longitude to a destination latitude/longitude.


Table of Contents
  1. Built With
  2. Getting Started
  3. Installation
  4. Usage
  5. Roadmap
  6. Contributing
  7. License
  8. Contact
  9. Acknowledgments

Built With

(back to top)

Getting Started

Setup

You need to have a leaflet map setup before usage. Follow the setup guide here:
Vanilla Javasciprt: https://leafletjs.com/SlavaUkraini/examples/quick-start/
React: https://react-leaflet.js.org/docs/start-installation/

Installation

Node.js

npm i leaflet.smoothgeodesic

Import leaflet FIRST, then leaflet.smoothgeodesic:

import L from "leaflet"; // import { smoothGeodesic, SmoothGeodesic } from 'leaflet'; // for TypeScript
import "leaflet.smoothgeodesic";

(back to top)

Usage

Give a source coordinate and destination coordinate (with options) and optionally animate it.

Parameters

L.smoothGeodesic(Source coordinates, Destination coordinates, Number of midpoints, Options)
  1. Source coordinates

    Purpose Available Data Types Example
    The starting location of the curve. [number, number] and L.LatLng(lat, lng) [0, 0] or new L.LatLng(0, 0)
  2. Destination coordinates

    Purpose Available Data Types Example
    The ending location of the curve. [number, number] and L.LatLng(lat, lng) [0, 0] or new L.LatLng(0, 0)
  3. Number of midpoints

    Purpose Available Data Types Example
    The number of calculated points along the geodesic path for use by the curve. The higher the number, the more accurate the curve, but more intensive the total calculation. 65 points seems to be a good balance of true geodesic accuracy and calculation intensity. 100+ for really accurate lines. number (integer) 65
  4. Options

    Purpose Available Data Types Example
    Allow for customization of the geodesic path. This options object is an extension of the Leaflet Path Options. All options listed there can be used here, as well as an animate:{} property, which is of type KeyframeAnimationOptions, or just a number. This gives the user the ability to both customize the path and animate it from point A to point B with keyframes, or just a number defining the duration of the point A to pont B "flight" time. {...Leaflet Path Options, animate: KeyframeAnimationOptions or number.
    {
    	"weight": 4,
    	"color": "darkslateblue",
    	"animate": { "duration": 3000, "delay": 1000 }
    }

Examples

L.smoothGeodesic(
	[40, -99], // <- Source coordinates
	[27, 30], // <- Destination coordinates
	65, // <- Number of midpoint calculations
	{
		weight: 4,
		color: "teal",
		animate: 3000,
	} // <- Options
).addTo(map); // map is an instance of L.Map

////////////////////////////////////////////////////////

new L.SmoothGeodesic(L.latLng(60, 100), L.latLng(40, -4), 65, {
	className: "customPathClass",
	animate: {
		duration: 3000,
		delay: 3000,
	},
}).addTo(map);

////////////////////////////////////////////////////////

L.smoothGeodesic(new L.LatLng(24, -76), new L.LatLng(31, 36), 100, {
	opacity: 0.5,
	lineCap: "square",
	dashArray: "4 1",
}).addTo(map);

Roadmap

  • Add Changelog.
  • Add CDN delivery of the src code for vanilla javascript support.
  • Add methods to allow setting of new source and destination coordinates on an existing path.
  • Extend off the Leaflet Path class instead of extending using the extend method (better typing / more readable)

(back to top)

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the MIT License. See LICENSE for more information.

(back to top)

Contact

Hunter Evanoff - hunter@evanoff.dev

Project Link: https://github.com/hunter547/Leaflet.SmoothGeodesic

(back to top)

Acknowledgments

This repo wouldn't be possible without the work of these repos:

  • How to get under the hood of L.Path and customize it: Leaflet.curve
  • Geodesic calculations: arc.js

(back to top)

About

Smooth geodesic curves for Leaflet

https://leaflet-smoothgeodesic.netlify.com

License:MIT License


Languages

Language:TypeScript 93.0%Language:JavaScript 7.0%