leaflet-polydraw 0.8.5
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/LICENCE +21 -0
- package/README.md +1006 -0
- package/dist/icons/icon-activate.svg +1 -0
- package/dist/icons/icon-add-elbow.svg +128 -0
- package/dist/icons/icon-bbox.svg +47 -0
- package/dist/icons/icon-bezier.svg +132 -0
- package/dist/icons/icon-draw.svg +1 -0
- package/dist/icons/icon-erase.svg +3 -0
- package/dist/icons/icon-info-white.svg +25 -0
- package/dist/icons/icon-settings-white.svg +15 -0
- package/dist/icons/icon-simplify.svg +61 -0
- package/dist/icons/icon-simplify2.svg +46 -0
- package/dist/icons/icon-subtract.svg +1 -0
- package/dist/icons/icon-trash-hover-white.svg +16 -0
- package/dist/icons/icon-trash-white.svg +16 -0
- package/dist/leaflet-polydraw.css +1 -0
- package/dist/polydraw.es.js +20688 -0
- package/dist/polydraw.es.js.map +1 -0
- package/dist/polydraw.umd.min.js +2 -0
- package/dist/polydraw.umd.min.js.map +1 -0
- package/dist/styles/polydraw.css +419 -0
- package/dist/types/buttons.d.ts +14 -0
- package/dist/types/buttons.d.ts.map +1 -0
- package/dist/types/coordinate-utils.d.ts +21 -0
- package/dist/types/coordinate-utils.d.ts.map +1 -0
- package/dist/types/enums.d.ts +27 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/geometry-utils.d.ts +24 -0
- package/dist/types/geometry-utils.d.ts.map +1 -0
- package/dist/types/icon-factory.d.ts +13 -0
- package/dist/types/icon-factory.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/managers/mode-manager.d.ts +91 -0
- package/dist/types/managers/mode-manager.d.ts.map +1 -0
- package/dist/types/managers/polygon-draw-manager.d.ts +88 -0
- package/dist/types/managers/polygon-draw-manager.d.ts.map +1 -0
- package/dist/types/managers/polygon-geometry-manager.d.ts +75 -0
- package/dist/types/managers/polygon-geometry-manager.d.ts.map +1 -0
- package/dist/types/managers/polygon-interaction-manager.d.ts +116 -0
- package/dist/types/managers/polygon-interaction-manager.d.ts.map +1 -0
- package/dist/types/managers/polygon-mutation-manager.d.ts +163 -0
- package/dist/types/managers/polygon-mutation-manager.d.ts.map +1 -0
- package/dist/types/map-state.d.ts +22 -0
- package/dist/types/map-state.d.ts.map +1 -0
- package/dist/types/polydraw.d.ts +87 -0
- package/dist/types/polydraw.d.ts.map +1 -0
- package/dist/types/polygon-helpers.d.ts +35 -0
- package/dist/types/polygon-helpers.d.ts.map +1 -0
- package/dist/types/polygon-information.service.d.ts +27 -0
- package/dist/types/polygon-information.service.d.ts.map +1 -0
- package/dist/types/polygon.util.d.ts +32 -0
- package/dist/types/polygon.util.d.ts.map +1 -0
- package/dist/types/turf-helper.d.ts +141 -0
- package/dist/types/turf-helper.d.ts.map +1 -0
- package/dist/types/types/polydraw-interfaces.d.ts +351 -0
- package/dist/types/types/polydraw-interfaces.d.ts.map +1 -0
- package/dist/types/utils.d.ts +57 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as L from 'leaflet';
|
|
2
|
+
import { TurfHelper } from '../turf-helper';
|
|
3
|
+
import type { Feature, Polygon, MultiPolygon } from 'geojson';
|
|
4
|
+
import type { PolydrawConfig } from '../types/polydraw-interfaces';
|
|
5
|
+
import { ModeManager } from './mode-manager';
|
|
6
|
+
export interface DrawResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
polygon?: Feature<Polygon | MultiPolygon>;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface PolygonDrawManagerDependencies {
|
|
12
|
+
turfHelper: TurfHelper;
|
|
13
|
+
map: L.Map;
|
|
14
|
+
config: PolydrawConfig;
|
|
15
|
+
modeManager: ModeManager;
|
|
16
|
+
tracer: L.Polyline;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* PolygonDrawManager handles all user-facing drawing actions.
|
|
20
|
+
* This includes freehand drawing and point-to-point drawing functionality.
|
|
21
|
+
*/
|
|
22
|
+
export declare class PolygonDrawManager {
|
|
23
|
+
private turfHelper;
|
|
24
|
+
private map;
|
|
25
|
+
private config;
|
|
26
|
+
private modeManager;
|
|
27
|
+
private tracer;
|
|
28
|
+
private eventListeners;
|
|
29
|
+
private p2pMarkers;
|
|
30
|
+
constructor(dependencies: PolygonDrawManagerDependencies);
|
|
31
|
+
/**
|
|
32
|
+
* Add event listener
|
|
33
|
+
*/
|
|
34
|
+
on(event: string, callback: (...args: any[]) => void): void;
|
|
35
|
+
/**
|
|
36
|
+
* Emit event to all listeners
|
|
37
|
+
*/
|
|
38
|
+
private emit;
|
|
39
|
+
/**
|
|
40
|
+
* Handle mouse move during freehand drawing
|
|
41
|
+
*/
|
|
42
|
+
mouseMove(event: L.LeafletMouseEvent | TouchEvent): void;
|
|
43
|
+
/**
|
|
44
|
+
* Handle mouse up/leave to complete freehand drawing
|
|
45
|
+
*/
|
|
46
|
+
mouseUpLeave(event: any): Promise<DrawResult>;
|
|
47
|
+
/**
|
|
48
|
+
* Handle point-to-point click
|
|
49
|
+
*/
|
|
50
|
+
handlePointToPointClick(clickLatLng: L.LatLng): void;
|
|
51
|
+
/**
|
|
52
|
+
* Handle double-click to complete point-to-point polygon
|
|
53
|
+
*/
|
|
54
|
+
handleDoubleClick(e: L.LeafletMouseEvent): void;
|
|
55
|
+
/**
|
|
56
|
+
* Complete point-to-point polygon drawing
|
|
57
|
+
*/
|
|
58
|
+
completePointToPointPolygon(): void;
|
|
59
|
+
/**
|
|
60
|
+
* Cancel point-to-point drawing
|
|
61
|
+
*/
|
|
62
|
+
cancelPointToPointDrawing(): void;
|
|
63
|
+
/**
|
|
64
|
+
* Clear all P2P markers
|
|
65
|
+
*/
|
|
66
|
+
clearP2pMarkers(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Reset the tracer
|
|
69
|
+
*/
|
|
70
|
+
resetTracer(): void;
|
|
71
|
+
/**
|
|
72
|
+
* Check if clicking on the first point to close polygon
|
|
73
|
+
*/
|
|
74
|
+
private isClickingFirstPoint;
|
|
75
|
+
/**
|
|
76
|
+
* Get current P2P markers (for external access)
|
|
77
|
+
*/
|
|
78
|
+
getP2pMarkers(): L.Marker[];
|
|
79
|
+
/**
|
|
80
|
+
* Check if currently in point-to-point drawing mode
|
|
81
|
+
*/
|
|
82
|
+
isInPointToPointMode(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get current tracer points count
|
|
85
|
+
*/
|
|
86
|
+
getTracerPointsCount(): number;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=polygon-draw-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-draw-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-draw-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,UAAU,CAAC;IACvB,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,cAAc,CAAwD;IAG9E,OAAO,CAAC,UAAU,CAAkB;gBAExB,YAAY,EAAE,8BAA8B;IASxD;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAQ3D;;OAEG;IACH,OAAO,CAAC,IAAI;IAQZ;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,iBAAiB,GAAG,UAAU,GAAG,IAAI;IAaxD;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IAsDnD;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI;IAyIpD;;OAEG;IACH,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,iBAAiB,GAAG,IAAI;IAe/C;;OAEG;IACH,2BAA2B,IAAI,IAAI;IAkEnC;;OAEG;IACH,yBAAyB,IAAI,IAAI;IAOjC;;OAEG;IACH,eAAe,IAAI,IAAI;IAMvB;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0C5B;;OAEG;IACH,aAAa,IAAI,CAAC,CAAC,MAAM,EAAE;IAK3B;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAK/B;;OAEG;IACH,oBAAoB,IAAI,MAAM;CAK/B"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { TurfHelper } from '../turf-helper';
|
|
2
|
+
import type { Feature, Polygon, MultiPolygon } from 'geojson';
|
|
3
|
+
import type { PolydrawConfig } from '../types/polydraw-interfaces';
|
|
4
|
+
export interface GeometryOperationResult {
|
|
5
|
+
success: boolean;
|
|
6
|
+
result?: Feature<Polygon | MultiPolygon>;
|
|
7
|
+
results?: Feature<Polygon | MultiPolygon>[];
|
|
8
|
+
error?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PolygonGeometryManagerDependencies {
|
|
11
|
+
turfHelper: TurfHelper;
|
|
12
|
+
config: PolydrawConfig;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* PolygonGeometryManager handles pure geometric calculations without any direct map interaction.
|
|
16
|
+
* This includes merging, subtracting, simplifying, and other geometric operations on polygons.
|
|
17
|
+
*/
|
|
18
|
+
export declare class PolygonGeometryManager {
|
|
19
|
+
private turfHelper;
|
|
20
|
+
private config;
|
|
21
|
+
constructor(dependencies: PolygonGeometryManagerDependencies);
|
|
22
|
+
/**
|
|
23
|
+
* Check if two polygons intersect using multiple detection methods
|
|
24
|
+
*/
|
|
25
|
+
checkPolygonIntersection(polygon1: Feature<Polygon | MultiPolygon>, polygon2: Feature<Polygon | MultiPolygon>): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Perform union operation on multiple polygons
|
|
28
|
+
*/
|
|
29
|
+
unionPolygons(polygons: Feature<Polygon | MultiPolygon>[], newPolygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
|
|
30
|
+
/**
|
|
31
|
+
* Perform subtraction operation
|
|
32
|
+
*/
|
|
33
|
+
subtractPolygon(existingPolygon: Feature<Polygon | MultiPolygon>, subtractPolygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
|
|
34
|
+
/**
|
|
35
|
+
* Simplify a polygon by removing every other point
|
|
36
|
+
*/
|
|
37
|
+
simplifyPolygon(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
|
|
38
|
+
/**
|
|
39
|
+
* Convert polygon to bounding box
|
|
40
|
+
*/
|
|
41
|
+
convertToBoundingBox(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
|
|
42
|
+
/**
|
|
43
|
+
* Apply bezier curve to polygon
|
|
44
|
+
*/
|
|
45
|
+
bezierifyPolygon(polygon: Feature<Polygon | MultiPolygon>): GeometryOperationResult;
|
|
46
|
+
/**
|
|
47
|
+
* Double the elbows of a polygon
|
|
48
|
+
*/
|
|
49
|
+
doubleElbowsPolygon(latlngs: L.LatLngLiteral[]): GeometryOperationResult;
|
|
50
|
+
/**
|
|
51
|
+
* Helper method to get polygon center
|
|
52
|
+
*/
|
|
53
|
+
private getPolygonCenter;
|
|
54
|
+
/**
|
|
55
|
+
* Helper method to get bounding box from polygon
|
|
56
|
+
*/
|
|
57
|
+
private getBoundingBox;
|
|
58
|
+
/**
|
|
59
|
+
* Determine if two polygons should create a donut instead of a regular union
|
|
60
|
+
*/
|
|
61
|
+
private shouldCreateDonutPolygon;
|
|
62
|
+
/**
|
|
63
|
+
* Create a donut polygon from two intersecting polygons
|
|
64
|
+
*/
|
|
65
|
+
private createDonutPolygon;
|
|
66
|
+
/**
|
|
67
|
+
* Create donut when one polygon is completely within another
|
|
68
|
+
*/
|
|
69
|
+
private createDonutFromContainment;
|
|
70
|
+
/**
|
|
71
|
+
* Create donut from intersecting polygons (C-to-O scenario)
|
|
72
|
+
*/
|
|
73
|
+
private createDonutFromIntersection;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=polygon-geometry-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-geometry-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-geometry-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kCAAkC;IACjD,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAiB;gBAEnB,YAAY,EAAE,kCAAkC;IAM5D;;OAEG;IACH,wBAAwB,CACtB,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EACzC,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GACxC,OAAO;IAiGV;;OAEG;IACH,aAAa,CACX,QAAQ,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EAAE,EAC3C,UAAU,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAC1C,uBAAuB;IAsC1B;;OAEG;IACH,eAAe,CACb,eAAe,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,EAChD,eAAe,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAC/C,uBAAuB;IAgC1B;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,uBAAuB;IAiDlF;;OAEG;IACH,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,uBAAuB;IAgBvF;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,YAAY,CAAC,GAAG,uBAAuB;IAiBnF;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,GAAG,uBAAuB;IAoBxE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqDxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwDtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwC1B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA8BlC;;OAEG;IACH,OAAO,CAAC,2BAA2B;CA0BpC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import * as L from 'leaflet';
|
|
2
|
+
import { TurfHelper } from '../turf-helper';
|
|
3
|
+
import { PolygonInformationService } from '../polygon-information.service';
|
|
4
|
+
import type { Feature, Polygon, MultiPolygon } from 'geojson';
|
|
5
|
+
import type { PolydrawConfig } from '../types/polydraw-interfaces';
|
|
6
|
+
import { ModeManager } from './mode-manager';
|
|
7
|
+
export interface InteractionResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
featureGroups?: L.FeatureGroup[];
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PolygonInteractionManagerDependencies {
|
|
13
|
+
turfHelper: TurfHelper;
|
|
14
|
+
polygonInformation: PolygonInformationService;
|
|
15
|
+
map: L.Map;
|
|
16
|
+
config: PolydrawConfig;
|
|
17
|
+
modeManager: ModeManager;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* PolygonInteractionManager handles all interactions with existing polygons.
|
|
21
|
+
* This includes dragging polygons, dragging markers, edge interactions, and popup menus.
|
|
22
|
+
*/
|
|
23
|
+
export declare class PolygonInteractionManager {
|
|
24
|
+
private turfHelper;
|
|
25
|
+
private polygonInformation;
|
|
26
|
+
private map;
|
|
27
|
+
private config;
|
|
28
|
+
private modeManager;
|
|
29
|
+
private eventListeners;
|
|
30
|
+
private currentDragPolygon;
|
|
31
|
+
private currentModifierDragMode;
|
|
32
|
+
private isModifierKeyHeld;
|
|
33
|
+
private getFeatureGroups;
|
|
34
|
+
private addFeatureGroup;
|
|
35
|
+
private removeFeatureGroup;
|
|
36
|
+
constructor(dependencies: PolygonInteractionManagerDependencies, featureGroupAccess: {
|
|
37
|
+
getFeatureGroups: () => L.FeatureGroup[];
|
|
38
|
+
addFeatureGroup: (fg: L.FeatureGroup) => void;
|
|
39
|
+
removeFeatureGroup: (fg: L.FeatureGroup) => void;
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* Add event listener
|
|
43
|
+
*/
|
|
44
|
+
on(event: string, callback: (...args: any[]) => void): void;
|
|
45
|
+
/**
|
|
46
|
+
* Emit event to all listeners
|
|
47
|
+
*/
|
|
48
|
+
private emit;
|
|
49
|
+
/**
|
|
50
|
+
* Add markers to a polygon feature group
|
|
51
|
+
*/
|
|
52
|
+
addMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
|
|
53
|
+
/**
|
|
54
|
+
* Add hole markers to a polygon feature group
|
|
55
|
+
*/
|
|
56
|
+
addHoleMarkers(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
|
|
57
|
+
/**
|
|
58
|
+
* Add edge click listeners to a polygon
|
|
59
|
+
*/
|
|
60
|
+
addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void;
|
|
61
|
+
/**
|
|
62
|
+
* Enable polygon dragging functionality
|
|
63
|
+
*/
|
|
64
|
+
enablePolygonDragging(polygon: any, latlngs: Feature<Polygon | MultiPolygon>): void;
|
|
65
|
+
/**
|
|
66
|
+
* Update marker draggable state based on current mode
|
|
67
|
+
*/
|
|
68
|
+
updateMarkerDraggableState(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Update all markers for edge deletion visual feedback
|
|
71
|
+
*/
|
|
72
|
+
updateAllMarkersForEdgeDeletion(showFeedback: boolean): void;
|
|
73
|
+
/**
|
|
74
|
+
* Update individual marker for edge deletion visual feedback
|
|
75
|
+
*/
|
|
76
|
+
updateMarkerForEdgeDeletion(marker: L.Marker, showFeedback: boolean): void;
|
|
77
|
+
/**
|
|
78
|
+
* Set modifier key held state
|
|
79
|
+
*/
|
|
80
|
+
setModifierKeyHeld(isHeld: boolean): void;
|
|
81
|
+
private onEdgeClick;
|
|
82
|
+
private highlightEdgeOnHover;
|
|
83
|
+
private elbowClicked;
|
|
84
|
+
private findFeatureGroupForPoly;
|
|
85
|
+
private markerDrag;
|
|
86
|
+
private markerDragEnd;
|
|
87
|
+
private onPolygonMouseMove;
|
|
88
|
+
private onPolygonMouseUp;
|
|
89
|
+
private offsetPolygonCoordinates;
|
|
90
|
+
private updateMarkersAndHoleLinesDuringDrag;
|
|
91
|
+
private updatePolygonAfterDrag;
|
|
92
|
+
private detectModifierKey;
|
|
93
|
+
private setSubtractVisualMode;
|
|
94
|
+
private updateMarkerColorsForSubtractMode;
|
|
95
|
+
private handleModifierToggleDuringDrag;
|
|
96
|
+
private isModifierDragActive;
|
|
97
|
+
private performModifierSubtract;
|
|
98
|
+
/**
|
|
99
|
+
* Check if two bounding boxes overlap
|
|
100
|
+
*/
|
|
101
|
+
private boundingBoxesOverlap;
|
|
102
|
+
private isModifierKeyPressed;
|
|
103
|
+
private onMarkerHoverForEdgeDeletion;
|
|
104
|
+
private onMarkerHoverForEdgeDeletionEvent;
|
|
105
|
+
private onMarkerLeaveForEdgeDeletionEvent;
|
|
106
|
+
private getMarkerIndex;
|
|
107
|
+
private ensureMarkerSeparation;
|
|
108
|
+
private findAlternativeMarkerPosition;
|
|
109
|
+
private createDivIcon;
|
|
110
|
+
private getLatLngInfoString;
|
|
111
|
+
private generateMenuMarkerPopup;
|
|
112
|
+
private getPolygonGeoJSONFromFeatureGroup;
|
|
113
|
+
private getTotalPolygonPerimeter;
|
|
114
|
+
private generateInfoMarkerPopup;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=polygon-interaction-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-interaction-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-interaction-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import * as L from 'leaflet';
|
|
2
|
+
import { TurfHelper } from '../turf-helper';
|
|
3
|
+
import { PolygonInformationService } from '../polygon-information.service';
|
|
4
|
+
import type { Feature, Polygon, MultiPolygon } from 'geojson';
|
|
5
|
+
import type { PolydrawConfig } from '../types/polydraw-interfaces';
|
|
6
|
+
import { ModeManager } from './mode-manager';
|
|
7
|
+
import { PolygonInteractionManager } from './polygon-interaction-manager';
|
|
8
|
+
export interface MutationResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
featureGroups?: L.FeatureGroup[];
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AddPolygonOptions {
|
|
14
|
+
simplify?: boolean;
|
|
15
|
+
noMerge?: boolean;
|
|
16
|
+
dynamicTolerance?: boolean;
|
|
17
|
+
visualOptimizationLevel?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface MutationManagerDependencies {
|
|
20
|
+
turfHelper: TurfHelper;
|
|
21
|
+
polygonInformation: PolygonInformationService;
|
|
22
|
+
map: L.Map;
|
|
23
|
+
config: PolydrawConfig;
|
|
24
|
+
modeManager: ModeManager;
|
|
25
|
+
getFeatureGroups: () => L.FeatureGroup[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* PolygonMutationManager acts as a facade that coordinates between specialized managers.
|
|
29
|
+
* It maintains the arrayOfFeatureGroups as the single source of truth and delegates
|
|
30
|
+
* operations to the appropriate specialized managers.
|
|
31
|
+
*/
|
|
32
|
+
export declare class PolygonMutationManager {
|
|
33
|
+
private turfHelper;
|
|
34
|
+
private polygonInformation;
|
|
35
|
+
private map;
|
|
36
|
+
private config;
|
|
37
|
+
private modeManager;
|
|
38
|
+
private getFeatureGroups;
|
|
39
|
+
private eventListeners;
|
|
40
|
+
private geometryManager;
|
|
41
|
+
private drawManager;
|
|
42
|
+
private interactionManager;
|
|
43
|
+
constructor(dependencies: MutationManagerDependencies);
|
|
44
|
+
/**
|
|
45
|
+
* Initialize the three specialized managers
|
|
46
|
+
*/
|
|
47
|
+
private initializeSpecializedManagers;
|
|
48
|
+
/**
|
|
49
|
+
* Set up event forwarding from specialized managers to facade
|
|
50
|
+
*/
|
|
51
|
+
private setupEventForwarding;
|
|
52
|
+
/**
|
|
53
|
+
* Handle draw completion from draw manager
|
|
54
|
+
*/
|
|
55
|
+
private handleDrawCompleted;
|
|
56
|
+
/**
|
|
57
|
+
* Handle polygon modification from interaction manager
|
|
58
|
+
*/
|
|
59
|
+
private handlePolygonModified;
|
|
60
|
+
/**
|
|
61
|
+
* Handle menu actions from interaction manager
|
|
62
|
+
*/
|
|
63
|
+
private handleMenuAction;
|
|
64
|
+
/**
|
|
65
|
+
* Get the polygon interaction manager (for testing)
|
|
66
|
+
*/
|
|
67
|
+
get polygonInteractionManager(): PolygonInteractionManager;
|
|
68
|
+
/**
|
|
69
|
+
* Add event listener
|
|
70
|
+
*/
|
|
71
|
+
on(event: string, callback: (...args: any[]) => void): void;
|
|
72
|
+
/**
|
|
73
|
+
* Emit event to all listeners
|
|
74
|
+
*/
|
|
75
|
+
private emit;
|
|
76
|
+
/**
|
|
77
|
+
* Add a polygon with optional merging logic
|
|
78
|
+
*/
|
|
79
|
+
addPolygon(latlngs: Feature<Polygon | MultiPolygon>, options?: AddPolygonOptions): Promise<MutationResult>;
|
|
80
|
+
/**
|
|
81
|
+
* Subtract a polygon from existing polygons
|
|
82
|
+
*/
|
|
83
|
+
subtractPolygon(latlngs: Feature<Polygon | MultiPolygon>): Promise<MutationResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Create and add a polygon layer with all markers and interactions
|
|
86
|
+
*/
|
|
87
|
+
private addPolygonLayer;
|
|
88
|
+
/**
|
|
89
|
+
* Merge a polygon with existing intersecting polygons
|
|
90
|
+
*/
|
|
91
|
+
private mergePolygon;
|
|
92
|
+
/**
|
|
93
|
+
* Union multiple polygons together using geometry manager
|
|
94
|
+
*/
|
|
95
|
+
private unionPolygons;
|
|
96
|
+
/**
|
|
97
|
+
* Create a polygon from GeoJSON feature
|
|
98
|
+
*/
|
|
99
|
+
private getPolygon;
|
|
100
|
+
/**
|
|
101
|
+
* Internal method to add feature group to array
|
|
102
|
+
*/
|
|
103
|
+
private addFeatureGroupInternal;
|
|
104
|
+
/**
|
|
105
|
+
* Internal method to remove feature group from array and map
|
|
106
|
+
*/
|
|
107
|
+
private removeFeatureGroupInternal;
|
|
108
|
+
/**
|
|
109
|
+
* Update marker draggable state
|
|
110
|
+
*/
|
|
111
|
+
updateMarkerDraggableState(): void;
|
|
112
|
+
/**
|
|
113
|
+
* Update all markers for edge deletion visual feedback
|
|
114
|
+
*/
|
|
115
|
+
updateAllMarkersForEdgeDeletion(showFeedback: boolean): void;
|
|
116
|
+
/**
|
|
117
|
+
* Set modifier key held state
|
|
118
|
+
*/
|
|
119
|
+
setModifierKeyHeld(isHeld: boolean): void;
|
|
120
|
+
/**
|
|
121
|
+
* Check if two polygons intersect (delegates to geometry manager)
|
|
122
|
+
*/
|
|
123
|
+
checkPolygonIntersection(polygon1: Feature<Polygon | MultiPolygon>, polygon2: Feature<Polygon | MultiPolygon>): boolean;
|
|
124
|
+
/**
|
|
125
|
+
* Get polygon center (delegates to geometry manager)
|
|
126
|
+
*/
|
|
127
|
+
getPolygonCenter(polygon: Feature<Polygon | MultiPolygon>): {
|
|
128
|
+
lat: number;
|
|
129
|
+
lng: number;
|
|
130
|
+
} | null;
|
|
131
|
+
/**
|
|
132
|
+
* Get bounding box from polygon (delegates to geometry manager)
|
|
133
|
+
*/
|
|
134
|
+
getBoundingBox(polygon: Feature<Polygon | MultiPolygon>): {
|
|
135
|
+
minLat: number;
|
|
136
|
+
maxLat: number;
|
|
137
|
+
minLng: number;
|
|
138
|
+
maxLng: number;
|
|
139
|
+
} | null;
|
|
140
|
+
addMarker(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
|
|
141
|
+
addHoleMarker(latlngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): void;
|
|
142
|
+
addEdgeClickListeners(polygon: L.Polygon, featureGroup: L.FeatureGroup): void;
|
|
143
|
+
enablePolygonDragging(polygon: any, latlngs: Feature<Polygon | MultiPolygon>): void;
|
|
144
|
+
getMarkerIndex(latlngs: L.LatLngLiteral[], position: any): number;
|
|
145
|
+
ensureMarkerSeparation(polygonLength: number, markers: any): any;
|
|
146
|
+
findAlternativeMarkerPosition(polygonLength: number, originalIndex: number, usedIndices: Set<number>): number;
|
|
147
|
+
createDivIcon(processedClasses: string[]): L.DivIcon;
|
|
148
|
+
getLatLngInfoString(latlng: L.LatLngLiteral): string;
|
|
149
|
+
generateMenuMarkerPopup(latLngs: L.LatLngLiteral[], featureGroup: L.FeatureGroup): HTMLDivElement;
|
|
150
|
+
getPolygonGeoJSONFromFeatureGroup(featureGroup: L.FeatureGroup): Feature<Polygon | MultiPolygon>;
|
|
151
|
+
getTotalPolygonPerimeter(polygonGeoJSON: Feature<Polygon | MultiPolygon>): number;
|
|
152
|
+
generateInfoMarkerPopup(area: number, perimeter: number): HTMLDivElement;
|
|
153
|
+
onMarkerHoverForEdgeDeletion(marker: L.Marker, isHovering: boolean): void;
|
|
154
|
+
highlightEdgeOnHover(edgePolyline: L.Polyline, isHovering: boolean): void;
|
|
155
|
+
onEdgeClick(e: L.LeafletMouseEvent, edgePolyline: L.Polyline): void;
|
|
156
|
+
removeFeatureGroup(featureGroup: L.FeatureGroup): void;
|
|
157
|
+
onPolygonMouseMove(e: L.LeafletMouseEvent): void;
|
|
158
|
+
onPolygonMouseUp(e: L.LeafletMouseEvent): void;
|
|
159
|
+
updatePolygonAfterDrag(polygon: any): void;
|
|
160
|
+
setSubtractVisualMode(polygon: any, enabled: boolean): void;
|
|
161
|
+
performModifierSubtract(draggedGeoJSON: any, originalFeatureGroup: L.FeatureGroup): void;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=polygon-mutation-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-mutation-manager.d.ts","sourceRoot":"","sources":["../../../src/managers/polygon-mutation-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as L from 'leaflet';
|
|
2
|
+
/**
|
|
3
|
+
* Service for managing map state and notifying listeners.
|
|
4
|
+
*/
|
|
5
|
+
export declare class MapStateService {
|
|
6
|
+
private map;
|
|
7
|
+
private mapListeners;
|
|
8
|
+
constructor();
|
|
9
|
+
onMapUpdated(callback: (map: L.Map) => void): void;
|
|
10
|
+
private emitMapUpdated;
|
|
11
|
+
/**
|
|
12
|
+
* Updates the current map state and notifies listeners.
|
|
13
|
+
* @param map The Leaflet map instance.
|
|
14
|
+
*/
|
|
15
|
+
updateMapState(map: L.Map): void;
|
|
16
|
+
/**
|
|
17
|
+
* Updates the polygons in the map state.
|
|
18
|
+
* @param polygons Array of polygons.
|
|
19
|
+
*/
|
|
20
|
+
updatePolygons(polygons: L.LatLngLiteral[][][]): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=map-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-state.d.ts","sourceRoot":"","sources":["../../src/map-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,YAAY,CAAgC;;IAMpD,YAAY,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,IAAI,GAAG,IAAI;IAKlD,OAAO,CAAC,cAAc;IAUtB;;;OAGG;IACH,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI;IAKhC;;;OAGG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,GAAG,IAAI;CAGtD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as L from 'leaflet';
|
|
2
|
+
import { DrawMode } from './enums';
|
|
3
|
+
import './styles/polydraw.css';
|
|
4
|
+
import type { PolydrawConfig, DrawModeChangeHandler } from './types/polydraw-interfaces';
|
|
5
|
+
declare class Polydraw extends L.Control {
|
|
6
|
+
private map;
|
|
7
|
+
private tracer;
|
|
8
|
+
private turfHelper;
|
|
9
|
+
private subContainer?;
|
|
10
|
+
private config;
|
|
11
|
+
private mapStateService;
|
|
12
|
+
private polygonInformation;
|
|
13
|
+
private modeManager;
|
|
14
|
+
private polygonMutationManager;
|
|
15
|
+
private arrayOfFeatureGroups;
|
|
16
|
+
private p2pMarkers;
|
|
17
|
+
private drawMode;
|
|
18
|
+
private drawModeListeners;
|
|
19
|
+
private _boundKeyDownHandler;
|
|
20
|
+
private _boundKeyUpHandler;
|
|
21
|
+
private isModifierKeyHeld;
|
|
22
|
+
constructor(options?: L.ControlOptions & {
|
|
23
|
+
config?: PolydrawConfig;
|
|
24
|
+
configPath?: string;
|
|
25
|
+
});
|
|
26
|
+
private loadExternalConfig;
|
|
27
|
+
private initializeComponents;
|
|
28
|
+
onAdd(_map: L.Map): HTMLElement;
|
|
29
|
+
addTo(map: L.Map): this;
|
|
30
|
+
getFeatureGroups(): L.FeatureGroup[];
|
|
31
|
+
onRemove(_map: L.Map): void;
|
|
32
|
+
addPredefinedPolygon(geographicBorders: L.LatLng[][][], options?: {
|
|
33
|
+
visualOptimizationLevel?: number;
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
setDrawMode(mode: DrawMode): void;
|
|
36
|
+
getDrawMode(): DrawMode;
|
|
37
|
+
onDrawModeChangeListener(callback: DrawModeChangeHandler): void;
|
|
38
|
+
offDrawModeChangeListener(callback: DrawModeChangeHandler): void;
|
|
39
|
+
private emitDrawModeChanged;
|
|
40
|
+
/**
|
|
41
|
+
* Update the draggable state of all existing markers when draw mode changes
|
|
42
|
+
*/
|
|
43
|
+
private updateMarkerDraggableState;
|
|
44
|
+
removeAllFeatureGroups(): void;
|
|
45
|
+
private stopDraw;
|
|
46
|
+
private setLeafletMapEvents;
|
|
47
|
+
private resetTracker;
|
|
48
|
+
private drawStartedEvents;
|
|
49
|
+
private mouseMove;
|
|
50
|
+
private mouseUpLeave;
|
|
51
|
+
private events;
|
|
52
|
+
private mouseDown;
|
|
53
|
+
private startDraw;
|
|
54
|
+
private setupKeyboardHandlers;
|
|
55
|
+
private removeKeyboardHandlers;
|
|
56
|
+
private handleKeyDown;
|
|
57
|
+
private handleKeyUp;
|
|
58
|
+
/**
|
|
59
|
+
* Update all markers to show/hide edge deletion visual feedback
|
|
60
|
+
*/
|
|
61
|
+
private updateAllMarkersForEdgeDeletion;
|
|
62
|
+
/**
|
|
63
|
+
* Update individual marker for edge deletion visual feedback
|
|
64
|
+
*/
|
|
65
|
+
private updateMarkerForEdgeDeletion;
|
|
66
|
+
/**
|
|
67
|
+
* Handle marker hover when modifier key is held - event handler version
|
|
68
|
+
*/
|
|
69
|
+
private onMarkerHoverForEdgeDeletionEvent;
|
|
70
|
+
/**
|
|
71
|
+
* Handle marker leave when modifier key is held - event handler version
|
|
72
|
+
*/
|
|
73
|
+
private onMarkerLeaveForEdgeDeletionEvent;
|
|
74
|
+
private cancelPointToPointDrawing;
|
|
75
|
+
private handlePointToPointClick;
|
|
76
|
+
private isClickingFirstPoint;
|
|
77
|
+
private handleDoubleClick;
|
|
78
|
+
private completePointToPointPolygon;
|
|
79
|
+
private clearP2pMarkers;
|
|
80
|
+
/**
|
|
81
|
+
* Detect if modifier key is pressed (Ctrl on Windows/Linux, Cmd on Mac)
|
|
82
|
+
*/
|
|
83
|
+
private isModifierKeyPressed;
|
|
84
|
+
private updateActivateButtonIndicator;
|
|
85
|
+
}
|
|
86
|
+
export default Polydraw;
|
|
87
|
+
//# sourceMappingURL=polydraw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polydraw.d.ts","sourceRoot":"","sources":["../../src/polydraw.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,QAAQ,EAAkB,MAAM,SAAS,CAAC;AAQnD,OAAO,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEzF,cAAM,QAAS,SAAQ,CAAC,CAAC,OAAO;IAC9B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAc;IACnC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,sBAAsB,CAAyB;IACvD,OAAO,CAAC,oBAAoB,CAAwB;IACpD,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,QAAQ,CAA0B;IAC1C,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,OAAO,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG;QAAE,MAAM,CAAC,EAAE,cAAc,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;YAiB3E,kBAAkB;IA8BhC,OAAO,CAAC,oBAAoB;IAe5B,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,GAAG,WAAW;IAsMxB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,IAAI;IAMvB,gBAAgB,IAAI,CAAC,CAAC,YAAY,EAAE;IAI3C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;IASP,oBAAoB,CAC/B,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EACjC,OAAO,CAAC,EAAE;QAAE,uBAAuB,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7C,OAAO,CAAC,IAAI,CAAC;IAoDhB,WAAW,CAAC,IAAI,EAAE,QAAQ;IA4E1B,WAAW,IAAI,QAAQ;IAKhB,wBAAwB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAK/D,yBAAyB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAQvE,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC,sBAAsB;IAgBtB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,SAAS;YAaH,YAAY;IAwE1B,OAAO,CAAC,MAAM;IAuBd,OAAO,CAAC,SAAS;IAgCjB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAWvC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkBnC;;OAEG;IACH,OAAO,CAAC,iCAAiC,CAUvC;IAEF;;OAEG;IACH,OAAO,CAAC,iCAAiC,CAQvC;IAEF,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,uBAAuB;IAyI/B,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,2BAA2B;IAmEnC,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,6BAA6B;CAmBtC;AASD,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as L from 'leaflet';
|
|
2
|
+
/**
|
|
3
|
+
* Class to hold information about a polygon, including area, perimeter, and trashcan point.
|
|
4
|
+
*/
|
|
5
|
+
export declare class PolygonInfo {
|
|
6
|
+
polygon: L.LatLngLiteral[][][];
|
|
7
|
+
trashcanPoint: L.LatLngLiteral[];
|
|
8
|
+
sqmArea: number[];
|
|
9
|
+
perimeter: number[];
|
|
10
|
+
constructor(polygon: any);
|
|
11
|
+
setSqmArea(area: number): void;
|
|
12
|
+
private getTrashcanPoint;
|
|
13
|
+
private calculatePolygonArea;
|
|
14
|
+
private calculatePolygonPerimeter;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Class to manage the state of polygon drawing.
|
|
18
|
+
*/
|
|
19
|
+
export declare class PolygonDrawStates {
|
|
20
|
+
isActivated: boolean;
|
|
21
|
+
isFreeDrawMode: boolean;
|
|
22
|
+
isMoveMode: boolean;
|
|
23
|
+
canRevert: boolean;
|
|
24
|
+
isAuto: boolean;
|
|
25
|
+
hasPolygons: boolean;
|
|
26
|
+
canUsePolyDraw: boolean;
|
|
27
|
+
constructor();
|
|
28
|
+
activate(): void;
|
|
29
|
+
reset(): void;
|
|
30
|
+
resetDrawModes(): void;
|
|
31
|
+
setFreeDrawMode(isAuto?: boolean): void;
|
|
32
|
+
setMoveMode(): void;
|
|
33
|
+
forceCanUseFreeDraw(): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=polygon-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-helpers.d.ts","sourceRoot":"","sources":["../../src/polygon-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,CAAM;IACpC,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,CAAM;IACtC,OAAO,EAAE,MAAM,EAAE,CAAM;IACvB,SAAS,EAAE,MAAM,EAAE,CAAM;gBACb,OAAO,KAAA;IAyDnB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAG9B,OAAO,CAAC,gBAAgB;IAuDxB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,yBAAyB;CAIlC;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;;IAOxB,QAAQ,IAAI,IAAI;IAKhB,KAAK,IAAI,IAAI;IASb,cAAc,IAAI,IAAI;IAKtB,eAAe,CAAC,MAAM,GAAE,OAAe,GAAG,IAAI;IAa9C,WAAW,IAAI,IAAI;IAOnB,mBAAmB,IAAI,IAAI;CAG5B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { PolygonInfo, PolygonDrawStates } from './polygon-helpers';
|
|
2
|
+
import { MapStateService } from './map-state';
|
|
3
|
+
import * as L from 'leaflet';
|
|
4
|
+
/**
|
|
5
|
+
* Service for managing polygon information and draw states.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PolygonInformationService {
|
|
8
|
+
mapStateService: MapStateService;
|
|
9
|
+
private polygonInfoListeners;
|
|
10
|
+
private polygonDrawStateListeners;
|
|
11
|
+
polygonInformationStorage: PolygonInfo[];
|
|
12
|
+
constructor(mapStateService: MapStateService);
|
|
13
|
+
onPolygonInfoUpdated(callback: (info: PolygonInfo[]) => void): void;
|
|
14
|
+
private emitPolygonInfoUpdated;
|
|
15
|
+
onPolygonDrawStateUpdated(callback: (state: PolygonDrawStates) => void): void;
|
|
16
|
+
private emitPolygonDrawStateUpdated;
|
|
17
|
+
/**
|
|
18
|
+
* Updates the polygons and notifies the map state service.
|
|
19
|
+
*/
|
|
20
|
+
updatePolygons(): void;
|
|
21
|
+
saveCurrentState(): void;
|
|
22
|
+
deleteTrashcan(polygon: L.LatLngLiteral[][]): void;
|
|
23
|
+
deleteTrashCanOnMulti(polygon: L.LatLngLiteral[][][]): void;
|
|
24
|
+
deletePolygonInformationStorage(): void;
|
|
25
|
+
createPolygonInformationStorage(arrayOfFeatureGroups: any[]): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=polygon-information.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-information.service.d.ts","sourceRoot":"","sources":["../../src/polygon-information.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B;;GAEG;AACH,qBAAa,yBAAyB;IAMjB,eAAe,EAAE,eAAe;IALnD,OAAO,CAAC,oBAAoB,CAAyC;IACrE,OAAO,CAAC,yBAAyB,CAA8C;IAE/E,yBAAyB,EAAE,WAAW,EAAE,CAAM;gBAE3B,eAAe,EAAE,eAAe;IAEnD,oBAAoB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,IAAI;IAInE,OAAO,CAAC,sBAAsB;IAM9B,yBAAyB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI;IAI7E,OAAO,CAAC,2BAA2B;IAQnC;;OAEG;IACH,cAAc,IAAI,IAAI;IAqCtB,gBAAgB,IAAI,IAAI;IAKxB,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI;IAQlD,qBAAqB,CAAC,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,EAAE,EAAE,GAAG,IAAI;IA0B3D,+BAA+B,IAAI,IAAI;IAIvC,+BAA+B,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,IAAI;CAgBnE"}
|