Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
geojson-path-finder
Advanced tools
Find shortest paths through a network of GeoJSON.
Given a network of GeoJSON LineString
s, GeoJSON Path Finder will find the shortest path between two points in the network. This might be useful for automatic route searches in smaller networks, where setting up a real route planner like OSRM is too much work, or you simply need to do everything on the client.
See the GeoJSON Path Finder demo.
Upgrade notice Version 2.0 has been released, which is a TypeScript rewrite - you can still use the module from plain JavaScript, of course. This version also contains some breaking changes regarding option naming; for most common use cases, everything will work as before.
Breaking changes:
precision
is now named tolerance
keyFn
is now named key
weightFn
is now named weight
edgeDataReduceFn
is now named edgeDataReducer
edgeDataSeed
is now a function taking the properties of the start nodenpm install --save geojson-path-finder
Detailed (and somewhat experimental) API Docs
Create a path finding object:
import PathFinder from "geojson-path-finder";
import geojson from "./network.json";
const pathFinder = new PathFinder(geojson);
The GeoJSON object should be a FeatureCollection
of LineString
features. The network will be built
into a topology, so that lines that start and end, or cross, at the same coordinate are joined such that
you can find a path from one feature to the other.
To find the shortest path between two coordinates:
var path = pathFinder.findPath(start, finish);
Where start
and finish
are two GeoJSON point
features. Note that both points have to be vertices in the routing network; if they are not, no route will be found.
If a route can be found, an object with two properties: path
and weight
is returned, where path
is the coordinates the path runs through, and weight
is the total weight (distance in kilometers, if you use the default weight function) of the path.
As a convenience, the function pathToGeoJSON
is also exported, it converts the result of a findPath
call to
a GeoJSON linestring:
import PathFinder, { pathToGeoJSON } from "geojson-path-finder";
const pathFinder = new PathFinder(geojson);
const pathLineString = pathToGeoJSON(pathFinder.findPath(start, finish));
(If findPath
does not find a path, pathToGeoJSON will also return undefined
.)
PathFinder
optionsThe PathFinder
constructor takes an optional seconds parameter containing options
that you can
use to control the behaviour of the path finder. Available options:
weight
controls how the weight (or cost) of travelling between two vertices is calculated;
by default, the geographic distance between the coordinates is calculated and used as weight;
see Weight functions below for detailstolerance
(default 1e-5
) controls the tolerance for how close vertices in the GeoJSON can be
before considered being the same vertice; you can say that coordinates closer than this will be
snapped together into one coordinateedgeDataReducer
can optionally be used to store data present in the GeoJSON on each edge of
the routing graph; typically, this can be used for storing things like street names; if specified,
the reduced data is present on found paths under the edgeDatas
propertyedgeDataSeed
is a function returning taking a network feature's properties
as argument and returning the seed used when reducing edge data with the edgeDataReducer
aboveBy default, the cost of going from one node in the network to another is determined simply by
the geographic distance between the two nodes. This means that, by default, shortest paths will be found.
You can however override this by providing a cost calculation function through the weight
option:
const pathFinder = new PathFinder(geojson, {
weight: function (a, b, props) {
const dx = a[0] - b[0];
const dy = a[1] - b[1];
return Math.sqrt(dx * dx + dy * dy);
},
});
The weight function is passed two coordinate arrays (in GeoJSON axis order), as well as the feature properties that are associated with this feature, and should return either:
a
to b
as going from b
to a
; as cost of 0
means the edge can't be usedforward
and backward
; in this case,
forward
denotes the cost of going from a
to b
, and
backward
the cost of going from b
to a
; setting either
to 0
will prevent taking that direction, the segment will be a oneway.undefined
is the same as setting the weight to 0
: this edge can't be usedFAQs
Find shortest path through a network of GeoJSON
The npm package geojson-path-finder receives a total of 1,116 weekly downloads. As such, geojson-path-finder popularity was classified as popular.
We found that geojson-path-finder demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.