@turf/point-to-line-distance 7.2.0 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,9 +13,8 @@ line. Sometimes referred to as the cross track distance.
13
13
  * `line` **[Feature][1]<[LineString][5]>** GeoJSON Feature or Geometry
14
14
  * `options` **[Object][6]** Optional parameters (optional, default `{}`)
15
15
 
16
- * `options.units` **[string][7]** can be anything supported by turf/convertLength
17
- (ex: degrees, radians, miles, or kilometers) (optional, default `"kilometers"`)
18
- * `options.method` **[string][7]** whether to calculate the distance based on geodesic (spheroid) or
16
+ * `options.units` **Units** Supports all valid Turf [Units][7] (optional, default `"kilometers"`)
17
+ * `options.method` **[string][8]** whether to calculate the distance based on geodesic (spheroid) or
19
18
  planar (flat) method. Valid options are 'geodesic' or 'planar'. (optional, default `"geodesic"`)
20
19
 
21
20
  ### Examples
@@ -42,7 +41,9 @@ Returns **[number][4]** distance between point and line
42
41
 
43
42
  [6]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
44
43
 
45
- [7]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
44
+ [7]: https://turfjs.org/docs/api/types/Units
45
+
46
+ [8]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String
46
47
 
47
48
  <!-- This file is automatically generated. Please don't edit it directly. If you find an error, edit the source file of the module in question (likely index.js or index.ts), and re-run "yarn docs" from the root of the turf project. -->
48
49
 
