@watergis/maplibre-gl-terradraw 0.0.4 → 0.0.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/README.md +3 -57
- package/dist/maplibre-gl-terradraw.es.js +41 -14
- package/dist/maplibre-gl-terradraw.es.js.map +1 -1
- package/dist/maplibre-gl-terradraw.umd.js +1 -1
- package/dist/maplibre-gl-terradraw.umd.js.map +1 -1
- package/dist/types/MaplibreTerradrawControl.d.ts +1 -0
- package/dist/types/MaplibreTerradrawControl.d.ts.map +1 -1
- package/dist/types/constants/AvailableModes.d.ts.map +1 -1
- package/dist/types/constants/defaultControlOptions.d.ts.map +1 -1
- package/dist/types/interfaces/ControlOptions.d.ts +1 -0
- package/dist/types/interfaces/ControlOptions.d.ts.map +1 -1
- package/dist/types/interfaces/TerradrawMode.d.ts.map +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -7,69 +7,15 @@
|
|
|
7
7
|
|
|
8
8
|
This plugin is to add controls to your MapLibre for sketching powered by [Terra Draw](https://github.com/JamesLMilner/terra-draw) library.
|
|
9
9
|
|
|
10
|
-
##
|
|
11
|
-
|
|
12
|
-
### NPM
|
|
13
|
-
|
|
14
|
-
- install
|
|
10
|
+
## Install
|
|
15
11
|
|
|
16
12
|
```shell
|
|
17
13
|
npm i -D @watergis/maplibre-gl-terradraw
|
|
18
14
|
```
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
```ts
|
|
23
|
-
import { MaplibreTerradrawControl } from '@watergis/maplibre-gl-terradraw';
|
|
24
|
-
import '@watergis/maplibre-gl-terradraw/dist/maplibre-gl-terradraw.css';
|
|
25
|
-
|
|
26
|
-
map.addControl(
|
|
27
|
-
new MaplibreTerradrawControl({
|
|
28
|
-
point: true,
|
|
29
|
-
line: true,
|
|
30
|
-
polygon: true,
|
|
31
|
-
rectangle: true,
|
|
32
|
-
circle: true,
|
|
33
|
-
freehand: true,
|
|
34
|
-
angledRectangle: true,
|
|
35
|
-
select: true
|
|
36
|
-
}),
|
|
37
|
-
'top-left'
|
|
38
|
-
);
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
As default, all Terra Draw modes are enabled, you can disable options if you don't want to use them.
|
|
42
|
-
|
|
43
|
-
You can get Terra Draw instance by the following function.
|
|
44
|
-
|
|
45
|
-
```ts
|
|
46
|
-
const drawControl = new MaplibreTerradrawControl();
|
|
47
|
-
const drawInstance = drawControl.getTerraDrawInstance();
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
You can add event listener to subscribe Terra Draw event as you wish. The below example is to subscribe `select` event of Terra Draw.
|
|
51
|
-
|
|
52
|
-
```ts
|
|
53
|
-
drawInstance.on('select', (id: string) => {
|
|
54
|
-
const snapshot = drawInstance.getSnapshot();
|
|
55
|
-
const polygon = snapshot?.find((feature) => feature.id === id);
|
|
56
|
-
console.log(polygon);
|
|
57
|
-
});
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### CDN
|
|
61
|
-
|
|
62
|
-
Include CSS and umd.js from CDN as follows.
|
|
63
|
-
|
|
64
|
-
```html
|
|
65
|
-
<script src="https://cdn.jsdelivr.net/npm/@watergis/maplibre-gl-terradraw@latest/dist/maplibre-gl-terradraw.umd.js"></script>
|
|
66
|
-
<link
|
|
67
|
-
rel="stylesheet"
|
|
68
|
-
href="https://cdn.jsdelivr.net/npm/@watergis/maplibre-gl-terradraw@latest/dist/maplibre-gl-terradraw.css"
|
|
69
|
-
/>
|
|
70
|
-
```
|
|
16
|
+
## Usage
|
|
71
17
|
|
|
72
|
-
|
|
18
|
+
See the [documentation](https://terradraw.water-gis.com/).
|
|
73
19
|
|
|
74
20
|
## Contribution
|
|
75
21
|
|
|
@@ -2747,7 +2747,8 @@ const si = {
|
|
|
2747
2747
|
circle: !0,
|
|
2748
2748
|
freehand: !0,
|
|
2749
2749
|
angledRectangle: !0,
|
|
2750
|
-
select: !0
|
|
2750
|
+
select: !0,
|
|
2751
|
+
open: !1
|
|
2751
2752
|
}, ni = (s) => {
|
|
2752
2753
|
const t = [];
|
|
2753
2754
|
return t.push(
|
|
@@ -2843,6 +2844,10 @@ const si = {
|
|
|
2843
2844
|
), t;
|
|
2844
2845
|
};
|
|
2845
2846
|
class ai {
|
|
2847
|
+
/**
|
|
2848
|
+
* Constructor
|
|
2849
|
+
* @param options Plugin control options
|
|
2850
|
+
*/
|
|
2846
2851
|
constructor(t) {
|
|
2847
2852
|
k(this, "controlContainer");
|
|
2848
2853
|
k(this, "map");
|
|
@@ -2863,21 +2868,12 @@ class ai {
|
|
|
2863
2868
|
const e = ni(this.options);
|
|
2864
2869
|
if (e.length === 0)
|
|
2865
2870
|
throw new Error("At least a mode must be enabled.");
|
|
2866
|
-
return this.terradraw = new oi({
|
|
2871
|
+
return this.isExpanded = this.options.open === !0, this.terradraw = new oi({
|
|
2867
2872
|
adapter: new pe({ map: t }),
|
|
2868
2873
|
modes: e
|
|
2869
|
-
}), this.terradraw.start(), this.controlContainer = document.createElement("div"), this.controlContainer.classList.add("maplibregl-ctrl"), this.controlContainer.classList.add("maplibregl-ctrl-group"), this.addButton = document.createElement("button"), this.addButton.classList.add("maplibregl-terradraw-add-button"), this.addButton.type = "button", this.addButton.addEventListener("click", () => {
|
|
2870
|
-
var o, n;
|
|
2871
|
-
if (!this.terradraw) return;
|
|
2872
|
-
const i = document.getElementsByClassName("maplibregl-terradraw-add-control");
|
|
2873
|
-
for (let r = 0; r < i.length; r++) {
|
|
2874
|
-
const a = i.item(r);
|
|
2875
|
-
a && (this.isExpanded ? (a.classList.add("hidden"), (o = this.addButton) == null || o.classList.remove("enabled"), this.resetActiveMode()) : (a.classList.remove("hidden"), (n = this.addButton) == null || n.classList.add("enabled")));
|
|
2876
|
-
}
|
|
2877
|
-
this.isExpanded = !this.isExpanded;
|
|
2878
|
-
}), e.forEach((i) => {
|
|
2874
|
+
}), this.terradraw.start(), this.controlContainer = document.createElement("div"), this.controlContainer.classList.add("maplibregl-ctrl"), this.controlContainer.classList.add("maplibregl-ctrl-group"), this.addButton = document.createElement("button"), this.addButton.classList.add("maplibregl-terradraw-add-button"), this.isExpanded && this.addButton.classList.add("enabled"), this.addButton.type = "button", this.addButton.addEventListener("click", this.toggleEditor.bind(this)), e.forEach((i) => {
|
|
2879
2875
|
i.mode !== "render" && this.addTerradrawButton(i.mode);
|
|
2880
|
-
}), this.deleteButton = document.createElement("button"), this.deleteButton.classList.add("maplibregl-terradraw-add-control"), this.deleteButton.classList.add("maplibregl-terradraw-delete-button"), this.deleteButton.classList.add("hidden"), this.deleteButton.type = "button", this.deleteButton.addEventListener("click", () => {
|
|
2876
|
+
}), this.deleteButton = document.createElement("button"), this.deleteButton.classList.add("maplibregl-terradraw-add-control"), this.deleteButton.classList.add("maplibregl-terradraw-delete-button"), this.isExpanded || this.deleteButton.classList.add("hidden"), this.deleteButton.type = "button", this.deleteButton.addEventListener("click", () => {
|
|
2881
2877
|
this.terradraw && this.terradraw.enabled && (this.terradraw.clear(), this.deactivate());
|
|
2882
2878
|
}), this.controlContainer.appendChild(this.addButton), Object.values(this.modeButtons).forEach((i) => {
|
|
2883
2879
|
var o;
|
|
@@ -2887,15 +2883,42 @@ class ai {
|
|
|
2887
2883
|
onRemove() {
|
|
2888
2884
|
!this.controlContainer || !this.controlContainer.parentNode || !this.map || !this.addButton || (this.modeButtons = {}, this.terradraw = void 0, this.map = void 0);
|
|
2889
2885
|
}
|
|
2886
|
+
/**
|
|
2887
|
+
* Activate Terra Draw to start drawing
|
|
2888
|
+
*/
|
|
2890
2889
|
activate() {
|
|
2891
2890
|
this.terradraw && (this.terradraw.enabled || this.terradraw.start());
|
|
2892
2891
|
}
|
|
2892
|
+
/**
|
|
2893
|
+
* Deactivate Terra Draw to stop drawing
|
|
2894
|
+
*/
|
|
2893
2895
|
deactivate() {
|
|
2894
2896
|
this.terradraw && this.terradraw.enabled && (this.resetActiveMode(), this.terradraw.stop());
|
|
2895
2897
|
}
|
|
2898
|
+
/**
|
|
2899
|
+
* Get the Terra Draw instance.
|
|
2900
|
+
* For the Terra Draw API, please refer to https://terradraw.io/#/api
|
|
2901
|
+
* @returns Terra Draw instance
|
|
2902
|
+
*/
|
|
2896
2903
|
getTerraDrawInstance() {
|
|
2897
2904
|
return this.terradraw;
|
|
2898
2905
|
}
|
|
2906
|
+
/**
|
|
2907
|
+
* Toggle editor control
|
|
2908
|
+
*/
|
|
2909
|
+
toggleEditor() {
|
|
2910
|
+
var e, i;
|
|
2911
|
+
if (!this.terradraw) return;
|
|
2912
|
+
const t = document.getElementsByClassName("maplibregl-terradraw-add-control");
|
|
2913
|
+
for (let o = 0; o < t.length; o++) {
|
|
2914
|
+
const n = t.item(o);
|
|
2915
|
+
n && (this.isExpanded ? n.classList.add("hidden") : n.classList.remove("hidden"));
|
|
2916
|
+
}
|
|
2917
|
+
this.isExpanded ? ((e = this.addButton) == null || e.classList.remove("enabled"), this.resetActiveMode()) : (i = this.addButton) == null || i.classList.add("enabled"), this.isExpanded = !this.isExpanded;
|
|
2918
|
+
}
|
|
2919
|
+
/**
|
|
2920
|
+
* Reset active mode to back to render mode
|
|
2921
|
+
*/
|
|
2899
2922
|
resetActiveMode() {
|
|
2900
2923
|
var e;
|
|
2901
2924
|
if (!this.terradraw) return;
|
|
@@ -2907,9 +2930,13 @@ class ai {
|
|
|
2907
2930
|
}
|
|
2908
2931
|
this.activeMode = "render", (e = this.terradraw) == null || e.setMode("render");
|
|
2909
2932
|
}
|
|
2933
|
+
/**
|
|
2934
|
+
* Add Terra Draw drawing mode button
|
|
2935
|
+
* @param mode Terra Draw mode name
|
|
2936
|
+
*/
|
|
2910
2937
|
addTerradrawButton(t) {
|
|
2911
2938
|
const e = document.createElement("button");
|
|
2912
|
-
e.classList.add("maplibregl-terradraw-add-control"), e.classList.add(`maplibregl-terradraw-add-${t}-button`), e.classList.add("hidden"), e.type = "button", e.addEventListener("click", () => {
|
|
2939
|
+
e.classList.add("maplibregl-terradraw-add-control"), e.classList.add(`maplibregl-terradraw-add-${t}-button`), this.isExpanded || e.classList.add("hidden"), e.type = "button", e.addEventListener("click", () => {
|
|
2913
2940
|
if (!this.terradraw) return;
|
|
2914
2941
|
const i = e.classList.contains("active");
|
|
2915
2942
|
this.activate(), this.resetActiveMode(), i || (this.terradraw.setMode(t), this.activeMode = t, e.classList.add("active"));
|