本文整理匯總了TypeScript中@turf/helpers.convertLength函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript convertLength函數的具體用法?TypeScript convertLength怎麽用?TypeScript convertLength使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了convertLength函數的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: pointToLineDistance
/**
* Returns the minimum distance between a {@link Point} and a {@link LineString}, being the distance from a line the
* minimum distance between the point and any segment of the `LineString`.
*
* @name pointToLineDistance
* @param {Feature<Point>|Array<number>} pt Feature or Geometry
* @param {Feature<LineString>} line GeoJSON Feature or Geometry
* @param {Object} [options={}] Optional parameters
* @param {string} [options.units="kilometers"] can be anything supported by turf/convertLength
* (ex: degrees, radians, miles, or kilometers)
* @param {string} [options.method="geodesic"] wether to calculate the distance based on geodesic (spheroid) or
* planar (flat) method. Valid options are 'geodesic' or 'planar'.
* @returns {number} distance between point and line
* @example
* var pt = turf.point([0, 0]);
* var line = turf.lineString([[1, 1],[-1, 1]]);
*
* var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});
* //=69.11854715938406
*/
function pointToLineDistance(pt: Coord, line: Feature<LineString> | LineString, options: {
units?: Units,
method?: "geodesic" | "planar",
} = {}): number {
// Optional parameters
if (!options.method) { options.method = "geodesic"; }
if (!options.units) { options.units = "kilometers"; }
// validation
if (!pt) { throw new Error("pt is required"); }
if (Array.isArray(pt)) { pt = point(pt);
} else if (pt.type === "Point") { pt = feature(pt);
} else { featureOf(pt, "Point", "point"); }
if (!line) { throw new Error("line is required"); }
if (Array.isArray(line)) { line = lineString(line);
} else if (line.type === "LineString") { line = feature(line);
} else { featureOf(line, "LineString", "line"); }
let distance = Infinity;
const p = pt.geometry.coordinates;
segmentEach(line, (segment) => {
const a = segment!.geometry.coordinates[0];
const b = segment!.geometry.coordinates[1];
const d = distanceToSegment(p, a, b, options);
if (d < distance) { distance = d; }
});
return convertLength(distance, "degrees", options.units);
}
示例2: rhumbDistance
/**
* Calculates the distance along a rhumb line between two {@link Point|points} in degrees, radians,
* miles, or kilometers.
*
* @name rhumbDistance
* @param {Coord} from origin point
* @param {Coord} to destination point
* @param {Object} [options] Optional parameters
* @param {string} [options.units="kilometers"] can be degrees, radians, miles, or kilometers
* @returns {number} distance between the two points
* @example
* var from = turf.point([-75.343, 39.984]);
* var to = turf.point([-75.534, 39.123]);
* var options = {units: 'miles'};
*
* var distance = turf.rhumbDistance(from, to, options);
*
* //addToMap
* var addToMap = [from, to];
* from.properties.distance = distance;
* to.properties.distance = distance;
*/
function rhumbDistance(from: Coord, to: Coord, options: {
units?: Units,
} = {}): number {
const origin = getCoord(from);
const destination = getCoord(to);
// compensate the crossing of the 180th meridian (https://macwright.org/2016/09/26/the-180th-meridian.html)
// solution from https://github.com/mapbox/mapbox-gl-js/issues/3250#issuecomment-294887678
destination[0] += (destination[0] - origin[0] > 180) ? -360 : (origin[0] - destination[0] > 180) ? 360 : 0;
const distanceInMeters = calculateRhumbDistance(origin, destination);
const distance = convertLength(distanceInMeters, "meters", options.units);
return distance;
}
示例3: convertLength
/**
* Returns the destination {@link Point} having travelled the given distance along a Rhumb line from the
* origin Point with the (varant) given bearing.
*
* @name rhumbDestination
* @param {Coord} origin starting point
* @param {number} distance distance from the starting point
* @param {number} bearing varant bearing angle ranging from -180 to 180 degrees from north
* @param {Object} [options={}] Optional parameters
* @param {string} [options.units='kilometers'] can be degrees, radians, miles, or kilometers
* @param {Object} [options.properties={}] translate properties to destination point
* @returns {Feature<Point>} Destination point.
* @example
* var pt = turf.point([-75.343, 39.984], {"marker-color": "F00"});
* var distance = 50;
* var bearing = 90;
* var options = {units: 'miles'};
*
* var destination = turf.rhumbDestination(pt, distance, bearing, options);
*
* //addToMap
* var addToMap = [pt, destination]
* destination.properties['marker-color'] = '#00F';
*/
function rhumbDestination<P = Properties>(origin: Coord, distance: number, bearing: number, options: {
units?: Units,
properties?: P,
} = {}): Feature<Point, P> {
const wasNegativeDistance = distance < 0;
let distanceInMeters = convertLength(Math.abs(distance), options.units, "meters");
if (wasNegativeDistance) distanceInMeters = -Math.abs(distanceInMeters);
const coords = getCoord(origin);
const destination = calculateRhumbDestination(coords, distanceInMeters, bearing);
// compensate the crossing of the 180th meridian (https://macwright.org/2016/09/26/the-180th-meridian.html)
// solution from https://github.com/mapbox/mapbox-gl-js/issues/3250#issuecomment-294887678
destination[0] += (destination[0] - coords[0] > 180) ? -360 : (coords[0] - destination[0] > 180) ? 360 : 0;
return point(destination, options.properties);
}
示例4: clustersDbscan
/**
* Takes a set of {@link Point|points} and partition them into clusters according to {@link DBSCAN's|https://en.wikipedia.org/wiki/DBSCAN} data clustering algorithm.
*
* @name clustersDbscan
* @param {FeatureCollection<Point>} points to be clustered
* @param {number} maxDistance Maximum Distance between any point of the cluster to generate the clusters (kilometers only)
* @param {Object} [options={}] Optional parameters
* @param {string} [options.units="kilometers"] in which `maxDistance` is expressed, can be degrees, radians, miles, or kilometers
* @param {boolean} [options.mutate=false] Allows GeoJSON input to be mutated
* @param {number} [options.minPoints=3] Minimum number of points to generate a single cluster,
* points which do not meet this requirement will be classified as an 'edge' or 'noise'.
* @returns {FeatureCollection<Point>} Clustered Points with an additional two properties associated to each Feature:
* - {number} cluster - the associated clusterId
* - {string} dbscan - type of point it has been classified as ('core'|'edge'|'noise')
* @example
* // create random points with random z-values in their properties
* var points = turf.randomPoint(100, {bbox: [0, 30, 20, 50]});
* var maxDistance = 100;
* var clustered = turf.clustersDbscan(points, maxDistance);
*
* //addToMap
* var addToMap = [clustered];
*/
function clustersDbscan(points: FeatureCollection<Point>, maxDistance: number, options: {
units?: Units,
minPoints?: number,
mutate?: boolean
} = {}): FeatureCollection<Point, DbscanProps> {
// Input validation being handled by Typescript
// collectionOf(points, 'Point', 'points must consist of a FeatureCollection of only Points');
// if (maxDistance === null || maxDistance === undefined) throw new Error('maxDistance is required');
// if (!(Math.sign(maxDistance) > 0)) throw new Error('maxDistance is invalid');
// if (!(minPoints === undefined || minPoints === null || Math.sign(minPoints) > 0)) throw new Error('options.minPoints is invalid');
// Clone points to prevent any mutations
if (options.mutate !== true) points = clone(points);
// Defaults
options.minPoints = options.minPoints || 3;
// create clustered ids
var dbscan = new clustering.DBSCAN();
var clusteredIds = dbscan.run(coordAll(points), convertLength(maxDistance, options.units), options.minPoints, distance);
// Tag points to Clusters ID
var clusterId = -1;
clusteredIds.forEach(function (clusterIds) {
clusterId++;
// assign cluster ids to input points
clusterIds.forEach(function (idx) {
var clusterPoint = points.features[idx];
if (!clusterPoint.properties) clusterPoint.properties = {};
clusterPoint.properties.cluster = clusterId;
clusterPoint.properties.dbscan = 'core';
});
});
// handle noise points, if any
// edges points are tagged by DBSCAN as both 'noise' and 'cluster' as they can "reach" less than 'minPoints' number of points
dbscan.noise.forEach(function (noiseId) {
var noisePoint = points.features[noiseId];
if (!noisePoint.properties) noisePoint.properties = {};
if (noisePoint.properties.cluster) noisePoint.properties.dbscan = 'edge';
else noisePoint.properties.dbscan = 'noise';
});
return points;
}