@@ -71,9 +71,9 @@ function distanceToSegment(p, a, b, options) {
71
71
  function dot(u, v) {
72
72
  return u[0] * v[0] + u[1] * v[1];
73
73
  }
74
- var turf_point_to_line_distance_default = pointToLineDistance;
74
+ var index_default = pointToLineDistance;
75
75
 
76
76
 
77
77
 
78
- exports.default = turf_point_to_line_distance_default; exports.pointToLineDistance = pointToLineDistance;
78
+ exports.default = index_default; exports.pointToLineDistance = pointToLineDistance;
79
79
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-point-to-line-distance/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-point-to-line-distance/dist/cjs/index.cjs","sourcesContent":[null,"// Taken from http://geomalgorithms.com/a02-_lines.html\nimport { Feature, LineString } from \"geojson\";\nimport {\n convertLength,\n Coord,\n feature,\n lineString,\n point,\n Units,\n} from \"@turf/helpers\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { featureOf } from \"@turf/invariant\";\nimport { segmentEach } from \"@turf/meta\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\n\n/**\n * Calculates the distance between a given point and the nearest point on a\n * line. Sometimes referred to as the cross track distance.\n *\n * @function\n * @param {Feature<Point>|Array<number>} pt Feature or Geometry\n * @param {Feature<LineString>} line GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be anything supported by turf/convertLength\n * (ex: degrees, radians, miles, or kilometers)\n * @param {string} [options.method=\"geodesic\"] whether to calculate the distance based on geodesic (spheroid) or\n * planar (flat) method. Valid options are 'geodesic' or 'planar'.\n * @returns {number} distance between point and line\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[1, 1],[-1, 1]]);\n *\n * var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});\n * //=69.11854715938406\n */\nfunction pointToLineDistance(\n pt: Coord,\n line: Feature<LineString> | LineString,\n options: {\n units?: Units;\n method?: \"geodesic\" | \"planar\";\n } = {}\n): number {\n // Optional parameters\n const method = options.method ?? \"geodesic\";\n const units = options.units ?? \"kilometers\";\n\n // validation\n if (!pt) {\n throw new Error(\"pt is required\");\n }\n if (Array.isArray(pt)) {\n pt = point(pt);\n } else if (pt.type === \"Point\") {\n pt = feature(pt);\n } else {\n featureOf(pt, \"Point\", \"point\");\n }\n\n if (!line) {\n throw new Error(\"line is required\");\n }\n if (Array.isArray(line)) {\n line = lineString(line);\n } else if (line.type === \"LineString\") {\n line = feature(line);\n } else {\n featureOf(line, \"LineString\", \"line\");\n }\n\n let distance = Infinity;\n const p = pt.geometry.coordinates;\n segmentEach(line, (segment) => {\n if (segment) {\n const a = segment.geometry.coordinates[0];\n const b = segment.geometry.coordinates[1];\n const d = distanceToSegment(p, a, b, { method });\n if (d < distance) {\n distance = d;\n }\n }\n });\n return convertLength(distance, \"degrees\", units);\n}\n\n/**\n * Returns the distance between a point P on a segment AB.\n *\n * @private\n * @param {Array<number>} p external point\n * @param {Array<number>} a first segment point\n * @param {Array<number>} b second segment point\n * @param {Object} [options={}] Optional parameters\n * @returns {number} distance\n */\nfunction distanceToSegment(\n p: number[], // point to measure from\n a: number[], // start point of the segment to measure to\n b: number[], // end point of the segment to measure to\n options: {\n method: \"geodesic\" | \"planar\";\n }\n) {\n // Internally just use degrees, and then convert to the user's requested units\n // in the calling function.\n if (options.method === \"geodesic\") {\n // Use nearestPointOnLine to properly calculate distances on a spherical\n // Earth.\n const nearest = nearestPointOnLine(lineString([a, b]).geometry, p, {\n units: \"degrees\",\n });\n return nearest.properties.dist;\n }\n\n // Perform scalar calculations instead using rhumb lines.\n const v = [b[0] - a[0], b[1] - a[1]];\n const w = [p[0] - a[0], p[1] - a[1]];\n\n const c1 = dot(w, v);\n if (c1 <= 0) {\n return rhumbDistance(p, a, { units: \"degrees\" });\n }\n const c2 = dot(v, v);\n if (c2 <= c1) {\n return rhumbDistance(p, b, { units: \"degrees\" });\n }\n const b2 = c1 / c2;\n const Pb = [a[0] + b2 * v[0], a[1] + b2 * v[1]];\n\n return rhumbDistance(p, Pb, { units: \"degrees\" });\n}\n\nfunction dot(u: number[], v: number[]) {\n return u[0] * v[0] + u[1] * v[1];\n}\n\nexport { pointToLineDistance };\nexport default pointToLineDistance;\n"]}
1
+ {"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-point-to-line-distance/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-point-to-line-distance/dist/cjs/index.cjs","sourcesContent":[null,"// Taken from http://geomalgorithms.com/a02-_lines.html\nimport { Feature, LineString } from \"geojson\";\nimport {\n convertLength,\n Coord,\n feature,\n lineString,\n point,\n Units,\n} from \"@turf/helpers\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { featureOf } from \"@turf/invariant\";\nimport { segmentEach } from \"@turf/meta\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\n\n/**\n * Calculates the distance between a given point and the nearest point on a\n * line. Sometimes referred to as the cross track distance.\n *\n * @function\n * @param {Feature<Point>|Array<number>} pt Feature or Geometry\n * @param {Feature<LineString>} line GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {Units} [options.units=\"kilometers\"] Supports all valid Turf {@link https://turfjs.org/docs/api/types/Units Units}\n * @param {string} [options.method=\"geodesic\"] whether to calculate the distance based on geodesic (spheroid) or\n * planar (flat) method. Valid options are 'geodesic' or 'planar'.\n * @returns {number} distance between point and line\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[1, 1],[-1, 1]]);\n *\n * var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});\n * //=69.11854715938406\n */\nfunction pointToLineDistance(\n pt: Coord,\n line: Feature<LineString> | LineString,\n options: {\n units?: Units;\n method?: \"geodesic\" | \"planar\";\n } = {}\n): number {\n // Optional parameters\n const method = options.method ?? \"geodesic\";\n const units = options.units ?? \"kilometers\";\n\n // validation\n if (!pt) {\n throw new Error(\"pt is required\");\n }\n if (Array.isArray(pt)) {\n pt = point(pt);\n } else if (pt.type === \"Point\") {\n pt = feature(pt);\n } else {\n featureOf(pt, \"Point\", \"point\");\n }\n\n if (!line) {\n throw new Error(\"line is required\");\n }\n if (Array.isArray(line)) {\n line = lineString(line);\n } else if (line.type === \"LineString\") {\n line = feature(line);\n } else {\n featureOf(line, \"LineString\", \"line\");\n }\n\n let distance = Infinity;\n const p = pt.geometry.coordinates;\n segmentEach(line, (segment) => {\n if (segment) {\n const a = segment.geometry.coordinates[0];\n const b = segment.geometry.coordinates[1];\n const d = distanceToSegment(p, a, b, { method });\n if (d < distance) {\n distance = d;\n }\n }\n });\n return convertLength(distance, \"degrees\", units);\n}\n\n/**\n * Returns the distance between a point P on a segment AB.\n *\n * @private\n * @param {Array<number>} p external point\n * @param {Array<number>} a first segment point\n * @param {Array<number>} b second segment point\n * @param {Object} [options={}] Optional parameters\n * @returns {number} distance\n */\nfunction distanceToSegment(\n p: number[], // point to measure from\n a: number[], // start point of the segment to measure to\n b: number[], // end point of the segment to measure to\n options: {\n method: \"geodesic\" | \"planar\";\n }\n) {\n // Internally just use degrees, and then convert to the user's requested units\n // in the calling function.\n if (options.method === \"geodesic\") {\n // Use nearestPointOnLine to properly calculate distances on a spherical\n // Earth.\n const nearest = nearestPointOnLine(lineString([a, b]).geometry, p, {\n units: \"degrees\",\n });\n return nearest.properties.dist;\n }\n\n // Perform scalar calculations instead using rhumb lines.\n const v = [b[0] - a[0], b[1] - a[1]];\n const w = [p[0] - a[0], p[1] - a[1]];\n\n const c1 = dot(w, v);\n if (c1 <= 0) {\n return rhumbDistance(p, a, { units: \"degrees\" });\n }\n const c2 = dot(v, v);\n if (c2 <= c1) {\n return rhumbDistance(p, b, { units: \"degrees\" });\n }\n const b2 = c1 / c2;\n const Pb = [a[0] + b2 * v[0], a[1] + b2 * v[1]];\n\n return rhumbDistance(p, Pb, { units: \"degrees\" });\n}\n\nfunction dot(u: number[], v: number[]) {\n return u[0] * v[0] + u[1] * v[1];\n}\n\nexport { pointToLineDistance };\nexport default pointToLineDistance;\n"]}
@@ -9,8 +9,7 @@ import { Coord, Units } from '@turf/helpers';
9
9
  * @param {Feature<Point>|Array<number>} pt Feature or Geometry
10
10
  * @param {Feature<LineString>} line GeoJSON Feature or Geometry
11
11
  * @param {Object} [options={}] Optional parameters
12
- * @param {string} [options.units="kilometers"] can be anything supported by turf/convertLength
13
- * (ex: degrees, radians, miles, or kilometers)
12
+ * @param {Units} [options.units="kilometers"] Supports all valid Turf {@link https://turfjs.org/docs/api/types/Units Units}
14
13
  * @param {string} [options.method="geodesic"] whether to calculate the distance based on geodesic (spheroid) or
15
14
  * planar (flat) method. Valid options are 'geodesic' or 'planar'.
16
15
  * @returns {number} distance between point and line
@@ -9,8 +9,7 @@ import { Coord, Units } from '@turf/helpers';
9
9
  * @param {Feature<Point>|Array<number>} pt Feature or Geometry
10
10
  * @param {Feature<LineString>} line GeoJSON Feature or Geometry
11
11
  * @param {Object} [options={}] Optional parameters
12
- * @param {string} [options.units="kilometers"] can be anything supported by turf/convertLength
13
- * (ex: degrees, radians, miles, or kilometers)
12
+ * @param {Units} [options.units="kilometers"] Supports all valid Turf {@link https://turfjs.org/docs/api/types/Units Units}
14
13
  * @param {string} [options.method="geodesic"] whether to calculate the distance based on geodesic (spheroid) or
15
14
  * planar (flat) method. Valid options are 'geodesic' or 'planar'.
16
15
  * @returns {number} distance between point and line
package/dist/esm/index.js CHANGED
@@ -71,9 +71,9 @@ function distanceToSegment(p, a, b, options) {
71
71
  function dot(u, v) {
72
72
  return u[0] * v[0] + u[1] * v[1];
73
73
  }
74
- var turf_point_to_line_distance_default = pointToLineDistance;
74
+ var index_default = pointToLineDistance;
75
75
  export {
76
- turf_point_to_line_distance_default as default,
76
+ index_default as default,
77
77
  pointToLineDistance
78
78
  };
79
79
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../index.ts"],"sourcesContent":["// Taken from http://geomalgorithms.com/a02-_lines.html\nimport { Feature, LineString } from \"geojson\";\nimport {\n convertLength,\n Coord,\n feature,\n lineString,\n point,\n Units,\n} from \"@turf/helpers\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { featureOf } from \"@turf/invariant\";\nimport { segmentEach } from \"@turf/meta\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\n\n/**\n * Calculates the distance between a given point and the nearest point on a\n * line. Sometimes referred to as the cross track distance.\n *\n * @function\n * @param {Feature<Point>|Array<number>} pt Feature or Geometry\n * @param {Feature<LineString>} line GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {string} [options.units=\"kilometers\"] can be anything supported by turf/convertLength\n * (ex: degrees, radians, miles, or kilometers)\n * @param {string} [options.method=\"geodesic\"] whether to calculate the distance based on geodesic (spheroid) or\n * planar (flat) method. Valid options are 'geodesic' or 'planar'.\n * @returns {number} distance between point and line\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[1, 1],[-1, 1]]);\n *\n * var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});\n * //=69.11854715938406\n */\nfunction pointToLineDistance(\n pt: Coord,\n line: Feature<LineString> | LineString,\n options: {\n units?: Units;\n method?: \"geodesic\" | \"planar\";\n } = {}\n): number {\n // Optional parameters\n const method = options.method ?? \"geodesic\";\n const units = options.units ?? \"kilometers\";\n\n // validation\n if (!pt) {\n throw new Error(\"pt is required\");\n }\n if (Array.isArray(pt)) {\n pt = point(pt);\n } else if (pt.type === \"Point\") {\n pt = feature(pt);\n } else {\n featureOf(pt, \"Point\", \"point\");\n }\n\n if (!line) {\n throw new Error(\"line is required\");\n }\n if (Array.isArray(line)) {\n line = lineString(line);\n } else if (line.type === \"LineString\") {\n line = feature(line);\n } else {\n featureOf(line, \"LineString\", \"line\");\n }\n\n let distance = Infinity;\n const p = pt.geometry.coordinates;\n segmentEach(line, (segment) => {\n if (segment) {\n const a = segment.geometry.coordinates[0];\n const b = segment.geometry.coordinates[1];\n const d = distanceToSegment(p, a, b, { method });\n if (d < distance) {\n distance = d;\n }\n }\n });\n return convertLength(distance, \"degrees\", units);\n}\n\n/**\n * Returns the distance between a point P on a segment AB.\n *\n * @private\n * @param {Array<number>} p external point\n * @param {Array<number>} a first segment point\n * @param {Array<number>} b second segment point\n * @param {Object} [options={}] Optional parameters\n * @returns {number} distance\n */\nfunction distanceToSegment(\n p: number[], // point to measure from\n a: number[], // start point of the segment to measure to\n b: number[], // end point of the segment to measure to\n options: {\n method: \"geodesic\" | \"planar\";\n }\n) {\n // Internally just use degrees, and then convert to the user's requested units\n // in the calling function.\n if (options.method === \"geodesic\") {\n // Use nearestPointOnLine to properly calculate distances on a spherical\n // Earth.\n const nearest = nearestPointOnLine(lineString([a, b]).geometry, p, {\n units: \"degrees\",\n });\n return nearest.properties.dist;\n }\n\n // Perform scalar calculations instead using rhumb lines.\n const v = [b[0] - a[0], b[1] - a[1]];\n const w = [p[0] - a[0], p[1] - a[1]];\n\n const c1 = dot(w, v);\n if (c1 <= 0) {\n return rhumbDistance(p, a, { units: \"degrees\" });\n }\n const c2 = dot(v, v);\n if (c2 <= c1) {\n return rhumbDistance(p, b, { units: \"degrees\" });\n }\n const b2 = c1 / c2;\n const Pb = [a[0] + b2 * v[0], a[1] + b2 * v[1]];\n\n return rhumbDistance(p, Pb, { units: \"degrees\" });\n}\n\nfunction dot(u: number[], v: number[]) {\n return u[0] * v[0] + u[1] * v[1];\n}\n\nexport { pointToLineDistance };\nexport default pointToLineDistance;\n"],"mappings":";AAEA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAsB9B,SAAS,oBACP,IACA,MACA,UAGI,CAAC,GACG;AA1CV;AA4CE,QAAM,UAAS,aAAQ,WAAR,YAAkB;AACjC,QAAM,SAAQ,aAAQ,UAAR,YAAiB;AAG/B,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AACA,MAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,SAAK,MAAM,EAAE;AAAA,EACf,WAAW,GAAG,SAAS,SAAS;AAC9B,SAAK,QAAQ,EAAE;AAAA,EACjB,OAAO;AACL,cAAU,IAAI,SAAS,OAAO;AAAA,EAChC;AAEA,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,kBAAkB;AAAA,EACpC;AACA,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,WAAW,IAAI;AAAA,EACxB,WAAW,KAAK,SAAS,cAAc;AACrC,WAAO,QAAQ,IAAI;AAAA,EACrB,OAAO;AACL,cAAU,MAAM,cAAc,MAAM;AAAA,EACtC;AAEA,MAAI,WAAW;AACf,QAAM,IAAI,GAAG,SAAS;AACtB,cAAY,MAAM,CAAC,YAAY;AAC7B,QAAI,SAAS;AACX,YAAM,IAAI,QAAQ,SAAS,YAAY,CAAC;AACxC,YAAM,IAAI,QAAQ,SAAS,YAAY,CAAC;AACxC,YAAM,IAAI,kBAAkB,GAAG,GAAG,GAAG,EAAE,OAAO,CAAC;AAC/C,UAAI,IAAI,UAAU;AAChB,mBAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,cAAc,UAAU,WAAW,KAAK;AACjD;AAYA,SAAS,kBACP,GACA,GACA,GACA,SAGA;AAGA,MAAI,QAAQ,WAAW,YAAY;AAGjC,UAAM,UAAU,mBAAmB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG;AAAA,MACjE,OAAO;AAAA,IACT,CAAC;AACD,WAAO,QAAQ,WAAW;AAAA,EAC5B;AAGA,QAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,QAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnC,QAAM,KAAK,IAAI,GAAG,CAAC;AACnB,MAAI,MAAM,GAAG;AACX,WAAO,cAAc,GAAG,GAAG,EAAE,OAAO,UAAU,CAAC;AAAA,EACjD;AACA,QAAM,KAAK,IAAI,GAAG,CAAC;AACnB,MAAI,MAAM,IAAI;AACZ,WAAO,cAAc,GAAG,GAAG,EAAE,OAAO,UAAU,CAAC;AAAA,EACjD;AACA,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAE9C,SAAO,cAAc,GAAG,IAAI,EAAE,OAAO,UAAU,CAAC;AAClD;AAEA,SAAS,IAAI,GAAa,GAAa;AACrC,SAAO,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACjC;AAGA,IAAO,sCAAQ;","names":[]}
1
+ {"version":3,"sources":["../../index.ts"],"sourcesContent":["// Taken from http://geomalgorithms.com/a02-_lines.html\nimport { Feature, LineString } from \"geojson\";\nimport {\n convertLength,\n Coord,\n feature,\n lineString,\n point,\n Units,\n} from \"@turf/helpers\";\nimport { nearestPointOnLine } from \"@turf/nearest-point-on-line\";\nimport { featureOf } from \"@turf/invariant\";\nimport { segmentEach } from \"@turf/meta\";\nimport { rhumbDistance } from \"@turf/rhumb-distance\";\n\n/**\n * Calculates the distance between a given point and the nearest point on a\n * line. Sometimes referred to as the cross track distance.\n *\n * @function\n * @param {Feature<Point>|Array<number>} pt Feature or Geometry\n * @param {Feature<LineString>} line GeoJSON Feature or Geometry\n * @param {Object} [options={}] Optional parameters\n * @param {Units} [options.units=\"kilometers\"] Supports all valid Turf {@link https://turfjs.org/docs/api/types/Units Units}\n * @param {string} [options.method=\"geodesic\"] whether to calculate the distance based on geodesic (spheroid) or\n * planar (flat) method. Valid options are 'geodesic' or 'planar'.\n * @returns {number} distance between point and line\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[1, 1],[-1, 1]]);\n *\n * var distance = turf.pointToLineDistance(pt, line, {units: 'miles'});\n * //=69.11854715938406\n */\nfunction pointToLineDistance(\n pt: Coord,\n line: Feature<LineString> | LineString,\n options: {\n units?: Units;\n method?: \"geodesic\" | \"planar\";\n } = {}\n): number {\n // Optional parameters\n const method = options.method ?? \"geodesic\";\n const units = options.units ?? \"kilometers\";\n\n // validation\n if (!pt) {\n throw new Error(\"pt is required\");\n }\n if (Array.isArray(pt)) {\n pt = point(pt);\n } else if (pt.type === \"Point\") {\n pt = feature(pt);\n } else {\n featureOf(pt, \"Point\", \"point\");\n }\n\n if (!line) {\n throw new Error(\"line is required\");\n }\n if (Array.isArray(line)) {\n line = lineString(line);\n } else if (line.type === \"LineString\") {\n line = feature(line);\n } else {\n featureOf(line, \"LineString\", \"line\");\n }\n\n let distance = Infinity;\n const p = pt.geometry.coordinates;\n segmentEach(line, (segment) => {\n if (segment) {\n const a = segment.geometry.coordinates[0];\n const b = segment.geometry.coordinates[1];\n const d = distanceToSegment(p, a, b, { method });\n if (d < distance) {\n distance = d;\n }\n }\n });\n return convertLength(distance, \"degrees\", units);\n}\n\n/**\n * Returns the distance between a point P on a segment AB.\n *\n * @private\n * @param {Array<number>} p external point\n * @param {Array<number>} a first segment point\n * @param {Array<number>} b second segment point\n * @param {Object} [options={}] Optional parameters\n * @returns {number} distance\n */\nfunction distanceToSegment(\n p: number[], // point to measure from\n a: number[], // start point of the segment to measure to\n b: number[], // end point of the segment to measure to\n options: {\n method: \"geodesic\" | \"planar\";\n }\n) {\n // Internally just use degrees, and then convert to the user's requested units\n // in the calling function.\n if (options.method === \"geodesic\") {\n // Use nearestPointOnLine to properly calculate distances on a spherical\n // Earth.\n const nearest = nearestPointOnLine(lineString([a, b]).geometry, p, {\n units: \"degrees\",\n });\n return nearest.properties.dist;\n }\n\n // Perform scalar calculations instead using rhumb lines.\n const v = [b[0] - a[0], b[1] - a[1]];\n const w = [p[0] - a[0], p[1] - a[1]];\n\n const c1 = dot(w, v);\n if (c1 <= 0) {\n return rhumbDistance(p, a, { units: \"degrees\" });\n }\n const c2 = dot(v, v);\n if (c2 <= c1) {\n return rhumbDistance(p, b, { units: \"degrees\" });\n }\n const b2 = c1 / c2;\n const Pb = [a[0] + b2 * v[0], a[1] + b2 * v[1]];\n\n return rhumbDistance(p, Pb, { units: \"degrees\" });\n}\n\nfunction dot(u: number[], v: number[]) {\n return u[0] * v[0] + u[1] * v[1];\n}\n\nexport { pointToLineDistance };\nexport default pointToLineDistance;\n"],"mappings":";AAEA;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AACP,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAqB9B,SAAS,oBACP,IACA,MACA,UAGI,CAAC,GACG;AAzCV;AA2CE,QAAM,UAAS,aAAQ,WAAR,YAAkB;AACjC,QAAM,SAAQ,aAAQ,UAAR,YAAiB;AAG/B,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,gBAAgB;AAAA,EAClC;AACA,MAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,SAAK,MAAM,EAAE;AAAA,EACf,WAAW,GAAG,SAAS,SAAS;AAC9B,SAAK,QAAQ,EAAE;AAAA,EACjB,OAAO;AACL,cAAU,IAAI,SAAS,OAAO;AAAA,EAChC;AAEA,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,kBAAkB;AAAA,EACpC;AACA,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,WAAW,IAAI;AAAA,EACxB,WAAW,KAAK,SAAS,cAAc;AACrC,WAAO,QAAQ,IAAI;AAAA,EACrB,OAAO;AACL,cAAU,MAAM,cAAc,MAAM;AAAA,EACtC;AAEA,MAAI,WAAW;AACf,QAAM,IAAI,GAAG,SAAS;AACtB,cAAY,MAAM,CAAC,YAAY;AAC7B,QAAI,SAAS;AACX,YAAM,IAAI,QAAQ,SAAS,YAAY,CAAC;AACxC,YAAM,IAAI,QAAQ,SAAS,YAAY,CAAC;AACxC,YAAM,IAAI,kBAAkB,GAAG,GAAG,GAAG,EAAE,OAAO,CAAC;AAC/C,UAAI,IAAI,UAAU;AAChB,mBAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,cAAc,UAAU,WAAW,KAAK;AACjD;AAYA,SAAS,kBACP,GACA,GACA,GACA,SAGA;AAGA,MAAI,QAAQ,WAAW,YAAY;AAGjC,UAAM,UAAU,mBAAmB,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG;AAAA,MACjE,OAAO;AAAA,IACT,CAAC;AACD,WAAO,QAAQ,WAAW;AAAA,EAC5B;AAGA,QAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,QAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnC,QAAM,KAAK,IAAI,GAAG,CAAC;AACnB,MAAI,MAAM,GAAG;AACX,WAAO,cAAc,GAAG,GAAG,EAAE,OAAO,UAAU,CAAC;AAAA,EACjD;AACA,QAAM,KAAK,IAAI,GAAG,CAAC;AACnB,MAAI,MAAM,IAAI;AACZ,WAAO,cAAc,GAAG,GAAG,EAAE,OAAO,UAAU,CAAC;AAAA,EACjD;AACA,QAAM,KAAK,KAAK;AAChB,QAAM,KAAK,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAE9C,SAAO,cAAc,GAAG,IAAI,EAAE,OAAO,UAAU,CAAC;AAClD;AAEA,SAAS,IAAI,GAAa,GAAa;AACrC,SAAO,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACjC;AAGA,IAAO,gBAAQ;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@turf/point-to-line-distance",
3
- "version": "7.2.0",
4
- "description": "turf point-to-line-distance module",
3
+ "version": "7.3.0",
4
+ "description": "Calculates the distance between a given point and the nearest point on a line.",
5
5
  "author": "Turf Authors",
6
6
  "contributors": [
7
7
  "Stefano Borghi <@stebogit>"
@@ -54,30 +54,30 @@
54
54
  "test:types": "tsc --esModuleInterop --module node16 --moduleResolution node16 --noEmit --strict types.ts"
55
55
  },
56
56
  "devDependencies": {
57
- "@turf/circle": "^7.2.0",
57
+ "@turf/circle": "7.3.0",
58
58
  "@types/benchmark": "^2.1.5",
59
- "@types/tape": "^4.13.4",
59
+ "@types/tape": "^5.8.1",
60
60
  "benchmark": "^2.1.4",
61
61
  "load-json-file": "^7.0.1",
62
62
  "npm-run-all": "^4.1.5",
63
63
  "tape": "^5.9.0",
64
- "tsup": "^8.3.5",
65
- "tsx": "^4.19.2",
66
- "typescript": "^5.5.4",
67
- "write-json-file": "^5.0.0"
64
+ "tsup": "^8.4.0",
65
+ "tsx": "^4.19.4",
66
+ "typescript": "^5.8.3",
67
+ "write-json-file": "^6.0.0"
68
68
  },
69
69
  "dependencies": {
70
- "@turf/bearing": "^7.2.0",
71
- "@turf/distance": "^7.2.0",
72
- "@turf/helpers": "^7.2.0",
73
- "@turf/invariant": "^7.2.0",
74
- "@turf/meta": "^7.2.0",
75
- "@turf/nearest-point-on-line": "^7.2.0",
76
- "@turf/projection": "^7.2.0",
77
- "@turf/rhumb-bearing": "^7.2.0",
78
- "@turf/rhumb-distance": "^7.2.0",
70
+ "@turf/bearing": "7.3.0",
71
+ "@turf/distance": "7.3.0",
72
+ "@turf/helpers": "7.3.0",
73
+ "@turf/invariant": "7.3.0",
74
+ "@turf/meta": "7.3.0",
75
+ "@turf/nearest-point-on-line": "7.3.0",
76
+ "@turf/projection": "7.3.0",
77
+ "@turf/rhumb-bearing": "7.3.0",
78
+ "@turf/rhumb-distance": "7.3.0",
79
79
  "@types/geojson": "^7946.0.10",
80
80
  "tslib": "^2.8.1"
81
81
  },
82
- "gitHead": "7b0f0374c4668cd569f8904c71e2ae7d941be867"
82
+ "gitHead": "9f58a103e8f9a587ab640307ed03ba5233913ddd"
83
83
  }