@dartcom/ui-kit 10.5.14 → 10.5.15
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/dist/index.cjs +72 -19
- package/dist/services/map/map.constants.d.ts +11 -0
- package/dist/services/map/map.constants.d.ts.map +1 -0
- package/dist/services/map/map.constants.esm.js +1 -0
- package/dist/services/map/map.service.d.ts +40 -16
- package/dist/services/map/map.service.d.ts.map +1 -1
- package/dist/services/map/map.service.esm.js +1 -1
- package/dist/services/map/map.types.d.ts +5 -0
- package/dist/services/map/map.types.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -8896,6 +8896,21 @@ class LoggerService {
|
|
|
8896
8896
|
}
|
|
8897
8897
|
const loggerService = new LoggerService();
|
|
8898
8898
|
|
|
8899
|
+
/**
|
|
8900
|
+
* Коэффициенты перевода единиц в метры.
|
|
8901
|
+
*
|
|
8902
|
+
* Значение — сколько метров содержится в одной единице.
|
|
8903
|
+
*
|
|
8904
|
+
* Основано на стандартных метрических и международных определениях
|
|
8905
|
+
* (1 km = 1000 m, 1 mi = 1609.344 m, 1 NM = 1852 m и т.д.). [web:45][web:48][web:54]
|
|
8906
|
+
*/
|
|
8907
|
+
const DISTANCE_UNIT_FACTORS = {
|
|
8908
|
+
meters: 1,
|
|
8909
|
+
kilometers: 1_000,
|
|
8910
|
+
miles: 1_609.344,
|
|
8911
|
+
nauticalMiles: 1_852,
|
|
8912
|
+
};
|
|
8913
|
+
|
|
8899
8914
|
function getDefaultExportFromCjs (x) {
|
|
8900
8915
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
8901
8916
|
}
|
|
@@ -23532,27 +23547,22 @@ class MapService {
|
|
|
23532
23547
|
* Вычисляет координату точки назначения по исходной точке,
|
|
23533
23548
|
* расстоянию и азимуту.
|
|
23534
23549
|
*
|
|
23535
|
-
*
|
|
23536
|
-
*
|
|
23550
|
+
* Расстояние можно задавать в произвольной поддерживаемой единице
|
|
23551
|
+
* (по умолчанию метры) — перед вычислениями оно будет переведено в метры.
|
|
23537
23552
|
*
|
|
23538
|
-
* @param params - Параметры
|
|
23553
|
+
* @param params - Параметры расчёта.
|
|
23539
23554
|
* @param params.coordinate - Исходная координата.
|
|
23540
|
-
* @param params.distance - Расстояние до точки назначения в
|
|
23555
|
+
* @param params.distance - Расстояние до точки назначения в заданной единице.
|
|
23541
23556
|
* @param params.azimuth - Азимут движения в градусах.
|
|
23557
|
+
* @param params.unit - Единица, в которой задано расстояние (по умолчанию метры).
|
|
23542
23558
|
* @returns Координата точки назначения в формате `{ lat, lon }`.
|
|
23543
|
-
*
|
|
23544
|
-
* @example
|
|
23545
|
-
* mapService.calculateDestination({
|
|
23546
|
-
* coordinate: { lat: 55.75, lon: 37.61 },
|
|
23547
|
-
* distance: 1000,
|
|
23548
|
-
* azimuth: 90,
|
|
23549
|
-
* });
|
|
23550
23559
|
*/
|
|
23551
|
-
calculateDestination = ({ coordinate, distance, azimuth, }) => {
|
|
23560
|
+
calculateDestination = ({ coordinate, distance, azimuth, unit = 'meters', }) => {
|
|
23552
23561
|
const φ1 = coordinate.lat * this.DEG_TO_RAD;
|
|
23553
23562
|
const λ1 = coordinate.lon * this.DEG_TO_RAD;
|
|
23554
23563
|
const θ = this.normalizeBearing(azimuth) * this.DEG_TO_RAD;
|
|
23555
|
-
const
|
|
23564
|
+
const distanceInMeters = this.distanceToMeters(distance, unit);
|
|
23565
|
+
const δ = distanceInMeters / this.EARTH_RADIUS_M;
|
|
23556
23566
|
const sinφ1 = Math.sin(φ1);
|
|
23557
23567
|
const cosφ1 = Math.cos(φ1);
|
|
23558
23568
|
const sinδ = Math.sin(δ);
|
|
@@ -23570,14 +23580,15 @@ class MapService {
|
|
|
23570
23580
|
* Вычисляет расстояние между двумя географическими точками
|
|
23571
23581
|
* по формуле гаверсинуса.
|
|
23572
23582
|
*
|
|
23573
|
-
*
|
|
23574
|
-
*
|
|
23583
|
+
* По умолчанию возвращает значение в метрах, но можно запросить
|
|
23584
|
+
* километры, мили или морские мили.
|
|
23575
23585
|
*
|
|
23576
23586
|
* @param a - Первая координата.
|
|
23577
23587
|
* @param b - Вторая координата.
|
|
23578
|
-
* @
|
|
23588
|
+
* @param unit - Единица измерения результата (по умолчанию метры).
|
|
23589
|
+
* @returns Расстояние между точками в выбранной единице.
|
|
23579
23590
|
*/
|
|
23580
|
-
haversineDistance(a, b) {
|
|
23591
|
+
haversineDistance(a, b, unit = 'meters') {
|
|
23581
23592
|
const φ1 = a.lat * this.DEG_TO_RAD;
|
|
23582
23593
|
const φ2 = b.lat * this.DEG_TO_RAD;
|
|
23583
23594
|
const Δφ = (b.lat - a.lat) * this.DEG_TO_RAD;
|
|
@@ -23585,8 +23596,8 @@ class MapService {
|
|
|
23585
23596
|
const h = Math.sin(Δφ / 2) ** 2 +
|
|
23586
23597
|
Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ / 2) ** 2;
|
|
23587
23598
|
const c = 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h));
|
|
23588
|
-
const
|
|
23589
|
-
return
|
|
23599
|
+
const distanceInMeters = this.EARTH_RADIUS_M * c;
|
|
23600
|
+
return this.convertDistance(distanceInMeters, unit);
|
|
23590
23601
|
}
|
|
23591
23602
|
/**
|
|
23592
23603
|
* Вычисляет начальный азимут из точки `a` в точку `b`.
|
|
@@ -23609,6 +23620,48 @@ class MapService {
|
|
|
23609
23620
|
const initialBearing = this.normalizeBearing(Math.atan2(y, x) * this.RAD_TO_DEG);
|
|
23610
23621
|
return initialBearing;
|
|
23611
23622
|
}
|
|
23623
|
+
/**
|
|
23624
|
+
* Переводит расстояние в метрах в заданную единицу измерения.
|
|
23625
|
+
*
|
|
23626
|
+
* @param distanceInMeters - Расстояние в метрах.
|
|
23627
|
+
* @param unit - Желаемая единица измерения (по умолчанию метры).
|
|
23628
|
+
* @returns Расстояние в выбранной единице.
|
|
23629
|
+
*/
|
|
23630
|
+
convertDistance(distanceInMeters, unit = 'meters') {
|
|
23631
|
+
const factor = DISTANCE_UNIT_FACTORS[unit];
|
|
23632
|
+
return distanceInMeters / factor;
|
|
23633
|
+
}
|
|
23634
|
+
/**
|
|
23635
|
+
* Переводит расстояние из заданной единицы измерения в метры.
|
|
23636
|
+
*
|
|
23637
|
+
* @param distance - Расстояние в выбранной единице измерения.
|
|
23638
|
+
* @param unit - Единица, в которой передано расстояние.
|
|
23639
|
+
* @returns Расстояние в метрах.
|
|
23640
|
+
*/
|
|
23641
|
+
distanceToMeters(distance, unit = 'meters') {
|
|
23642
|
+
const factor = DISTANCE_UNIT_FACTORS[unit];
|
|
23643
|
+
return distance * factor;
|
|
23644
|
+
}
|
|
23645
|
+
/**
|
|
23646
|
+
* Вычисляет общую длину ломаной линии (полилинии) по массиву координат.
|
|
23647
|
+
*
|
|
23648
|
+
* Суммирует расстояния между последовательными точками.
|
|
23649
|
+
* По умолчанию возвращает метры, но можно указать другую единицу.
|
|
23650
|
+
*
|
|
23651
|
+
* @param coordinates - Массив координат, образующих ломаную линию.
|
|
23652
|
+
* @param unit - Единица измерения результата (по умолчанию метры).
|
|
23653
|
+
* @returns Общая длина полилинии в выбранной единице.
|
|
23654
|
+
*/
|
|
23655
|
+
getPolylineLength(coordinates, unit = 'meters') {
|
|
23656
|
+
const totalLengthInMeters = coordinates.reduce((totalLength, coordinate, index, coords) => {
|
|
23657
|
+
const nextCoordinate = coords[index + 1];
|
|
23658
|
+
if (!nextCoordinate)
|
|
23659
|
+
return totalLength;
|
|
23660
|
+
const segmentLength = this.haversineDistance(coordinate, nextCoordinate, 'meters');
|
|
23661
|
+
return totalLength + segmentLength;
|
|
23662
|
+
}, 0);
|
|
23663
|
+
return this.convertDistance(totalLengthInMeters, unit);
|
|
23664
|
+
}
|
|
23612
23665
|
}
|
|
23613
23666
|
/**
|
|
23614
23667
|
* Сервис для работы с географическими координатами и базовыми
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DistanceUnit } from './map.types';
|
|
2
|
+
/**
|
|
3
|
+
* Коэффициенты перевода единиц в метры.
|
|
4
|
+
*
|
|
5
|
+
* Значение — сколько метров содержится в одной единице.
|
|
6
|
+
*
|
|
7
|
+
* Основано на стандартных метрических и международных определениях
|
|
8
|
+
* (1 km = 1000 m, 1 mi = 1609.344 m, 1 NM = 1852 m и т.д.). [web:45][web:48][web:54]
|
|
9
|
+
*/
|
|
10
|
+
export declare const DISTANCE_UNIT_FACTORS: Record<DistanceUnit, number>;
|
|
11
|
+
//# sourceMappingURL=map.constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.constants.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAK9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={meters:1,kilometers:1e3,miles:1609.344,nauticalMiles:1852};export{e as DISTANCE_UNIT_FACTORS};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Coordinate } from '../../lib';
|
|
2
|
+
import { DistanceUnit } from './map.types';
|
|
2
3
|
import { LatLng } from 'leaflet';
|
|
3
4
|
declare class MapService {
|
|
4
5
|
/**
|
|
@@ -78,26 +79,21 @@ declare class MapService {
|
|
|
78
79
|
* Вычисляет координату точки назначения по исходной точке,
|
|
79
80
|
* расстоянию и азимуту.
|
|
80
81
|
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
82
|
+
* Расстояние можно задавать в произвольной поддерживаемой единице
|
|
83
|
+
* (по умолчанию метры) — перед вычислениями оно будет переведено в метры.
|
|
83
84
|
*
|
|
84
|
-
* @param params - Параметры
|
|
85
|
+
* @param params - Параметры расчёта.
|
|
85
86
|
* @param params.coordinate - Исходная координата.
|
|
86
|
-
* @param params.distance - Расстояние до точки назначения в
|
|
87
|
+
* @param params.distance - Расстояние до точки назначения в заданной единице.
|
|
87
88
|
* @param params.azimuth - Азимут движения в градусах.
|
|
89
|
+
* @param params.unit - Единица, в которой задано расстояние (по умолчанию метры).
|
|
88
90
|
* @returns Координата точки назначения в формате `{ lat, lon }`.
|
|
89
|
-
*
|
|
90
|
-
* @example
|
|
91
|
-
* mapService.calculateDestination({
|
|
92
|
-
* coordinate: { lat: 55.75, lon: 37.61 },
|
|
93
|
-
* distance: 1000,
|
|
94
|
-
* azimuth: 90,
|
|
95
|
-
* });
|
|
96
91
|
*/
|
|
97
|
-
calculateDestination: ({ coordinate, distance, azimuth, }: {
|
|
92
|
+
calculateDestination: ({ coordinate, distance, azimuth, unit, }: {
|
|
98
93
|
coordinate: Coordinate;
|
|
99
94
|
distance: number;
|
|
100
95
|
azimuth: number;
|
|
96
|
+
unit?: DistanceUnit;
|
|
101
97
|
}) => {
|
|
102
98
|
lat: number;
|
|
103
99
|
lon: number;
|
|
@@ -106,14 +102,15 @@ declare class MapService {
|
|
|
106
102
|
* Вычисляет расстояние между двумя географическими точками
|
|
107
103
|
* по формуле гаверсинуса.
|
|
108
104
|
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
105
|
+
* По умолчанию возвращает значение в метрах, но можно запросить
|
|
106
|
+
* километры, мили или морские мили.
|
|
111
107
|
*
|
|
112
108
|
* @param a - Первая координата.
|
|
113
109
|
* @param b - Вторая координата.
|
|
114
|
-
* @
|
|
110
|
+
* @param unit - Единица измерения результата (по умолчанию метры).
|
|
111
|
+
* @returns Расстояние между точками в выбранной единице.
|
|
115
112
|
*/
|
|
116
|
-
haversineDistance(a: Coordinate, b: Coordinate): number;
|
|
113
|
+
haversineDistance(a: Coordinate, b: Coordinate, unit?: DistanceUnit): number;
|
|
117
114
|
/**
|
|
118
115
|
* Вычисляет начальный азимут из точки `a` в точку `b`.
|
|
119
116
|
*
|
|
@@ -125,6 +122,33 @@ declare class MapService {
|
|
|
125
122
|
* @returns Начальный азимут в градусах.
|
|
126
123
|
*/
|
|
127
124
|
initialBearing(a: Coordinate, b: Coordinate): number;
|
|
125
|
+
/**
|
|
126
|
+
* Переводит расстояние в метрах в заданную единицу измерения.
|
|
127
|
+
*
|
|
128
|
+
* @param distanceInMeters - Расстояние в метрах.
|
|
129
|
+
* @param unit - Желаемая единица измерения (по умолчанию метры).
|
|
130
|
+
* @returns Расстояние в выбранной единице.
|
|
131
|
+
*/
|
|
132
|
+
convertDistance(distanceInMeters: number, unit?: DistanceUnit): number;
|
|
133
|
+
/**
|
|
134
|
+
* Переводит расстояние из заданной единицы измерения в метры.
|
|
135
|
+
*
|
|
136
|
+
* @param distance - Расстояние в выбранной единице измерения.
|
|
137
|
+
* @param unit - Единица, в которой передано расстояние.
|
|
138
|
+
* @returns Расстояние в метрах.
|
|
139
|
+
*/
|
|
140
|
+
private distanceToMeters;
|
|
141
|
+
/**
|
|
142
|
+
* Вычисляет общую длину ломаной линии (полилинии) по массиву координат.
|
|
143
|
+
*
|
|
144
|
+
* Суммирует расстояния между последовательными точками.
|
|
145
|
+
* По умолчанию возвращает метры, но можно указать другую единицу.
|
|
146
|
+
*
|
|
147
|
+
* @param coordinates - Массив координат, образующих ломаную линию.
|
|
148
|
+
* @param unit - Единица измерения результата (по умолчанию метры).
|
|
149
|
+
* @returns Общая длина полилинии в выбранной единице.
|
|
150
|
+
*/
|
|
151
|
+
getPolylineLength(coordinates: Coordinate[], unit?: DistanceUnit): number;
|
|
128
152
|
}
|
|
129
153
|
/**
|
|
130
154
|
* Сервис для работы с географическими координатами и базовыми
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.service.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"map.service.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,cAAM,UAAU;IACd;;OAEG;IACH,SAAgB,cAAc,WAAa;IAE3C;;OAEG;IACH,SAAgB,mBAAmB,OAAO;IAE1C;;;;;;;OAOG;IACH,IAAW,mBAAmB,WAE7B;IAED;;;;;;OAMG;IACH,IAAW,UAAU,WAEpB;IAED;;;;;;OAMG;IACH,IAAW,UAAU,WAEpB;;IAID;;;;;OAKG;IACI,qBAAqB,CAAC,MAAM,EAAE,MAAM;IAW3C;;;;;OAKG;IACI,qBAAqB,CAAC,UAAU,EAAE,UAAU;IAQnD;;;;;;;;;;;;OAYG;IACI,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAOvC;;;;;;;;;OASG;IACI,kBAAkB,CAAC,GAAG,EAAE,MAAM;IAQrC;;;;;;;;;;;;;OAaG;IACI,oBAAoB,GAAI,0CAK5B;QACD,UAAU,EAAE,UAAU,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB;;;MAwBC;IAEF;;;;;;;;;;;OAWG;IACI,iBAAiB,CACtB,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,UAAU,EACb,IAAI,GAAE,YAAuB;IAkB/B;;;;;;;;;OASG;IACI,cAAc,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAkBlD;;;;;;OAMG;IACI,eAAe,CACpB,gBAAgB,EAAE,MAAM,EACxB,IAAI,GAAE,YAAuB;IAO/B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;;;;;;;;OASG;IACI,iBAAiB,CACtB,WAAW,EAAE,UAAU,EAAE,EACzB,IAAI,GAAE,YAAuB;CAqBhC;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,YAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{DISTANCE_UNIT_FACTORS as t}from"./map.constants.esm.js";import{a as s}from"../../_virtual/leaflet-src.esm.js";const n=new class{EARTH_RADIUS_M=6371e3;FULL_CIRCLE_DEGREES=360;get HALF_CIRCLE_DEGREES(){return this.FULL_CIRCLE_DEGREES/2}get DEG_TO_RAD(){return Math.PI/this.HALF_CIRCLE_DEGREES}get RAD_TO_DEG(){return this.HALF_CIRCLE_DEGREES/Math.PI}constructor(){}getCoordinateByLatLng(t){const{lat:s,lng:n}=t;return{lat:s,lon:n}}getLatLngByCoordinate(t){const{lat:n,lon:a}=t;return new s.LatLng(n,a)}normalizeBearing(t){return(t%this.FULL_CIRCLE_DEGREES+this.FULL_CIRCLE_DEGREES)%this.FULL_CIRCLE_DEGREES}normalizeLongitude(t){return(t+this.FULL_CIRCLE_DEGREES+this.HALF_CIRCLE_DEGREES)%this.FULL_CIRCLE_DEGREES-this.HALF_CIRCLE_DEGREES}calculateDestination=({coordinate:t,distance:s,azimuth:n,unit:a="meters"})=>{const e=t.lat*this.DEG_TO_RAD,i=t.lon*this.DEG_TO_RAD,r=this.normalizeBearing(n)*this.DEG_TO_RAD,E=this.distanceToMeters(s,a)/this.EARTH_RADIUS_M,h=Math.sin(e),_=Math.cos(e),o=Math.sin(E),D=Math.cos(E),R=Math.sin(r),L=Math.cos(r),c=Math.asin(h*D+_*o*L),l=i+Math.atan2(R*o*_,D-h*Math.sin(c));return{lat:c*this.RAD_TO_DEG,lon:this.normalizeLongitude(l*this.RAD_TO_DEG)}};haversineDistance(t,s,n="meters"){const a=t.lat*this.DEG_TO_RAD,e=s.lat*this.DEG_TO_RAD,i=(s.lat-t.lat)*this.DEG_TO_RAD,r=(s.lon-t.lon)*this.DEG_TO_RAD,E=Math.sin(i/2)**2+Math.cos(a)*Math.cos(e)*Math.sin(r/2)**2,h=2*Math.atan2(Math.sqrt(E),Math.sqrt(1-E)),_=this.EARTH_RADIUS_M*h;return this.convertDistance(_,n)}initialBearing(t,s){const n=t.lat*this.DEG_TO_RAD,a=s.lat*this.DEG_TO_RAD,e=t.lon*this.DEG_TO_RAD,i=s.lon*this.DEG_TO_RAD,r=Math.sin(i-e)*Math.cos(a),E=Math.cos(n)*Math.sin(a)-Math.sin(n)*Math.cos(a)*Math.cos(i-e);return this.normalizeBearing(Math.atan2(r,E)*this.RAD_TO_DEG)}convertDistance(s,n="meters"){return s/t[n]}distanceToMeters(s,n="meters"){return s*t[n]}getPolylineLength(t,s="meters"){const n=t.reduce((t,s,n,a)=>{const e=a[n+1];if(!e)return t;return t+this.haversineDistance(s,e,"meters")},0);return this.convertDistance(n,s)}};export{n as mapService};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.types.d.ts","sourceRoot":"","sources":["../../../src/services/map/map.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,GAAG,eAAe,CAAC"}
|