@geoit/ui 0.0.2 → 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/AGENTS.md +12 -8
- package/README.md +140 -17
- package/ai/AGENTS.md +43 -32
- package/ai/README.md +36 -2
- package/ai/catalog.json +5585 -437
- package/ai/components/geo-alert.md +75 -21
- package/ai/components/geo-back-button.md +64 -18
- package/ai/components/geo-breadcrumb.md +71 -12
- package/ai/components/geo-button.md +90 -27
- package/ai/components/geo-chart.md +103 -0
- package/ai/components/geo-checkbox.md +67 -20
- package/ai/components/geo-column-picker.md +91 -18
- package/ai/components/geo-confirm-modal.md +92 -27
- package/ai/components/geo-dashboard.md +91 -0
- package/ai/components/geo-date-picker.md +105 -29
- package/ai/components/geo-date-range-picker.md +101 -28
- package/ai/components/geo-empty-state.md +75 -0
- package/ai/components/geo-feedback-form.md +97 -0
- package/ai/components/geo-file-picker.md +99 -26
- package/ai/components/geo-forgot-password.md +78 -0
- package/ai/components/geo-form-modal.md +111 -44
- package/ai/components/geo-icon.md +70 -16
- package/ai/components/geo-input.md +94 -29
- package/ai/components/geo-layout-footer.md +70 -0
- package/ai/components/geo-layout-header-actions.md +82 -0
- package/ai/components/geo-layout-header.md +89 -0
- package/ai/components/geo-layout-sidebar.md +86 -0
- package/ai/components/geo-layout.md +155 -0
- package/ai/components/geo-list-page.md +72 -0
- package/ai/components/geo-login.md +94 -0
- package/ai/components/geo-map-admin-filter.md +80 -0
- package/ai/components/geo-map-basemap-switcher.md +75 -0
- package/ai/components/geo-map-help.md +72 -0
- package/ai/components/geo-map-layer-card.md +73 -0
- package/ai/components/geo-map-layer-panel.md +75 -0
- package/ai/components/geo-map-layers-drawer.md +78 -0
- package/ai/components/geo-map-legend.md +74 -0
- package/ai/components/geo-map-locate.md +75 -0
- package/ai/components/geo-map-location-chip.md +71 -0
- package/ai/components/geo-map-measure.md +74 -0
- package/ai/components/geo-map-opacity.md +75 -0
- package/ai/components/geo-map-parcel-popup.md +79 -0
- package/ai/components/geo-map-search.md +83 -0
- package/ai/components/geo-map-shell.md +110 -0
- package/ai/components/geo-map-snapshot.md +75 -0
- package/ai/components/geo-map-swipe.md +73 -0
- package/ai/components/geo-map-toolbar.md +76 -0
- package/ai/components/geo-map-zoom.md +74 -0
- package/ai/components/geo-map.md +205 -0
- package/ai/components/geo-overlap-result.md +88 -0
- package/ai/components/geo-page-header.md +72 -0
- package/ai/components/geo-page-title.md +62 -16
- package/ai/components/geo-pagination.md +76 -24
- package/ai/components/geo-radio.md +110 -27
- package/ai/components/geo-row-actions.md +87 -19
- package/ai/components/geo-select.md +108 -28
- package/ai/components/geo-slider.md +70 -21
- package/ai/components/geo-stat-card.md +98 -0
- package/ai/components/geo-status-tag.md +67 -15
- package/ai/components/geo-step-form-layout.md +121 -38
- package/ai/components/geo-stepper.md +81 -19
- package/ai/components/geo-table-filter.md +90 -29
- package/ai/components/geo-table-pagination.md +70 -23
- package/ai/components/geo-table-toolbar.md +84 -29
- package/ai/components/geo-table.md +191 -59
- package/ai/components/geo-tabs.md +99 -27
- package/ai/components/geo-textarea.md +84 -23
- package/ai/components/geo-toast.md +138 -27
- package/ai/components/geo-tree.md +94 -22
- package/ai/components/geo-typography.md +70 -19
- package/ai/components/geo-upload.md +109 -39
- package/ai/mockup.html +1194 -0
- package/ai/recipes.md +132 -47
- package/esm2022/lib/figma/geo-alert/geo-alert.component.mjs +19 -36
- package/esm2022/lib/figma/geo-back-button/geo-back-button.component.mjs +14 -24
- package/esm2022/lib/figma/geo-breadcrumb/geo-breadcrumb.component.mjs +8 -11
- package/esm2022/lib/figma/geo-button/geo-button.component.mjs +30 -59
- package/esm2022/lib/figma/geo-chart/geo-chart.component.mjs +88 -0
- package/esm2022/lib/figma/geo-chart/geo-chart.types.mjs +2 -0
- package/esm2022/lib/figma/geo-checkbox/geo-checkbox.component.mjs +11 -22
- package/esm2022/lib/figma/geo-confirm-modal/geo-confirm-modal.component.mjs +22 -54
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.component.mjs +49 -0
- package/esm2022/lib/figma/geo-dashboard/geo-dashboard.types.mjs +2 -0
- package/esm2022/lib/figma/geo-date-picker/geo-date-picker.component.mjs +48 -78
- package/esm2022/lib/figma/geo-date-range-picker/geo-date-range-picker.component.mjs +47 -75
- package/esm2022/lib/figma/geo-empty-state/geo-empty-state.component.mjs +25 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.component.mjs +75 -0
- package/esm2022/lib/figma/geo-feedback-form/geo-feedback-form.types.mjs +2 -0
- package/esm2022/lib/figma/geo-file-picker/geo-file-picker.component.mjs +59 -81
- package/esm2022/lib/figma/geo-forgot-password/geo-forgot-password.component.mjs +51 -0
- package/esm2022/lib/figma/geo-form-modal/geo-form-modal.component.mjs +45 -112
- package/esm2022/lib/figma/geo-icon/geo-icon.component.mjs +22 -32
- package/esm2022/lib/figma/geo-input/geo-input.component.mjs +41 -70
- package/esm2022/lib/figma/geo-layout/footer/geo-layout-footer.component.mjs +18 -0
- package/esm2022/lib/figma/geo-layout/geo-layout-actions.directive.mjs +15 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.component.mjs +79 -0
- package/esm2022/lib/figma/geo-layout/geo-layout.types.mjs +42 -0
- package/esm2022/lib/figma/geo-layout/header/geo-layout-header.component.mjs +60 -0
- package/esm2022/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.mjs +70 -0
- package/esm2022/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.mjs +90 -0
- package/esm2022/lib/figma/geo-list-page/geo-list-page.component.mjs +22 -0
- package/esm2022/lib/figma/geo-login/geo-login.component.mjs +58 -0
- package/esm2022/lib/figma/geo-login/geo-login.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.mjs +52 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.mjs +61 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.mjs +26 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.mjs +24 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.mjs +146 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.mjs +37 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.mjs +30 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.mjs +72 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.mjs +21 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.mjs +375 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.mjs +94 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.mjs +136 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.mjs +182 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.mjs +577 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.mjs +93 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.mjs +129 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.mjs +64 -0
- package/esm2022/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.mjs +295 -0
- package/esm2022/lib/figma/geo-map/geo-map-toolbar.icons.mjs +18 -0
- package/esm2022/lib/figma/geo-map/geo-map.component.mjs +144 -0
- package/esm2022/lib/figma/geo-map/geo-map.constants.mjs +497 -0
- package/esm2022/lib/figma/geo-map/geo-map.controller.mjs +71 -0
- package/esm2022/lib/figma/geo-map/geo-map.types.mjs +2 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-layer.service.mjs +368 -0
- package/esm2022/lib/figma/geo-map/services/geo-map-projection.service.mjs +110 -0
- package/esm2022/lib/figma/geo-map/services/geo-map.service.mjs +540 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.mjs +47 -0
- package/esm2022/lib/figma/geo-map/utils/geo-map-interactions.util.mjs +30 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.component.mjs +25 -0
- package/esm2022/lib/figma/geo-overlap-result/geo-overlap-result.types.mjs +2 -0
- package/esm2022/lib/figma/geo-page-header/geo-page-header.component.mjs +23 -0
- package/esm2022/lib/figma/geo-page-title/geo-page-title.component.mjs +20 -35
- package/esm2022/lib/figma/geo-pagination/geo-pagination.component.mjs +13 -43
- package/esm2022/lib/figma/geo-radio/geo-radio.component.mjs +32 -52
- package/esm2022/lib/figma/geo-select/geo-select.component.mjs +46 -72
- package/esm2022/lib/figma/geo-slider/geo-slider.component.mjs +12 -28
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.component.mjs +163 -0
- package/esm2022/lib/figma/geo-stat-card/geo-stat-card.types.mjs +2 -0
- package/esm2022/lib/figma/geo-status-tag/geo-status-tag.component.mjs +23 -27
- package/esm2022/lib/figma/geo-step-form-layout/geo-step-form-layout.component.mjs +39 -96
- package/esm2022/lib/figma/geo-stepper/geo-stepper.component.mjs +18 -33
- package/esm2022/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.mjs +14 -24
- package/esm2022/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.mjs +18 -36
- package/esm2022/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.mjs +41 -98
- package/esm2022/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.mjs +40 -73
- package/esm2022/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.mjs +26 -56
- package/esm2022/lib/figma/geo-table/geo-table.component.mjs +110 -210
- package/esm2022/lib/figma/geo-tabs/geo-tabs.component.mjs +33 -63
- package/esm2022/lib/figma/geo-textarea/geo-textarea.component.mjs +28 -44
- package/esm2022/lib/figma/geo-toast/geo-toast.component.mjs +18 -39
- package/esm2022/lib/figma/geo-tree/geo-tree.component.mjs +12 -40
- package/esm2022/lib/figma/geo-typography/geo-typography.component.mjs +49 -64
- package/esm2022/lib/figma/geo-upload/geo-upload.component.mjs +50 -101
- package/esm2022/lib/figma/index.mjs +50 -1
- package/esm2022/lib/styles/tokens.mjs +56 -24
- package/fesm2022/geoit-ui.mjs +5981 -1825
- package/fesm2022/geoit-ui.mjs.map +1 -1
- package/lib/figma/geo-alert/geo-alert.component.d.ts +10 -11
- package/lib/figma/geo-back-button/geo-back-button.component.d.ts +6 -7
- package/lib/figma/geo-breadcrumb/geo-breadcrumb.component.d.ts +2 -2
- package/lib/figma/geo-button/geo-button.component.d.ts +21 -17
- package/lib/figma/geo-chart/geo-chart.component.d.ts +40 -0
- package/lib/figma/geo-chart/geo-chart.types.d.ts +13 -0
- package/lib/figma/geo-checkbox/geo-checkbox.component.d.ts +6 -7
- package/lib/figma/geo-confirm-modal/geo-confirm-modal.component.d.ts +15 -17
- package/lib/figma/geo-dashboard/geo-dashboard.component.d.ts +29 -0
- package/lib/figma/geo-dashboard/geo-dashboard.types.d.ts +7 -0
- package/lib/figma/geo-date-picker/geo-date-picker.component.d.ts +26 -21
- package/lib/figma/geo-date-range-picker/geo-date-range-picker.component.d.ts +25 -20
- package/lib/figma/geo-empty-state/geo-empty-state.component.d.ts +17 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.component.d.ts +36 -0
- package/lib/figma/geo-feedback-form/geo-feedback-form.types.d.ts +8 -0
- package/lib/figma/geo-file-picker/geo-file-picker.component.d.ts +23 -20
- package/lib/figma/geo-forgot-password/geo-forgot-password.component.d.ts +24 -0
- package/lib/figma/geo-form-modal/geo-form-modal.component.d.ts +33 -35
- package/lib/figma/geo-icon/geo-icon.component.d.ts +7 -7
- package/lib/figma/geo-input/geo-input.component.d.ts +23 -21
- package/lib/figma/geo-layout/footer/geo-layout-footer.component.d.ts +10 -0
- package/lib/figma/geo-layout/geo-layout-actions.directive.d.ts +6 -0
- package/lib/figma/geo-layout/geo-layout.component.d.ts +48 -0
- package/lib/figma/geo-layout/geo-layout.types.d.ts +44 -0
- package/lib/figma/geo-layout/header/geo-layout-header.component.d.ts +31 -0
- package/lib/figma/geo-layout/header-actions/geo-layout-header-actions.component.d.ts +32 -0
- package/lib/figma/geo-layout/sidebar/geo-layout-sidebar.component.d.ts +34 -0
- package/lib/figma/geo-list-page/geo-list-page.component.d.ts +16 -0
- package/lib/figma/geo-login/geo-login.component.d.ts +27 -0
- package/lib/figma/geo-login/geo-login.types.d.ts +6 -0
- package/lib/figma/geo-map/chrome/geo-map-admin-filter/geo-map-admin-filter.component.d.ts +28 -0
- package/lib/figma/geo-map/chrome/geo-map-basemap-switcher/geo-map-basemap-switcher.component.d.ts +26 -0
- package/lib/figma/geo-map/chrome/geo-map-help/geo-map-help.component.d.ts +20 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-card/geo-map-layer-card.component.d.ts +15 -0
- package/lib/figma/geo-map/chrome/geo-map-layer-panel/geo-map-layer-panel.component.d.ts +40 -0
- package/lib/figma/geo-map/chrome/geo-map-layers-drawer/geo-map-layers-drawer.component.d.ts +25 -0
- package/lib/figma/geo-map/chrome/geo-map-legend/geo-map-legend.component.d.ts +18 -0
- package/lib/figma/geo-map/chrome/geo-map-locate/geo-map-locate.component.d.ts +24 -0
- package/lib/figma/geo-map/chrome/geo-map-location-chip/geo-map-location-chip.component.d.ts +14 -0
- package/lib/figma/geo-map/chrome/geo-map-measure/geo-map-measure.component.d.ts +49 -0
- package/lib/figma/geo-map/chrome/geo-map-opacity/geo-map-opacity.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-parcel-popup/geo-map-parcel-popup.component.d.ts +44 -0
- package/lib/figma/geo-map/chrome/geo-map-search/geo-map-search.component.d.ts +56 -0
- package/lib/figma/geo-map/chrome/geo-map-shell/geo-map-shell.component.d.ts +103 -0
- package/lib/figma/geo-map/chrome/geo-map-snapshot/geo-map-snapshot.component.d.ts +21 -0
- package/lib/figma/geo-map/chrome/geo-map-swipe/geo-map-swipe.component.d.ts +33 -0
- package/lib/figma/geo-map/chrome/geo-map-toolbar/geo-map-toolbar.component.d.ts +30 -0
- package/lib/figma/geo-map/chrome/geo-map-zoom/geo-map-zoom.component.d.ts +67 -0
- package/lib/figma/geo-map/geo-map-toolbar.icons.d.ts +17 -0
- package/lib/figma/geo-map/geo-map.component.d.ts +53 -0
- package/lib/figma/geo-map/geo-map.constants.d.ts +73 -0
- package/lib/figma/geo-map/geo-map.controller.d.ts +49 -0
- package/lib/figma/geo-map/geo-map.types.d.ts +224 -0
- package/lib/figma/geo-map/services/geo-map-layer.service.d.ts +42 -0
- package/lib/figma/geo-map/services/geo-map-projection.service.d.ts +32 -0
- package/lib/figma/geo-map/services/geo-map.service.d.ts +99 -0
- package/lib/figma/geo-map/utils/geo-map-fullscreen-overlay.util.d.ts +13 -0
- package/lib/figma/geo-map/utils/geo-map-interactions.util.d.ts +9 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.component.d.ts +18 -0
- package/lib/figma/geo-overlap-result/geo-overlap-result.types.d.ts +7 -0
- package/lib/figma/geo-page-header/geo-page-header.component.d.ts +16 -0
- package/lib/figma/geo-page-title/geo-page-title.component.d.ts +9 -9
- package/lib/figma/geo-pagination/geo-pagination.component.d.ts +9 -14
- package/lib/figma/geo-radio/geo-radio.component.d.ts +17 -15
- package/lib/figma/geo-select/geo-select.component.d.ts +24 -19
- package/lib/figma/geo-slider/geo-slider.component.d.ts +7 -9
- package/lib/figma/geo-stat-card/geo-stat-card.component.d.ts +50 -0
- package/lib/figma/geo-stat-card/geo-stat-card.types.d.ts +11 -0
- package/lib/figma/geo-status-tag/geo-status-tag.component.d.ts +7 -7
- package/lib/figma/geo-step-form-layout/geo-step-form-layout.component.d.ts +27 -29
- package/lib/figma/geo-stepper/geo-stepper.component.d.ts +6 -8
- package/lib/figma/geo-table/geo-column-picker/geo-column-picker.component.d.ts +6 -7
- package/lib/figma/geo-table/geo-row-actions/geo-row-actions.component.d.ts +11 -12
- package/lib/figma/geo-table/geo-table-filter/geo-table-filter.component.d.ts +21 -28
- package/lib/figma/geo-table/geo-table-pagination/geo-table-pagination.component.d.ts +17 -20
- package/lib/figma/geo-table/geo-table-toolbar/geo-table-toolbar.component.d.ts +17 -18
- package/lib/figma/geo-table/geo-table.component.d.ts +58 -62
- package/lib/figma/geo-tabs/geo-tabs.component.d.ts +14 -17
- package/lib/figma/geo-textarea/geo-textarea.component.d.ts +15 -13
- package/lib/figma/geo-toast/geo-toast.component.d.ts +11 -12
- package/lib/figma/geo-tree/geo-tree.component.d.ts +8 -13
- package/lib/figma/geo-typography/geo-typography.component.d.ts +13 -13
- package/lib/figma/geo-upload/geo-upload.component.d.ts +26 -28
- package/lib/figma/index.d.ts +49 -0
- package/lib/styles/tokens.d.ts +56 -23
- package/package.json +4 -2
- package/src/lib/figma/geo-map/assets/toolbar/fullscreen.svg +8 -0
- package/src/lib/figma/geo-map/assets/toolbar/home.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/layers.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-area.svg +12 -0
- package/src/lib/figma/geo-map/assets/toolbar/measure-distance.svg +5 -0
- package/src/lib/figma/geo-map/assets/toolbar/pan.svg +13 -0
- package/src/lib/figma/geo-map/assets/toolbar/search.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-in.svg +3 -0
- package/src/lib/figma/geo-map/assets/toolbar/zoom-out.svg +5 -0
- package/src/lib/styles/design-tokens.scss +108 -35
- package/src/lib/styles/scrollbar.scss +2 -2
- package/src/lib/styles/theme.scss +1 -1
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
import { GEO_MAP_TOOLBAR_ICONS } from './geo-map-toolbar.icons';
|
|
2
|
+
/** Built-in CRS codes available without custom proj4 registration. */
|
|
3
|
+
export const GEO_MAP_BUILTIN_PROJECTIONS = ['EPSG:4326', 'EPSG:3857'];
|
|
4
|
+
/**
|
|
5
|
+
* Default view — Web Mercator around Đà Lạt (Lâm Đồng).
|
|
6
|
+
* Center is already in EPSG:3857 (do not treat as lon/lat).
|
|
7
|
+
*/
|
|
8
|
+
export const GEO_MAP_DEFAULT_CENTER = [12052000, 1330000];
|
|
9
|
+
export const GEO_MAP_DEFAULT_ZOOM = 11;
|
|
10
|
+
export const GEO_MAP_DEFAULT_MIN_ZOOM = 2;
|
|
11
|
+
export const GEO_MAP_DEFAULT_MAX_ZOOM = 20;
|
|
12
|
+
export const GEO_MAP_DEFAULT_VIEW_PROJECTION = 'EPSG:3857';
|
|
13
|
+
export const GEO_MAP_DEFAULT_HEIGHT = '480px';
|
|
14
|
+
/** Internal layer id reserved for the `basemap` input shortcut. */
|
|
15
|
+
export const GEO_MAP_BASEMAP_LAYER_ID = '__geo_basemap';
|
|
16
|
+
/** Internal vector layers reserved for selection / measure / highlight. */
|
|
17
|
+
export const GEO_MAP_SELECTION_LAYER_ID = '__geo_selection';
|
|
18
|
+
export const GEO_MAP_MEASURE_LAYER_ID = '__geo_measure';
|
|
19
|
+
export const GEO_MAP_HIGHLIGHT_LAYER_ID = '__geo_highlight';
|
|
20
|
+
/**
|
|
21
|
+
* Default province extent (Lâm Đồng approx, EPSG:4326) for “xem toàn tỉnh” (TCQH.14 GD5).
|
|
22
|
+
* Host apps should override with authoritative boundary extent from API.
|
|
23
|
+
*/
|
|
24
|
+
export const GEO_MAP_DEFAULT_PROVINCE_EXTENT_4326 = [107.2, 11.15, 108.75, 12.35];
|
|
25
|
+
/** Optional traffic / roads reference overlay (not a planning layer). */
|
|
26
|
+
export const GEO_MAP_TRAFFIC_LAYER_ID = '__geo_traffic';
|
|
27
|
+
export const GEO_MAP_ESRI_IMAGERY_URL = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}';
|
|
28
|
+
export const GEO_MAP_ESRI_STREETS_URL = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}';
|
|
29
|
+
export const GEO_MAP_ESRI_TRANSPORT_URL = 'https://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Transportation/MapServer/tile/{z}/{y}/{x}';
|
|
30
|
+
/** Default basemap picker options (đường phố / vệ tinh). */
|
|
31
|
+
export const GEO_MAP_DEFAULT_BASEMAP_OPTIONS = [
|
|
32
|
+
{
|
|
33
|
+
id: 'osm',
|
|
34
|
+
label: 'Đường phố',
|
|
35
|
+
basemap: 'osm',
|
|
36
|
+
previewUrl: 'https://tile.openstreetmap.org/6/50/30.png',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: 'satellite',
|
|
40
|
+
label: 'Vệ tinh',
|
|
41
|
+
basemap: {
|
|
42
|
+
type: 'xyz',
|
|
43
|
+
url: GEO_MAP_ESRI_IMAGERY_URL,
|
|
44
|
+
attributions: 'Esri, Maxar, Earthstar Geographics',
|
|
45
|
+
title: 'Ảnh vệ tinh',
|
|
46
|
+
},
|
|
47
|
+
previewUrl: 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/6/30/50',
|
|
48
|
+
},
|
|
49
|
+
];
|
|
50
|
+
/** Transportation reference overlay — toggle independently of basemap. */
|
|
51
|
+
export const GEO_MAP_TRAFFIC_OVERLAY = {
|
|
52
|
+
id: GEO_MAP_TRAFFIC_LAYER_ID,
|
|
53
|
+
title: 'Lớp giao thông',
|
|
54
|
+
type: 'xyz',
|
|
55
|
+
url: GEO_MAP_ESRI_TRANSPORT_URL,
|
|
56
|
+
attributions: 'Esri',
|
|
57
|
+
visible: false,
|
|
58
|
+
opacity: 0.9,
|
|
59
|
+
zIndex: 5,
|
|
60
|
+
basemap: false,
|
|
61
|
+
group: 'base-map',
|
|
62
|
+
};
|
|
63
|
+
/** Built-in toolbar actions — Figma map chrome (Dat Dai Lam Dong 2026). */
|
|
64
|
+
export const GEO_MAP_DEFAULT_TOOLBAR_ACTIONS = [
|
|
65
|
+
{
|
|
66
|
+
id: 'home',
|
|
67
|
+
label: 'Trang chủ',
|
|
68
|
+
icon: 'home',
|
|
69
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.home,
|
|
70
|
+
iconOnly: true,
|
|
71
|
+
tooltip: 'Trang chủ',
|
|
72
|
+
variant: 'primary',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'search',
|
|
76
|
+
label: 'Tra cứu',
|
|
77
|
+
icon: 'search',
|
|
78
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.search,
|
|
79
|
+
iconOnly: true,
|
|
80
|
+
tooltip: 'Tra cứu thửa đất',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'pan',
|
|
84
|
+
label: 'Di chuyển',
|
|
85
|
+
icon: 'drag',
|
|
86
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.pan,
|
|
87
|
+
iconOnly: true,
|
|
88
|
+
tooltip: 'Di chuyển bản đồ',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'zoom-in',
|
|
92
|
+
label: 'Phóng to',
|
|
93
|
+
icon: 'plus',
|
|
94
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.zoomIn,
|
|
95
|
+
iconOnly: true,
|
|
96
|
+
tooltip: 'Phóng to',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'zoom-out',
|
|
100
|
+
label: 'Thu nhỏ',
|
|
101
|
+
icon: 'minus',
|
|
102
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.zoomOut,
|
|
103
|
+
iconOnly: true,
|
|
104
|
+
tooltip: 'Thu nhỏ',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'fullscreen',
|
|
108
|
+
label: 'Toàn màn hình',
|
|
109
|
+
icon: 'fullscreen',
|
|
110
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.fullscreen,
|
|
111
|
+
iconOnly: true,
|
|
112
|
+
tooltip: 'Xem toàn bản đồ',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'measure-distance',
|
|
116
|
+
label: 'Đo khoảng cách',
|
|
117
|
+
icon: 'column-width',
|
|
118
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.measureDistance,
|
|
119
|
+
iconOnly: true,
|
|
120
|
+
tooltip: 'Đo khoảng cách',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'measure-area',
|
|
124
|
+
label: 'Đo diện tích',
|
|
125
|
+
icon: 'border-outer',
|
|
126
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.measureArea,
|
|
127
|
+
iconOnly: true,
|
|
128
|
+
tooltip: 'Đo diện tích',
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'layers',
|
|
132
|
+
label: 'Lớp bản đồ',
|
|
133
|
+
icon: 'appstore',
|
|
134
|
+
iconSrc: GEO_MAP_TOOLBAR_ICONS.layers,
|
|
135
|
+
iconOnly: true,
|
|
136
|
+
tooltip: 'Bật/tắt lớp bản đồ',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
id: 'legend',
|
|
140
|
+
label: 'Chú giải',
|
|
141
|
+
icon: 'unordered-list',
|
|
142
|
+
iconOnly: true,
|
|
143
|
+
tooltip: 'Xem chú giải',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: 'snapshot',
|
|
147
|
+
label: 'Chụp ảnh',
|
|
148
|
+
icon: 'camera',
|
|
149
|
+
iconOnly: true,
|
|
150
|
+
tooltip: 'Chụp ảnh bản đồ',
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
/**
|
|
154
|
+
* Demo thematic overlays for Storybook (offline-friendly GeoJSON).
|
|
155
|
+
* Groups match portal layers popover: QHSDD · địa chính · hiện trạng.
|
|
156
|
+
*/
|
|
157
|
+
export const GEO_MAP_DEMO_THEMATIC_LAYERS = [
|
|
158
|
+
{
|
|
159
|
+
id: 'demo-qhsdd-2020',
|
|
160
|
+
title: 'QHSDD tỉnh Lâm Đồng 2020-2025',
|
|
161
|
+
type: 'geojson',
|
|
162
|
+
visible: true,
|
|
163
|
+
opacity: 0.4,
|
|
164
|
+
zIndex: 10,
|
|
165
|
+
group: 'qhsdd',
|
|
166
|
+
groupLabel: 'Bản đồ QHSDD',
|
|
167
|
+
groupSelection: 'single',
|
|
168
|
+
basemap: false,
|
|
169
|
+
dataProjection: 'EPSG:4326',
|
|
170
|
+
featureProjection: 'EPSG:3857',
|
|
171
|
+
data: {
|
|
172
|
+
type: 'FeatureCollection',
|
|
173
|
+
features: [
|
|
174
|
+
{
|
|
175
|
+
type: 'Feature',
|
|
176
|
+
properties: { code: 'ODT', name: 'Đất ở đô thị (QH 2020-2025)' },
|
|
177
|
+
geometry: {
|
|
178
|
+
type: 'Polygon',
|
|
179
|
+
coordinates: [
|
|
180
|
+
[
|
|
181
|
+
[108.42, 11.93],
|
|
182
|
+
[108.48, 11.93],
|
|
183
|
+
[108.48, 11.97],
|
|
184
|
+
[108.42, 11.97],
|
|
185
|
+
[108.42, 11.93],
|
|
186
|
+
],
|
|
187
|
+
],
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
id: 'demo-qhsdd-2025',
|
|
195
|
+
title: 'QHSDD tỉnh Lâm Đồng 2025-2030',
|
|
196
|
+
type: 'geojson',
|
|
197
|
+
visible: false,
|
|
198
|
+
opacity: 0.4,
|
|
199
|
+
zIndex: 11,
|
|
200
|
+
group: 'qhsdd',
|
|
201
|
+
groupLabel: 'Bản đồ QHSDD',
|
|
202
|
+
groupSelection: 'single',
|
|
203
|
+
basemap: false,
|
|
204
|
+
dataProjection: 'EPSG:4326',
|
|
205
|
+
featureProjection: 'EPSG:3857',
|
|
206
|
+
data: {
|
|
207
|
+
type: 'FeatureCollection',
|
|
208
|
+
features: [
|
|
209
|
+
{
|
|
210
|
+
type: 'Feature',
|
|
211
|
+
properties: { code: 'ODT', name: 'Đất ở đô thị (QH 2025-2030)' },
|
|
212
|
+
geometry: {
|
|
213
|
+
type: 'Polygon',
|
|
214
|
+
coordinates: [
|
|
215
|
+
[
|
|
216
|
+
[108.43, 11.925],
|
|
217
|
+
[108.49, 11.925],
|
|
218
|
+
[108.49, 11.965],
|
|
219
|
+
[108.43, 11.965],
|
|
220
|
+
[108.43, 11.925],
|
|
221
|
+
],
|
|
222
|
+
],
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
],
|
|
226
|
+
},
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
id: 'demo-parcel',
|
|
230
|
+
title: 'Tỉnh Lâm Đồng',
|
|
231
|
+
type: 'geojson',
|
|
232
|
+
visible: true,
|
|
233
|
+
opacity: 0.4,
|
|
234
|
+
zIndex: 20,
|
|
235
|
+
group: 'cadastre',
|
|
236
|
+
groupLabel: 'Bản đồ địa chính',
|
|
237
|
+
groupSelection: 'multi',
|
|
238
|
+
basemap: false,
|
|
239
|
+
queryable: true,
|
|
240
|
+
dataProjection: 'EPSG:4326',
|
|
241
|
+
featureProjection: 'EPSG:3857',
|
|
242
|
+
data: {
|
|
243
|
+
type: 'FeatureCollection',
|
|
244
|
+
features: [
|
|
245
|
+
{
|
|
246
|
+
type: 'Feature',
|
|
247
|
+
properties: { parcel: '12', sheet: '45' },
|
|
248
|
+
geometry: {
|
|
249
|
+
type: 'Polygon',
|
|
250
|
+
coordinates: [
|
|
251
|
+
[
|
|
252
|
+
[108.45, 11.94],
|
|
253
|
+
[108.465, 11.94],
|
|
254
|
+
[108.465, 11.952],
|
|
255
|
+
[108.45, 11.952],
|
|
256
|
+
[108.45, 11.94],
|
|
257
|
+
],
|
|
258
|
+
],
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
id: 'demo-current-2020',
|
|
266
|
+
title: 'QHSDD tỉnh Lâm Đồng 2020-2025',
|
|
267
|
+
type: 'geojson',
|
|
268
|
+
visible: true,
|
|
269
|
+
opacity: 0.4,
|
|
270
|
+
zIndex: 12,
|
|
271
|
+
group: 'current',
|
|
272
|
+
groupLabel: 'Bản đồ hiện trạng',
|
|
273
|
+
groupSelection: 'single',
|
|
274
|
+
basemap: false,
|
|
275
|
+
dataProjection: 'EPSG:4326',
|
|
276
|
+
featureProjection: 'EPSG:3857',
|
|
277
|
+
data: {
|
|
278
|
+
type: 'FeatureCollection',
|
|
279
|
+
features: [
|
|
280
|
+
{
|
|
281
|
+
type: 'Feature',
|
|
282
|
+
properties: { code: 'ONT', name: 'Đất ở tại nông thôn (HT 2020-2025)' },
|
|
283
|
+
geometry: {
|
|
284
|
+
type: 'Polygon',
|
|
285
|
+
coordinates: [
|
|
286
|
+
[
|
|
287
|
+
[108.44, 11.92],
|
|
288
|
+
[108.5, 11.92],
|
|
289
|
+
[108.5, 11.96],
|
|
290
|
+
[108.44, 11.96],
|
|
291
|
+
[108.44, 11.92],
|
|
292
|
+
],
|
|
293
|
+
],
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
],
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
id: 'demo-current-2025',
|
|
301
|
+
title: 'QHSDD tỉnh Lâm Đồng 2025-2030',
|
|
302
|
+
type: 'geojson',
|
|
303
|
+
visible: false,
|
|
304
|
+
opacity: 0.4,
|
|
305
|
+
zIndex: 13,
|
|
306
|
+
group: 'current',
|
|
307
|
+
groupLabel: 'Bản đồ hiện trạng',
|
|
308
|
+
groupSelection: 'single',
|
|
309
|
+
basemap: false,
|
|
310
|
+
dataProjection: 'EPSG:4326',
|
|
311
|
+
featureProjection: 'EPSG:3857',
|
|
312
|
+
data: {
|
|
313
|
+
type: 'FeatureCollection',
|
|
314
|
+
features: [
|
|
315
|
+
{
|
|
316
|
+
type: 'Feature',
|
|
317
|
+
properties: { code: 'ONT', name: 'Đất ở tại nông thôn (HT 2025-2030)' },
|
|
318
|
+
geometry: {
|
|
319
|
+
type: 'Polygon',
|
|
320
|
+
coordinates: [
|
|
321
|
+
[
|
|
322
|
+
[108.435, 11.915],
|
|
323
|
+
[108.495, 11.915],
|
|
324
|
+
[108.495, 11.955],
|
|
325
|
+
[108.435, 11.955],
|
|
326
|
+
[108.435, 11.915],
|
|
327
|
+
],
|
|
328
|
+
],
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
];
|
|
335
|
+
/**
|
|
336
|
+
* Sample legend — placeholder colors until Thông tư 09/2024 palette is complete (Q13–Q15).
|
|
337
|
+
* Do not treat as legally authoritative.
|
|
338
|
+
*/
|
|
339
|
+
export const GEO_MAP_DEMO_LEGEND_ITEMS = [
|
|
340
|
+
{ code: 'ODT', label: 'Đất ở đô thị', color: '#E87B35' },
|
|
341
|
+
{ code: 'ONT', label: 'Đất ở tại nông thôn', color: '#F2C14E' },
|
|
342
|
+
{ code: 'SKC', label: 'Đất cơ sở sản xuất kinh doanh', color: '#C45C26' },
|
|
343
|
+
{ code: 'DGT', label: 'Đất giao thông', color: '#6B7280' },
|
|
344
|
+
{ code: 'TMD', label: 'Đất thương mại dịch vụ', color: '#DB2777' },
|
|
345
|
+
{ code: 'CLN', label: 'Đất trồng cây lâu năm', color: '#16A34A' },
|
|
346
|
+
];
|
|
347
|
+
export const GEO_MAP_DEFAULT_HELP_SECTIONS = [
|
|
348
|
+
{
|
|
349
|
+
title: 'Di chuyển bản đồ',
|
|
350
|
+
body: 'Kéo chuột để pan. Cuộn chuột hoặc dùng nút +/- để thu phóng. Dùng “Phóng to theo vùng” / “Thu nhỏ theo vùng” để khoanh vùng trên bản đồ. “Xem toàn tỉnh” căn khung nhìn về phạm vi tỉnh.',
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
title: 'Tra cứu thửa đất',
|
|
354
|
+
body: 'Mở “Tra cứu” để tìm theo chủ sử dụng, GCN, tọa độ, địa chỉ hoặc số tờ/thửa. Kết quả hiển thị danh sách và highlight trên bản đồ.',
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
title: 'Lớp bản đồ',
|
|
358
|
+
body: 'Mở “Lớp bản đồ” để bật/tắt quy hoạch SDĐ, hiện trạng SDĐ, thửa đất. Chọn vệ tinh ở bộ chuyển lớp nền. Bật nhiều lớp cùng lúc để chồng xếp so sánh.',
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
title: 'Đơn vị hành chính',
|
|
362
|
+
body: 'Mở bộ lọc ĐVHC cấp xã để thu hẹp khung nhìn theo xã đã chọn. “Xem toàn tỉnh” đưa bản đồ về toàn cảnh tỉnh.',
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
title: 'Đo đạc & tiện ích',
|
|
366
|
+
body: 'Đo khoảng cách / diện tích bằng cách nhấp các điểm trên bản đồ (nháy đúp để kết thúc). Dùng “Độ trong suốt” để nhìn xuyên lớp. “Chụp ảnh” tải PNG khung nhìn hiện tại.',
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
title: 'Vị trí của tôi',
|
|
370
|
+
body: 'Cho phép trình duyệt chia sẻ vị trí để căn giữa bản đồ tại vị trí thiết bị của bạn.',
|
|
371
|
+
},
|
|
372
|
+
];
|
|
373
|
+
/** Demo admin tree (xã) for Storybook — replace via API in production. */
|
|
374
|
+
export const GEO_MAP_DEMO_ADMIN_NODES = [
|
|
375
|
+
{
|
|
376
|
+
key: 'lam-dong',
|
|
377
|
+
title: 'Tỉnh Lâm Đồng',
|
|
378
|
+
expanded: true,
|
|
379
|
+
children: [
|
|
380
|
+
{ key: 'xa-1', title: 'Xã Đạ Tẻh', isLeaf: true },
|
|
381
|
+
{ key: 'xa-2', title: 'Xã Đạ Huoai', isLeaf: true },
|
|
382
|
+
{ key: 'xa-3', title: 'Xã Đạ Kho', isLeaf: true },
|
|
383
|
+
{ key: 'xa-4', title: 'Phường 1 (Đà Lạt)', isLeaf: true },
|
|
384
|
+
{ key: 'xa-5', title: 'Phường 2 (Đà Lạt)', isLeaf: true },
|
|
385
|
+
],
|
|
386
|
+
},
|
|
387
|
+
];
|
|
388
|
+
/** Demo parcel detail for Storybook search/popup (TCQH.12). */
|
|
389
|
+
export const GEO_MAP_DEMO_PARCEL_DETAIL = {
|
|
390
|
+
parcelCode: '0100001234',
|
|
391
|
+
parcelNumber: '2023',
|
|
392
|
+
sheetNumber: '153',
|
|
393
|
+
ward: 'Phường 1',
|
|
394
|
+
province: 'Lâm Đồng',
|
|
395
|
+
area: '2500 m²',
|
|
396
|
+
legalArea: '2500 m²',
|
|
397
|
+
landUse: 'LUC - Đất chuyên trồng lúa nước',
|
|
398
|
+
address: 'Số 10, đường Trần Phú',
|
|
399
|
+
useForm: 'Sử dụng riêng',
|
|
400
|
+
registrationStatus: 'Đã cấp giấy chứng nhận',
|
|
401
|
+
landPrice: 'Đang cập nhật',
|
|
402
|
+
shapeInfo: 'Hình chữ nhật',
|
|
403
|
+
planningInfo: 'Nằm trong quy hoạch đất ở đô thị giai đoạn 2021–2030',
|
|
404
|
+
};
|
|
405
|
+
/**
|
|
406
|
+
* Placeholder endpoints — replace via environment / API.
|
|
407
|
+
* Do not hard-code production domains here.
|
|
408
|
+
*/
|
|
409
|
+
export const GEO_MAP_ENV_PLACEHOLDERS = {
|
|
410
|
+
wmsUrl: 'https://{MAP_API_HOST}/geoserver/wms',
|
|
411
|
+
xyzSatelliteUrl: 'https://{TILE_HOST}/satellite/{z}/{x}/{y}.png',
|
|
412
|
+
geojsonParcelUrl: 'https://{MAP_API_HOST}/api/v1/parcels.geojson',
|
|
413
|
+
};
|
|
414
|
+
/**
|
|
415
|
+
* Example multi-layer stack for land-use planning demos / Storybook.
|
|
416
|
+
* URLs are placeholders; WMS/XYZ tiles will fail until env is wired.
|
|
417
|
+
*/
|
|
418
|
+
export const GEO_MAP_DEFAULT_PLANNING_LAYERS = [
|
|
419
|
+
{
|
|
420
|
+
id: 'osm',
|
|
421
|
+
title: 'Bản đồ đường phố',
|
|
422
|
+
type: 'osm',
|
|
423
|
+
visible: true,
|
|
424
|
+
opacity: 1,
|
|
425
|
+
zIndex: 0,
|
|
426
|
+
basemap: true,
|
|
427
|
+
group: 'base-map',
|
|
428
|
+
},
|
|
429
|
+
{
|
|
430
|
+
id: 'satellite',
|
|
431
|
+
title: 'Ảnh vệ tinh',
|
|
432
|
+
type: 'xyz',
|
|
433
|
+
url: GEO_MAP_ENV_PLACEHOLDERS.xyzSatelliteUrl,
|
|
434
|
+
visible: false,
|
|
435
|
+
opacity: 1,
|
|
436
|
+
zIndex: 0,
|
|
437
|
+
basemap: true,
|
|
438
|
+
group: 'base-map',
|
|
439
|
+
attributions: 'Satellite (placeholder)',
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
id: 'land-use-planning',
|
|
443
|
+
title: 'Quy hoạch sử dụng đất',
|
|
444
|
+
type: 'wms',
|
|
445
|
+
url: GEO_MAP_ENV_PLACEHOLDERS.wmsUrl,
|
|
446
|
+
layerName: 'workspace:land_use_planning',
|
|
447
|
+
params: {
|
|
448
|
+
LAYERS: 'workspace:land_use_planning',
|
|
449
|
+
TILED: true,
|
|
450
|
+
},
|
|
451
|
+
visible: true,
|
|
452
|
+
opacity: 0.7,
|
|
453
|
+
zIndex: 10,
|
|
454
|
+
projection: 'EPSG:3857',
|
|
455
|
+
queryable: true,
|
|
456
|
+
group: 'planning',
|
|
457
|
+
serverType: 'geoserver',
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
id: 'parcel-boundary',
|
|
461
|
+
title: 'Ranh giới thửa đất',
|
|
462
|
+
type: 'wms',
|
|
463
|
+
url: GEO_MAP_ENV_PLACEHOLDERS.wmsUrl,
|
|
464
|
+
layerName: 'workspace:parcel_boundary',
|
|
465
|
+
params: {
|
|
466
|
+
LAYERS: 'workspace:parcel_boundary',
|
|
467
|
+
TILED: true,
|
|
468
|
+
},
|
|
469
|
+
visible: true,
|
|
470
|
+
opacity: 0.9,
|
|
471
|
+
zIndex: 20,
|
|
472
|
+
queryable: true,
|
|
473
|
+
group: 'planning',
|
|
474
|
+
serverType: 'geoserver',
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
id: GEO_MAP_SELECTION_LAYER_ID,
|
|
478
|
+
title: 'Đối tượng đang chọn',
|
|
479
|
+
type: 'vector',
|
|
480
|
+
visible: true,
|
|
481
|
+
opacity: 1,
|
|
482
|
+
zIndex: 100,
|
|
483
|
+
group: 'system',
|
|
484
|
+
features: [],
|
|
485
|
+
},
|
|
486
|
+
{
|
|
487
|
+
id: GEO_MAP_MEASURE_LAYER_ID,
|
|
488
|
+
title: 'Kết quả đo',
|
|
489
|
+
type: 'vector',
|
|
490
|
+
visible: true,
|
|
491
|
+
opacity: 1,
|
|
492
|
+
zIndex: 110,
|
|
493
|
+
group: 'system',
|
|
494
|
+
features: [],
|
|
495
|
+
},
|
|
496
|
+
];
|
|
497
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nZW8tdWkvc3JjL2xpYi9maWdtYS9nZW8tbWFwL2dlby1tYXAuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhFLHNFQUFzRTtBQUN0RSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQVUsQ0FBQztBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBOEIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDM0MsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsV0FBVyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztBQUU5QyxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsZUFBZSxDQUFDO0FBRXhELDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxpQkFBaUIsQ0FBQztBQUM1RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxlQUFlLENBQUM7QUFDeEQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsaUJBQWlCLENBQUM7QUFFNUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0NBQW9DLEdBSzdDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFFbEMseUVBQXlFO0FBQ3pF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LElBQUk7UUFDYixPQUFPLEVBQUUsQ0FBQztRQUNWLE1BQU0sRUFBRSxHQUFHO1FBQ1gsS0FBSyxFQUFFLFFBQVE7UUFDZixRQUFRLEVBQUUsRUFBRTtLQUNiO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgR2VvTWFwQmFzZW1hcE9wdGlvbixcbiAgR2VvTWFwTGF5ZXJDb25maWcsXG4gIEdlb01hcExlZ2VuZEl0ZW0sXG4gIEdlb01hcFBhcmNlbERldGFpbCxcbiAgR2VvTWFwVG9vbGJhckFjdGlvbixcbiAgR2VvTWFwWHl6TGF5ZXJDb25maWcsXG59IGZyb20gJy4vZ2VvLW1hcC50eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEdlb1RyZWVOb2RlIH0gZnJvbSAnLi4vZ2VvLXRyZWUvZ2VvLXRyZWUudHlwZXMnO1xuaW1wb3J0IHsgR0VPX01BUF9UT09MQkFSX0lDT05TIH0gZnJvbSAnLi9nZW8tbWFwLXRvb2xiYXIuaWNvbnMnO1xuXG4vKiogQnVpbHQtaW4gQ1JTIGNvZGVzIGF2YWlsYWJsZSB3aXRob3V0IGN1c3RvbSBwcm9qNCByZWdpc3RyYXRpb24uICovXG5leHBvcnQgY29uc3QgR0VPX01BUF9CVUlMVElOX1BST0pFQ1RJT05TID0gWydFUFNHOjQzMjYnLCAnRVBTRzozODU3J10gYXMgY29uc3Q7XG5cbi8qKlxuICogRGVmYXVsdCB2aWV3IOKAlCBXZWIgTWVyY2F0b3IgYXJvdW5kIMSQw6AgTOG6oXQgKEzDom0gxJDhu5NuZykuXG4gKiBDZW50ZXIgaXMgYWxyZWFkeSBpbiBFUFNHOjM4NTcgKGRvIG5vdCB0cmVhdCBhcyBsb24vbGF0KS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVGQVVMVF9DRU5URVI6IHJlYWRvbmx5IFtudW1iZXIsIG51bWJlcl0gPSBbMTIwNTIwMDAsIDEzMzAwMDBdO1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVGQVVMVF9aT09NID0gMTE7XG5leHBvcnQgY29uc3QgR0VPX01BUF9ERUZBVUxUX01JTl9aT09NID0gMjtcbmV4cG9ydCBjb25zdCBHRU9fTUFQX0RFRkFVTFRfTUFYX1pPT00gPSAyMDtcbmV4cG9ydCBjb25zdCBHRU9fTUFQX0RFRkFVTFRfVklFV19QUk9KRUNUSU9OID0gJ0VQU0c6Mzg1Nyc7XG5leHBvcnQgY29uc3QgR0VPX01BUF9ERUZBVUxUX0hFSUdIVCA9ICc0ODBweCc7XG5cbi8qKiBJbnRlcm5hbCBsYXllciBpZCByZXNlcnZlZCBmb3IgdGhlIGBiYXNlbWFwYCBpbnB1dCBzaG9ydGN1dC4gKi9cbmV4cG9ydCBjb25zdCBHRU9fTUFQX0JBU0VNQVBfTEFZRVJfSUQgPSAnX19nZW9fYmFzZW1hcCc7XG5cbi8qKiBJbnRlcm5hbCB2ZWN0b3IgbGF5ZXJzIHJlc2VydmVkIGZvciBzZWxlY3Rpb24gLyBtZWFzdXJlIC8gaGlnaGxpZ2h0LiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfU0VMRUNUSU9OX0xBWUVSX0lEID0gJ19fZ2VvX3NlbGVjdGlvbic7XG5leHBvcnQgY29uc3QgR0VPX01BUF9NRUFTVVJFX0xBWUVSX0lEID0gJ19fZ2VvX21lYXN1cmUnO1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfSElHSExJR0hUX0xBWUVSX0lEID0gJ19fZ2VvX2hpZ2hsaWdodCc7XG5cbi8qKlxuICogRGVmYXVsdCBwcm92aW5jZSBleHRlbnQgKEzDom0gxJDhu5NuZyBhcHByb3gsIEVQU0c6NDMyNikgZm9yIOKAnHhlbSB0b8OgbiB04buJbmjigJ0gKFRDUUguMTQgR0Q1KS5cbiAqIEhvc3QgYXBwcyBzaG91bGQgb3ZlcnJpZGUgd2l0aCBhdXRob3JpdGF0aXZlIGJvdW5kYXJ5IGV4dGVudCBmcm9tIEFQSS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVGQVVMVF9QUk9WSU5DRV9FWFRFTlRfNDMyNjogcmVhZG9ubHkgW1xuICBudW1iZXIsXG4gIG51bWJlcixcbiAgbnVtYmVyLFxuICBudW1iZXIsXG5dID0gWzEwNy4yLCAxMS4xNSwgMTA4Ljc1LCAxMi4zNV07XG5cbi8qKiBPcHRpb25hbCB0cmFmZmljIC8gcm9hZHMgcmVmZXJlbmNlIG92ZXJsYXkgKG5vdCBhIHBsYW5uaW5nIGxheWVyKS4gKi9cbmV4cG9ydCBjb25zdCBHRU9fTUFQX1RSQUZGSUNfTEFZRVJfSUQgPSAnX19nZW9fdHJhZmZpYyc7XG5cbmV4cG9ydCBjb25zdCBHRU9fTUFQX0VTUklfSU1BR0VSWV9VUkwgPVxuICAnaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9Xb3JsZF9JbWFnZXJ5L01hcFNlcnZlci90aWxlL3t6fS97eX0ve3h9JztcblxuZXhwb3J0IGNvbnN0IEdFT19NQVBfRVNSSV9TVFJFRVRTX1VSTCA9XG4gICdodHRwczovL3NlcnZlci5hcmNnaXNvbmxpbmUuY29tL0FyY0dJUy9yZXN0L3NlcnZpY2VzL1dvcmxkX1N0cmVldF9NYXAvTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH0nO1xuXG5leHBvcnQgY29uc3QgR0VPX01BUF9FU1JJX1RSQU5TUE9SVF9VUkwgPVxuICAnaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9SZWZlcmVuY2UvV29ybGRfVHJhbnNwb3J0YXRpb24vTWFwU2VydmVyL3RpbGUve3p9L3t5fS97eH0nO1xuXG4vKiogRGVmYXVsdCBiYXNlbWFwIHBpY2tlciBvcHRpb25zICjEkcaw4budbmcgcGjhu5EgLyB24buHIHRpbmgpLiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVGQVVMVF9CQVNFTUFQX09QVElPTlM6IEdlb01hcEJhc2VtYXBPcHRpb25bXSA9IFtcbiAge1xuICAgIGlkOiAnb3NtJyxcbiAgICBsYWJlbDogJ8SQxrDhu51uZyBwaOG7kScsXG4gICAgYmFzZW1hcDogJ29zbScsXG4gICAgcHJldmlld1VybDogJ2h0dHBzOi8vdGlsZS5vcGVuc3RyZWV0bWFwLm9yZy82LzUwLzMwLnBuZycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3NhdGVsbGl0ZScsXG4gICAgbGFiZWw6ICdW4buHIHRpbmgnLFxuICAgIGJhc2VtYXA6IHtcbiAgICAgIHR5cGU6ICd4eXonLFxuICAgICAgdXJsOiBHRU9fTUFQX0VTUklfSU1BR0VSWV9VUkwsXG4gICAgICBhdHRyaWJ1dGlvbnM6ICdFc3JpLCBNYXhhciwgRWFydGhzdGFyIEdlb2dyYXBoaWNzJyxcbiAgICAgIHRpdGxlOiAn4bqibmggduG7hyB0aW5oJyxcbiAgICB9LFxuICAgIHByZXZpZXdVcmw6XG4gICAgICAnaHR0cHM6Ly9zZXJ2ZXIuYXJjZ2lzb25saW5lLmNvbS9BcmNHSVMvcmVzdC9zZXJ2aWNlcy9Xb3JsZF9JbWFnZXJ5L01hcFNlcnZlci90aWxlLzYvMzAvNTAnLFxuICB9LFxuXTtcblxuLyoqIFRyYW5zcG9ydGF0aW9uIHJlZmVyZW5jZSBvdmVybGF5IOKAlCB0b2dnbGUgaW5kZXBlbmRlbnRseSBvZiBiYXNlbWFwLiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfVFJBRkZJQ19PVkVSTEFZOiBHZW9NYXBYeXpMYXllckNvbmZpZyA9IHtcbiAgaWQ6IEdFT19NQVBfVFJBRkZJQ19MQVlFUl9JRCxcbiAgdGl0bGU6ICdM4bubcCBnaWFvIHRow7RuZycsXG4gIHR5cGU6ICd4eXonLFxuICB1cmw6IEdFT19NQVBfRVNSSV9UUkFOU1BPUlRfVVJMLFxuICBhdHRyaWJ1dGlvbnM6ICdFc3JpJyxcbiAgdmlzaWJsZTogZmFsc2UsXG4gIG9wYWNpdHk6IDAuOSxcbiAgekluZGV4OiA1LFxuICBiYXNlbWFwOiBmYWxzZSxcbiAgZ3JvdXA6ICdiYXNlLW1hcCcsXG59O1xuXG4vKiogQnVpbHQtaW4gdG9vbGJhciBhY3Rpb25zIOKAlCBGaWdtYSBtYXAgY2hyb21lIChEYXQgRGFpIExhbSBEb25nIDIwMjYpLiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVGQVVMVF9UT09MQkFSX0FDVElPTlM6IEdlb01hcFRvb2xiYXJBY3Rpb25bXSA9IFtcbiAge1xuICAgIGlkOiAnaG9tZScsXG4gICAgbGFiZWw6ICdUcmFuZyBjaOG7pycsXG4gICAgaWNvbjogJ2hvbWUnLFxuICAgIGljb25TcmM6IEdFT19NQVBfVE9PTEJBUl9JQ09OUy5ob21lLFxuICAgIGljb25Pbmx5OiB0cnVlLFxuICAgIHRvb2x0aXA6ICdUcmFuZyBjaOG7pycsXG4gICAgdmFyaWFudDogJ3ByaW1hcnknLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzZWFyY2gnLFxuICAgIGxhYmVsOiAnVHJhIGPhu6l1JyxcbiAgICBpY29uOiAnc2VhcmNoJyxcbiAgICBpY29uU3JjOiBHRU9fTUFQX1RPT0xCQVJfSUNPTlMuc2VhcmNoLFxuICAgIGljb25Pbmx5OiB0cnVlLFxuICAgIHRvb2x0aXA6ICdUcmEgY+G7qXUgdGjhu61hIMSR4bqldCcsXG4gIH0sXG4gIHtcbiAgICBpZDogJ3BhbicsXG4gICAgbGFiZWw6ICdEaSBjaHV54buDbicsXG4gICAgaWNvbjogJ2RyYWcnLFxuICAgIGljb25TcmM6IEdFT19NQVBfVE9PTEJBUl9JQ09OUy5wYW4sXG4gICAgaWNvbk9ubHk6IHRydWUsXG4gICAgdG9vbHRpcDogJ0RpIGNodXnhu4NuIGLhuqNuIMSR4buTJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnem9vbS1pbicsXG4gICAgbGFiZWw6ICdQaMOzbmcgdG8nLFxuICAgIGljb246ICdwbHVzJyxcbiAgICBpY29uU3JjOiBHRU9fTUFQX1RPT0xCQVJfSUNPTlMuem9vbUluLFxuICAgIGljb25Pbmx5OiB0cnVlLFxuICAgIHRvb2x0aXA6ICdQaMOzbmcgdG8nLFxuICB9LFxuICB7XG4gICAgaWQ6ICd6b29tLW91dCcsXG4gICAgbGFiZWw6ICdUaHUgbmjhu48nLFxuICAgIGljb246ICdtaW51cycsXG4gICAgaWNvblNyYzogR0VPX01BUF9UT09MQkFSX0lDT05TLnpvb21PdXQsXG4gICAgaWNvbk9ubHk6IHRydWUsXG4gICAgdG9vbHRpcDogJ1RodSBuaOG7jycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2Z1bGxzY3JlZW4nLFxuICAgIGxhYmVsOiAnVG/DoG4gbcOgbiBow6xuaCcsXG4gICAgaWNvbjogJ2Z1bGxzY3JlZW4nLFxuICAgIGljb25TcmM6IEdFT19NQVBfVE9PTEJBUl9JQ09OUy5mdWxsc2NyZWVuLFxuICAgIGljb25Pbmx5OiB0cnVlLFxuICAgIHRvb2x0aXA6ICdYZW0gdG/DoG4gYuG6o24gxJHhu5MnLFxuICB9LFxuICB7XG4gICAgaWQ6ICdtZWFzdXJlLWRpc3RhbmNlJyxcbiAgICBsYWJlbDogJ8SQbyBraG/huqNuZyBjw6FjaCcsXG4gICAgaWNvbjogJ2NvbHVtbi13aWR0aCcsXG4gICAgaWNvblNyYzogR0VPX01BUF9UT09MQkFSX0lDT05TLm1lYXN1cmVEaXN0YW5jZSxcbiAgICBpY29uT25seTogdHJ1ZSxcbiAgICB0b29sdGlwOiAnxJBvIGtob+G6o25nIGPDoWNoJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnbWVhc3VyZS1hcmVhJyxcbiAgICBsYWJlbDogJ8SQbyBkaeG7h24gdMOtY2gnLFxuICAgIGljb246ICdib3JkZXItb3V0ZXInLFxuICAgIGljb25TcmM6IEdFT19NQVBfVE9PTEJBUl9JQ09OUy5tZWFzdXJlQXJlYSxcbiAgICBpY29uT25seTogdHJ1ZSxcbiAgICB0b29sdGlwOiAnxJBvIGRp4buHbiB0w61jaCcsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xheWVycycsXG4gICAgbGFiZWw6ICdM4bubcCBi4bqjbiDEkeG7kycsXG4gICAgaWNvbjogJ2FwcHN0b3JlJyxcbiAgICBpY29uU3JjOiBHRU9fTUFQX1RPT0xCQVJfSUNPTlMubGF5ZXJzLFxuICAgIGljb25Pbmx5OiB0cnVlLFxuICAgIHRvb2x0aXA6ICdC4bqtdC904bqvdCBs4bubcCBi4bqjbiDEkeG7kycsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xlZ2VuZCcsXG4gICAgbGFiZWw6ICdDaMO6IGdp4bqjaScsXG4gICAgaWNvbjogJ3Vub3JkZXJlZC1saXN0JyxcbiAgICBpY29uT25seTogdHJ1ZSxcbiAgICB0b29sdGlwOiAnWGVtIGNow7ogZ2nhuqNpJyxcbiAgfSxcbiAge1xuICAgIGlkOiAnc25hcHNob3QnLFxuICAgIGxhYmVsOiAnQ2jhu6VwIOG6o25oJyxcbiAgICBpY29uOiAnY2FtZXJhJyxcbiAgICBpY29uT25seTogdHJ1ZSxcbiAgICB0b29sdGlwOiAnQ2jhu6VwIOG6o25oIGLhuqNuIMSR4buTJyxcbiAgfSxcbl07XG5cbi8qKlxuICogRGVtbyB0aGVtYXRpYyBvdmVybGF5cyBmb3IgU3Rvcnlib29rIChvZmZsaW5lLWZyaWVuZGx5IEdlb0pTT04pLlxuICogR3JvdXBzIG1hdGNoIHBvcnRhbCBsYXllcnMgcG9wb3ZlcjogUUhTREQgwrcgxJHhu4thIGNow61uaCDCtyBoaeG7h24gdHLhuqFuZy5cbiAqL1xuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVNT19USEVNQVRJQ19MQVlFUlM6IEdlb01hcExheWVyQ29uZmlnW10gPSBbXG4gIHtcbiAgICBpZDogJ2RlbW8tcWhzZGQtMjAyMCcsXG4gICAgdGl0bGU6ICdRSFNERCB04buJbmggTMOibSDEkOG7k25nIDIwMjAtMjAyNScsXG4gICAgdHlwZTogJ2dlb2pzb24nLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgb3BhY2l0eTogMC40LFxuICAgIHpJbmRleDogMTAsXG4gICAgZ3JvdXA6ICdxaHNkZCcsXG4gICAgZ3JvdXBMYWJlbDogJ0LhuqNuIMSR4buTIFFIU0REJyxcbiAgICBncm91cFNlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgYmFzZW1hcDogZmFsc2UsXG4gICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnLFxuICAgIGZlYXR1cmVQcm9qZWN0aW9uOiAnRVBTRzozODU3JyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGNvZGU6ICdPRFQnLCBuYW1lOiAnxJDhuqV0IOG7nyDEkcO0IHRo4buLIChRSCAyMDIwLTIwMjUpJyB9LFxuICAgICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgICAgICBjb29yZGluYXRlczogW1xuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEwOC40MiwgMTEuOTNdLFxuICAgICAgICAgICAgICAgIFsxMDguNDgsIDExLjkzXSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ4LCAxMS45N10sXG4gICAgICAgICAgICAgICAgWzEwOC40MiwgMTEuOTddLFxuICAgICAgICAgICAgICAgIFsxMDguNDIsIDExLjkzXSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIGlkOiAnZGVtby1xaHNkZC0yMDI1JyxcbiAgICB0aXRsZTogJ1FIU0REIHThu4luaCBMw6JtIMSQ4buTbmcgMjAyNS0yMDMwJyxcbiAgICB0eXBlOiAnZ2VvanNvbicsXG4gICAgdmlzaWJsZTogZmFsc2UsXG4gICAgb3BhY2l0eTogMC40LFxuICAgIHpJbmRleDogMTEsXG4gICAgZ3JvdXA6ICdxaHNkZCcsXG4gICAgZ3JvdXBMYWJlbDogJ0LhuqNuIMSR4buTIFFIU0REJyxcbiAgICBncm91cFNlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgYmFzZW1hcDogZmFsc2UsXG4gICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnLFxuICAgIGZlYXR1cmVQcm9qZWN0aW9uOiAnRVBTRzozODU3JyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGNvZGU6ICdPRFQnLCBuYW1lOiAnxJDhuqV0IOG7nyDEkcO0IHRo4buLIChRSCAyMDI1LTIwMzApJyB9LFxuICAgICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgICB0eXBlOiAnUG9seWdvbicsXG4gICAgICAgICAgICBjb29yZGluYXRlczogW1xuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEwOC40MywgMTEuOTI1XSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ5LCAxMS45MjVdLFxuICAgICAgICAgICAgICAgIFsxMDguNDksIDExLjk2NV0sXG4gICAgICAgICAgICAgICAgWzEwOC40MywgMTEuOTY1XSxcbiAgICAgICAgICAgICAgICBbMTA4LjQzLCAxMS45MjVdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgaWQ6ICdkZW1vLXBhcmNlbCcsXG4gICAgdGl0bGU6ICdU4buJbmggTMOibSDEkOG7k25nJyxcbiAgICB0eXBlOiAnZ2VvanNvbicsXG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICBvcGFjaXR5OiAwLjQsXG4gICAgekluZGV4OiAyMCxcbiAgICBncm91cDogJ2NhZGFzdHJlJyxcbiAgICBncm91cExhYmVsOiAnQuG6o24gxJHhu5MgxJHhu4thIGNow61uaCcsXG4gICAgZ3JvdXBTZWxlY3Rpb246ICdtdWx0aScsXG4gICAgYmFzZW1hcDogZmFsc2UsXG4gICAgcXVlcnlhYmxlOiB0cnVlLFxuICAgIGRhdGFQcm9qZWN0aW9uOiAnRVBTRzo0MzI2JyxcbiAgICBmZWF0dXJlUHJvamVjdGlvbjogJ0VQU0c6Mzg1NycsXG4gICAgZGF0YToge1xuICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgIGZlYXR1cmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsXG4gICAgICAgICAgcHJvcGVydGllczogeyBwYXJjZWw6ICcxMicsIHNoZWV0OiAnNDUnIH0sXG4gICAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMTA4LjQ1LCAxMS45NF0sXG4gICAgICAgICAgICAgICAgWzEwOC40NjUsIDExLjk0XSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ2NSwgMTEuOTUyXSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ1LCAxMS45NTJdLFxuICAgICAgICAgICAgICAgIFsxMDguNDUsIDExLjk0XSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfSxcbiAge1xuICAgIGlkOiAnZGVtby1jdXJyZW50LTIwMjAnLFxuICAgIHRpdGxlOiAnUUhTREQgdOG7iW5oIEzDom0gxJDhu5NuZyAyMDIwLTIwMjUnLFxuICAgIHR5cGU6ICdnZW9qc29uJyxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIG9wYWNpdHk6IDAuNCxcbiAgICB6SW5kZXg6IDEyLFxuICAgIGdyb3VwOiAnY3VycmVudCcsXG4gICAgZ3JvdXBMYWJlbDogJ0LhuqNuIMSR4buTIGhp4buHbiB0cuG6oW5nJyxcbiAgICBncm91cFNlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgYmFzZW1hcDogZmFsc2UsXG4gICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnLFxuICAgIGZlYXR1cmVQcm9qZWN0aW9uOiAnRVBTRzozODU3JyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGNvZGU6ICdPTlQnLCBuYW1lOiAnxJDhuqV0IOG7nyB04bqhaSBuw7RuZyB0aMO0biAoSFQgMjAyMC0yMDI1KScgfSxcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxMDguNDQsIDExLjkyXSxcbiAgICAgICAgICAgICAgICBbMTA4LjUsIDExLjkyXSxcbiAgICAgICAgICAgICAgICBbMTA4LjUsIDExLjk2XSxcbiAgICAgICAgICAgICAgICBbMTA4LjQ0LCAxMS45Nl0sXG4gICAgICAgICAgICAgICAgWzEwOC40NCwgMTEuOTJdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICB7XG4gICAgaWQ6ICdkZW1vLWN1cnJlbnQtMjAyNScsXG4gICAgdGl0bGU6ICdRSFNERCB04buJbmggTMOibSDEkOG7k25nIDIwMjUtMjAzMCcsXG4gICAgdHlwZTogJ2dlb2pzb24nLFxuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIG9wYWNpdHk6IDAuNCxcbiAgICB6SW5kZXg6IDEzLFxuICAgIGdyb3VwOiAnY3VycmVudCcsXG4gICAgZ3JvdXBMYWJlbDogJ0LhuqNuIMSR4buTIGhp4buHbiB0cuG6oW5nJyxcbiAgICBncm91cFNlbGVjdGlvbjogJ3NpbmdsZScsXG4gICAgYmFzZW1hcDogZmFsc2UsXG4gICAgZGF0YVByb2plY3Rpb246ICdFUFNHOjQzMjYnLFxuICAgIGZlYXR1cmVQcm9qZWN0aW9uOiAnRVBTRzozODU3JyxcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgZmVhdHVyZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7IGNvZGU6ICdPTlQnLCBuYW1lOiAnxJDhuqV0IOG7nyB04bqhaSBuw7RuZyB0aMO0biAoSFQgMjAyNS0yMDMwKScgfSxcbiAgICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxMDguNDM1LCAxMS45MTVdLFxuICAgICAgICAgICAgICAgIFsxMDguNDk1LCAxMS45MTVdLFxuICAgICAgICAgICAgICAgIFsxMDguNDk1LCAxMS45NTVdLFxuICAgICAgICAgICAgICAgIFsxMDguNDM1LCAxMS45NTVdLFxuICAgICAgICAgICAgICAgIFsxMDguNDM1LCAxMS45MTVdLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuXTtcblxuLyoqXG4gKiBTYW1wbGUgbGVnZW5kIOKAlCBwbGFjZWhvbGRlciBjb2xvcnMgdW50aWwgVGjDtG5nIHTGsCAwOS8yMDI0IHBhbGV0dGUgaXMgY29tcGxldGUgKFExM+KAk1ExNSkuXG4gKiBEbyBub3QgdHJlYXQgYXMgbGVnYWxseSBhdXRob3JpdGF0aXZlLlxuICovXG5leHBvcnQgY29uc3QgR0VPX01BUF9ERU1PX0xFR0VORF9JVEVNUzogR2VvTWFwTGVnZW5kSXRlbVtdID0gW1xuICB7IGNvZGU6ICdPRFQnLCBsYWJlbDogJ8SQ4bqldCDhu58gxJHDtCB0aOG7iycsIGNvbG9yOiAnI0U4N0IzNScgfSxcbiAgeyBjb2RlOiAnT05UJywgbGFiZWw6ICfEkOG6pXQg4bufIHThuqFpIG7DtG5nIHRow7RuJywgY29sb3I6ICcjRjJDMTRFJyB9LFxuICB7IGNvZGU6ICdTS0MnLCBsYWJlbDogJ8SQ4bqldCBjxqEgc+G7nyBz4bqjbiB4deG6pXQga2luaCBkb2FuaCcsIGNvbG9yOiAnI0M0NUMyNicgfSxcbiAgeyBjb2RlOiAnREdUJywgbGFiZWw6ICfEkOG6pXQgZ2lhbyB0aMO0bmcnLCBjb2xvcjogJyM2QjcyODAnIH0sXG4gIHsgY29kZTogJ1RNRCcsIGxhYmVsOiAnxJDhuqV0IHRoxrDGoW5nIG3huqFpIGThu4tjaCB24bulJywgY29sb3I6ICcjREIyNzc3JyB9LFxuICB7IGNvZGU6ICdDTE4nLCBsYWJlbDogJ8SQ4bqldCB0cuG7k25nIGPDonkgbMOidSBuxINtJywgY29sb3I6ICcjMTZBMzRBJyB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEdFT19NQVBfREVGQVVMVF9IRUxQX1NFQ1RJT05TOiBBcnJheTx7IHRpdGxlOiBzdHJpbmc7IGJvZHk6IHN0cmluZyB9PiA9IFtcbiAge1xuICAgIHRpdGxlOiAnRGkgY2h1eeG7g24gYuG6o24gxJHhu5MnLFxuICAgIGJvZHk6ICdLw6lvIGNodeG7mXQgxJHhu4MgcGFuLiBDdeG7mW4gY2h14buZdCBob+G6t2MgZMO5bmcgbsO6dCArLy0gxJHhu4MgdGh1IHBow7NuZy4gRMO5bmcg4oCcUGjDs25nIHRvIHRoZW8gdsO5bmfigJ0gLyDigJxUaHUgbmjhu48gdGhlbyB2w7luZ+KAnSDEkeG7gyBraG9hbmggdsO5bmcgdHLDqm4gYuG6o24gxJHhu5MuIOKAnFhlbSB0b8OgbiB04buJbmjigJ0gY8SDbiBraHVuZyBuaMOsbiB24buBIHBo4bqhbSB2aSB04buJbmguJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnVHJhIGPhu6l1IHRo4butYSDEkeG6pXQnLFxuICAgIGJvZHk6ICdN4bufIOKAnFRyYSBj4bupdeKAnSDEkeG7gyB0w6xtIHRoZW8gY2jhu6cgc+G7rSBk4bulbmcsIEdDTiwgdOG7jWEgxJHhu5ksIMSR4buLYSBjaOG7iSBob+G6t2Mgc+G7kSB04budL3Ro4butYS4gS+G6v3QgcXXhuqMgaGnhu4NuIHRo4buLIGRhbmggc8OhY2ggdsOgIGhpZ2hsaWdodCB0csOqbiBi4bqjbiDEkeG7ky4nLFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdM4bubcCBi4bqjbiDEkeG7kycsXG4gICAgYm9keTogJ03hu58g4oCcTOG7m3AgYuG6o24gxJHhu5PigJ0gxJHhu4MgYuG6rXQvdOG6r3QgcXV5IGhv4bqhY2ggU0TEkCwgaGnhu4duIHRy4bqhbmcgU0TEkCwgdGjhu61hIMSR4bqldC4gQ2jhu41uIHbhu4cgdGluaCDhu58gYuG7mSBjaHV54buDbiBs4bubcCBu4buBbi4gQuG6rXQgbmhp4buBdSBs4bubcCBjw7luZyBsw7pjIMSR4buDIGNo4buTbmcgeOG6v3Agc28gc8OhbmguJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnxJDGoW4gduG7iyBow6BuaCBjaMOtbmgnLFxuICAgIGJvZHk6ICdN4bufIGLhu5kgbOG7jWMgxJBWSEMgY+G6pXAgeMOjIMSR4buDIHRodSBo4bq5cCBraHVuZyBuaMOsbiB0aGVvIHjDoyDEkcOjIGNo4buNbi4g4oCcWGVtIHRvw6BuIHThu4luaOKAnSDEkcawYSBi4bqjbiDEkeG7kyB24buBIHRvw6BuIGPhuqNuaCB04buJbmguJyxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnxJBvIMSR4bqhYyAmIHRp4buHbiDDrWNoJyxcbiAgICBib2R5OiAnxJBvIGtob+G6o25nIGPDoWNoIC8gZGnhu4duIHTDrWNoIGLhurFuZyBjw6FjaCBuaOG6pXAgY8OhYyDEkWnhu4NtIHRyw6puIGLhuqNuIMSR4buTIChuaMOheSDEkcO6cCDEkeG7gyBr4bq/dCB0aMO6YykuIETDuW5nIOKAnMSQ4buZIHRyb25nIHN14buRdOKAnSDEkeG7gyBuaMOsbiB4dXnDqm4gbOG7m3AuIOKAnENo4bulcCDhuqNuaOKAnSB04bqjaSBQTkcga2h1bmcgbmjDrG4gaGnhu4duIHThuqFpLicsXG4gIH0sXG4gIHtcbiAgICB0aXRsZTogJ1bhu4sgdHLDrSBj4bunYSB0w7RpJyxcbiAgICBib2R5OiAnQ2hvIHBow6lwIHRyw6xuaCBkdXnhu4d0IGNoaWEgc+G6uyB24buLIHRyw60gxJHhu4MgY8SDbiBnaeG7r2EgYuG6o24gxJHhu5MgdOG6oWkgduG7iyB0csOtIHRoaeG6v3QgYuG7iyBj4bunYSBi4bqhbi4nLFxuICB9LFxuXTtcblxuLyoqIERlbW8gYWRtaW4gdHJlZSAoeMOjKSBmb3IgU3Rvcnlib29rIOKAlCByZXBsYWNlIHZpYSBBUEkgaW4gcHJvZHVjdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBHRU9fTUFQX0RFTU9fQURNSU5fTk9ERVM6IEdlb1RyZWVOb2RlW10gPSBbXG4gIHtcbiAgICBrZXk6ICdsYW0tZG9uZycsXG4gICAgdGl0bGU6ICdU4buJbmggTMOibSDEkOG7k25nJyxcbiAgICBleHBhbmRlZDogdHJ1ZSxcbiAgICBjaGlsZHJlbjogW1xuICAgICAgeyBrZXk6ICd4YS0xJywgdGl0bGU6ICdYw6MgxJDhuqEgVOG6u2gnLCBpc0xlYWY6IHRydWUgfSxcbiAgICAgIHsga2V5OiAneGEtMicsIHRpdGxlOiAnWMOjIMSQ4bqhIEh1b2FpJywgaXNMZWFmOiB0cnVlIH0sXG4gICAgICB7IGtleTogJ3hhLTMnLCB0aXRsZTogJ1jDoyDEkOG6oSBLaG8nLCBpc0xlYWY6IHRydWUgfSxcbiAgICAgIHsga2V5OiAneGEtNCcsIHRpdGxlOiAnUGjGsOG7nW5nIDEgKMSQw6AgTOG6oXQpJywgaXNMZWFmOiB0cnVlIH0sXG4gICAgICB7IGtleTogJ3hhLTUnLCB0aXRsZTogJ1BoxrDhu51uZyAyICjEkMOgIEzhuqF0KScsIGlzTGVhZjogdHJ1ZSB9LFxuICAgIF0sXG4gIH0sXG5dO1xuXG4vKiogRGVtbyBwYXJjZWwgZGV0YWlsIGZvciBTdG9yeWJvb2sgc2VhcmNoL3BvcHVwIChUQ1FILjEyKS4gKi9cbmV4cG9ydCBjb25zdCBHRU9fTUFQX0RFTU9fUEFSQ0VMX0RFVEFJTDogR2VvTWFwUGFyY2VsRGV0YWlsID0ge1xuICBwYXJjZWxDb2RlOiAnMDEwMDAwMTIzNCcsXG4gIHBhcmNlbE51bWJlcjogJzIwMjMnLFxuICBzaGVldE51bWJlcjogJzE1MycsXG4gIHdhcmQ6ICdQaMaw4budbmcgMScsXG4gIHByb3ZpbmNlOiAnTMOibSDEkOG7k25nJyxcbiAgYXJlYTogJzI1MDAgbcKyJyxcbiAgbGVnYWxBcmVhOiAnMjUwMCBtwrInLFxuICBsYW5kVXNlOiAnTFVDIC0gxJDhuqV0IGNodXnDqm4gdHLhu5NuZyBsw7phIG7GsOG7m2MnLFxuICBhZGRyZXNzOiAnU+G7kSAxMCwgxJHGsOG7nW5nIFRy4bqnbiBQaMO6JyxcbiAgdXNlRm9ybTogJ1Phu60gZOG7pW5nIHJpw6puZycsXG4gIHJlZ2lzdHJhdGlvblN0YXR1czogJ8SQw6MgY+G6pXAgZ2nhuqV5IGNo4bupbmcgbmjhuq1uJyxcbiAgbGFuZFByaWNlOiAnxJBhbmcgY+G6rXAgbmjhuq10JyxcbiAgc2hhcGVJbmZvOiAnSMOsbmggY2jhu68gbmjhuq10JyxcbiAgcGxhbm5pbmdJbmZvOiAnTuG6sW0gdHJvbmcgcXV5IGhv4bqhY2ggxJHhuqV0IOG7nyDEkcO0IHRo4buLIGdpYWkgxJFv4bqhbiAyMDIx4oCTMjAzMCcsXG59O1xuXG4vKipcbiAqIFBsYWNlaG9sZGVyIGVuZHBvaW50cyDigJQgcmVwbGFjZSB2aWEgZW52aXJvbm1lbnQgLyBBUEkuXG4gKiBEbyBub3QgaGFyZC1jb2RlIHByb2R1Y3Rpb24gZG9tYWlucyBoZXJlLlxuICovXG5leHBvcnQgY29uc3QgR0VPX01BUF9FTlZfUExBQ0VIT0xERVJTID0ge1xuICB3bXNVcmw6ICdodHRwczovL3tNQVBfQVBJX0hPU1R9L2dlb3NlcnZlci93bXMnLFxuICB4eXpTYXRlbGxpdGVVcmw6XG4gICAgJ2h0dHBzOi8ve1RJTEVfSE9TVH0vc2F0ZWxsaXRlL3t6fS97eH0ve3l9LnBuZycsXG4gIGdlb2pzb25QYXJjZWxVcmw6ICdodHRwczovL3tNQVBfQVBJX0hPU1R9L2FwaS92MS9wYXJjZWxzLmdlb2pzb24nLFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBFeGFtcGxlIG11bHRpLWxheWVyIHN0YWNrIGZvciBsYW5kLXVzZSBwbGFubmluZyBkZW1vcyAvIFN0b3J5Ym9vay5cbiAqIFVSTHMgYXJlIHBsYWNlaG9sZGVyczsgV01TL1hZWiB0aWxlcyB3aWxsIGZhaWwgdW50aWwgZW52IGlzIHdpcmVkLlxuICovXG5leHBvcnQgY29uc3QgR0VPX01BUF9ERUZBVUxUX1BMQU5OSU5HX0xBWUVSUzogR2VvTWFwTGF5ZXJDb25maWdbXSA9IFtcbiAge1xuICAgIGlkOiAnb3NtJyxcbiAgICB0aXRsZTogJ0LhuqNuIMSR4buTIMSRxrDhu51uZyBwaOG7kScsXG4gICAgdHlwZTogJ29zbScsXG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICBvcGFjaXR5OiAxLFxuICAgIHpJbmRleDogMCxcbiAgICBiYXNlbWFwOiB0cnVlLFxuICAgIGdyb3VwOiAnYmFzZS1tYXAnLFxuICB9LFxuICB7XG4gICAgaWQ6ICdzYXRlbGxpdGUnLFxuICAgIHRpdGxlOiAn4bqibmggduG7hyB0aW5oJyxcbiAgICB0eXBlOiAneHl6JyxcbiAgICB1cmw6IEdFT19NQVBfRU5WX1BMQUNFSE9MREVSUy54eXpTYXRlbGxpdGVVcmwsXG4gICAgdmlzaWJsZTogZmFsc2UsXG4gICAgb3BhY2l0eTogMSxcbiAgICB6SW5kZXg6IDAsXG4gICAgYmFzZW1hcDogdHJ1ZSxcbiAgICBncm91cDogJ2Jhc2UtbWFwJyxcbiAgICBhdHRyaWJ1dGlvbnM6ICdTYXRlbGxpdGUgKHBsYWNlaG9sZGVyKScsXG4gIH0sXG4gIHtcbiAgICBpZDogJ2xhbmQtdXNlLXBsYW5uaW5nJyxcbiAgICB0aXRsZTogJ1F1eSBob+G6oWNoIHPhu60gZOG7pW5nIMSR4bqldCcsXG4gICAgdHlwZTogJ3dtcycsXG4gICAgdXJsOiBHRU9fTUFQX0VOVl9QTEFDRUhPTERFUlMud21zVXJsLFxuICAgIGxheWVyTmFtZTogJ3dvcmtzcGFjZTpsYW5kX3VzZV9wbGFubmluZycsXG4gICAgcGFyYW1zOiB7XG4gICAgICBMQVlFUlM6ICd3b3Jrc3BhY2U6bGFuZF91c2VfcGxhbm5pbmcnLFxuICAgICAgVElMRUQ6IHRydWUsXG4gICAgfSxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIG9wYWNpdHk6IDAuNyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIHByb2plY3Rpb246ICdFUFNHOjM4NTcnLFxuICAgIHF1ZXJ5YWJsZTogdHJ1ZSxcbiAgICBncm91cDogJ3BsYW5uaW5nJyxcbiAgICBzZXJ2ZXJUeXBlOiAnZ2Vvc2VydmVyJyxcbiAgfSxcbiAge1xuICAgIGlkOiAncGFyY2VsLWJvdW5kYXJ5JyxcbiAgICB0aXRsZTogJ1JhbmggZ2nhu5tpIHRo4butYSDEkeG6pXQnLFxuICAgIHR5cGU6ICd3bXMnLFxuICAgIHVybDogR0VPX01BUF9FTlZfUExBQ0VIT0xERVJTLndtc1VybCxcbiAgICBsYXllck5hbWU6ICd3b3Jrc3BhY2U6cGFyY2VsX2JvdW5kYXJ5JyxcbiAgICBwYXJhbXM6IHtcbiAgICAgIExBWUVSUzogJ3dvcmtzcGFjZTpwYXJjZWxfYm91bmRhcnknLFxuICAgICAgVElMRUQ6IHRydWUsXG4gICAgfSxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIG9wYWNpdHk6IDAuOSxcbiAgICB6SW5kZXg6IDIwLFxuICAgIHF1ZXJ5YWJsZTogdHJ1ZSxcbiAgICBncm91cDogJ3BsYW5uaW5nJyxcbiAgICBzZXJ2ZXJUeXBlOiAnZ2Vvc2VydmVyJyxcbiAgfSxcbiAge1xuICAgIGlkOiBHRU9fTUFQX1NFTEVDVElPTl9MQVlFUl9JRCxcbiAgICB0aXRsZTogJ8SQ4buRaSB0xrDhu6NuZyDEkWFuZyBjaOG7jW4nLFxuICAgIHR5cGU6ICd2ZWN0b3InLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgb3BhY2l0eTogMSxcbiAgICB6SW5kZXg6IDEwMCxcbiAgICBncm91cDogJ3N5c3RlbScsXG4gICAgZmVhdHVyZXM6IFtdLFxuICB9LFxuICB7XG4gICAgaWQ6IEdFT19NQVBfTUVBU1VSRV9MQVlFUl9JRCxcbiAgICB0aXRsZTogJ0vhur90IHF14bqjIMSRbycsXG4gICAgdHlwZTogJ3ZlY3RvcicsXG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICBvcGFjaXR5OiAxLFxuICAgIHpJbmRleDogMTEwLFxuICAgIGdyb3VwOiAnc3lzdGVtJyxcbiAgICBmZWF0dXJlczogW10sXG4gIH0sXG5dO1xuIl19
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public façade emitted via `mapReady`. Keeps OpenLayers Map out of templates
|
|
3
|
+
* while allowing host features to drive view / layers.
|
|
4
|
+
*/
|
|
5
|
+
export class GeoMapController {
|
|
6
|
+
mapService;
|
|
7
|
+
layerService;
|
|
8
|
+
constructor(mapService, layerService) {
|
|
9
|
+
this.mapService = mapService;
|
|
10
|
+
this.layerService = layerService;
|
|
11
|
+
}
|
|
12
|
+
getMap() {
|
|
13
|
+
return this.mapService.getMap();
|
|
14
|
+
}
|
|
15
|
+
setCenter(center, zoom) {
|
|
16
|
+
this.mapService.setCenter(center, zoom);
|
|
17
|
+
}
|
|
18
|
+
setZoom(zoom) {
|
|
19
|
+
this.mapService.setZoom(zoom);
|
|
20
|
+
}
|
|
21
|
+
getZoom() {
|
|
22
|
+
return this.mapService.getZoom();
|
|
23
|
+
}
|
|
24
|
+
zoomIn() {
|
|
25
|
+
this.mapService.zoomBy(1);
|
|
26
|
+
}
|
|
27
|
+
zoomOut() {
|
|
28
|
+
this.mapService.zoomBy(-1);
|
|
29
|
+
}
|
|
30
|
+
setBasemap(basemap) {
|
|
31
|
+
this.mapService.setBasemap(basemap);
|
|
32
|
+
}
|
|
33
|
+
fitExtent(extent, options) {
|
|
34
|
+
this.mapService.fitExtent(extent, options);
|
|
35
|
+
}
|
|
36
|
+
fitLonLatExtent(extent4326, options) {
|
|
37
|
+
this.mapService.fitLonLatExtent(extent4326, options);
|
|
38
|
+
}
|
|
39
|
+
/** Fit province / toàn tỉnh (TCQH.14 GD5) — not browser fullscreen. */
|
|
40
|
+
fitProvince(extent4326, options) {
|
|
41
|
+
this.mapService.fitProvince(extent4326, options);
|
|
42
|
+
}
|
|
43
|
+
setHighlightFromGeoJson(data, options) {
|
|
44
|
+
this.mapService.setHighlightFromGeoJson(data, options);
|
|
45
|
+
}
|
|
46
|
+
setHighlightFeatures(features, options) {
|
|
47
|
+
this.mapService.setHighlightFeatures(features, options);
|
|
48
|
+
}
|
|
49
|
+
clearHighlight() {
|
|
50
|
+
this.mapService.clearHighlight();
|
|
51
|
+
}
|
|
52
|
+
updateSize() {
|
|
53
|
+
this.mapService.updateSize();
|
|
54
|
+
}
|
|
55
|
+
syncLayers(configs) {
|
|
56
|
+
this.mapService.syncLayers(configs);
|
|
57
|
+
}
|
|
58
|
+
setLayerVisibility(layerId, visible) {
|
|
59
|
+
this.mapService.setLayerVisibility(layerId, visible);
|
|
60
|
+
}
|
|
61
|
+
setLayerOpacity(layerId, opacity) {
|
|
62
|
+
this.mapService.setLayerOpacity(layerId, opacity);
|
|
63
|
+
}
|
|
64
|
+
getLayers() {
|
|
65
|
+
return this.mapService.getManagedLayers();
|
|
66
|
+
}
|
|
67
|
+
getLayerRuntimeStates() {
|
|
68
|
+
return this.layerService.getAllRuntimeStates();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvLW1hcC5jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ2VvLXVpL3NyYy9saWIvZmlnbWEvZ2VvLW1hcC9nZW8tbWFwLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUVSO0lBQ0E7SUFGbkIsWUFDbUIsVUFBeUIsRUFDekIsWUFBZ0M7UUFEaEMsZUFBVSxHQUFWLFVBQVUsQ0FBZTtRQUN6QixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7SUFDaEQsQ0FBQztJQUVKLE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFrQixFQUFFLElBQWE7UUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQTJCO1FBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxTQUFTLENBQ1AsTUFBd0MsRUFDeEMsT0FBcUU7UUFFckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxlQUFlLENBQ2IsVUFBNEMsRUFDNUMsT0FBcUU7UUFFckUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsV0FBVyxDQUNULFVBQXNELEVBQ3RELE9BQXFFO1FBRXJFLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsSUFBWSxFQUFFLE9BQWdDO1FBQ3BFLElBQUksQ0FBQyxVQUFVLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxvQkFBb0IsQ0FDbEIsUUFBNkIsRUFDN0IsT0FBZ0M7UUFFaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQTRCO1FBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxPQUFlLEVBQUUsT0FBZ0I7UUFDbEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBZTtRQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQ2pELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIE9sTWFwIGZyb20gJ29sL01hcCc7XG5pbXBvcnQgdHlwZSB7IENvb3JkaW5hdGUgfSBmcm9tICdvbC9jb29yZGluYXRlJztcbmltcG9ydCB0eXBlIEZlYXR1cmUgZnJvbSAnb2wvRmVhdHVyZSc7XG5pbXBvcnQgdHlwZSBHZW9tZXRyeSBmcm9tICdvbC9nZW9tL0dlb21ldHJ5JztcbmltcG9ydCB0eXBlIHtcbiAgR2VvTWFwQmFzZW1hcElucHV0LFxuICBHZW9NYXBIaWdobGlnaHRPcHRpb25zLFxuICBHZW9NYXBMYXllckNvbmZpZyxcbiAgR2VvTWFwTGF5ZXJSdW50aW1lU3RhdGUsXG59IGZyb20gJy4vZ2VvLW1hcC50eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZWRNYXBMYXllciB9IGZyb20gJy4vc2VydmljZXMvZ2VvLW1hcC1sYXllci5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgR2VvTWFwU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2VvLW1hcC5zZXJ2aWNlJztcbmltcG9ydCB0eXBlIHsgR2VvTWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9nZW8tbWFwLWxheWVyLnNlcnZpY2UnO1xuXG4vKipcbiAqIFB1YmxpYyBmYcOnYWRlIGVtaXR0ZWQgdmlhIGBtYXBSZWFkeWAuIEtlZXBzIE9wZW5MYXllcnMgTWFwIG91dCBvZiB0ZW1wbGF0ZXNcbiAqIHdoaWxlIGFsbG93aW5nIGhvc3QgZmVhdHVyZXMgdG8gZHJpdmUgdmlldyAvIGxheWVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIEdlb01hcENvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1hcFNlcnZpY2U6IEdlb01hcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYXllclNlcnZpY2U6IEdlb01hcExheWVyU2VydmljZSxcbiAgKSB7fVxuXG4gIGdldE1hcCgpOiBPbE1hcCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLm1hcFNlcnZpY2UuZ2V0TWFwKCk7XG4gIH1cblxuICBzZXRDZW50ZXIoY2VudGVyOiBDb29yZGluYXRlLCB6b29tPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5tYXBTZXJ2aWNlLnNldENlbnRlcihjZW50ZXIsIHpvb20pO1xuICB9XG5cbiAgc2V0Wm9vbSh6b29tOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1hcFNlcnZpY2Uuc2V0Wm9vbSh6b29tKTtcbiAgfVxuXG4gIGdldFpvb20oKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tYXBTZXJ2aWNlLmdldFpvb20oKTtcbiAgfVxuXG4gIHpvb21JbigpOiB2b2lkIHtcbiAgICB0aGlzLm1hcFNlcnZpY2Uuem9vbUJ5KDEpO1xuICB9XG5cbiAgem9vbU91dCgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcFNlcnZpY2Uuem9vbUJ5KC0xKTtcbiAgfVxuXG4gIHNldEJhc2VtYXAoYmFzZW1hcDogR2VvTWFwQmFzZW1hcElucHV0KTogdm9pZCB7XG4gICAgdGhpcy5tYXBTZXJ2aWNlLnNldEJhc2VtYXAoYmFzZW1hcCk7XG4gIH1cblxuICBmaXRFeHRlbnQoXG4gICAgZXh0ZW50OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBvcHRpb25zPzogeyBwYWRkaW5nPzogbnVtYmVyW107IG1heFpvb20/OiBudW1iZXI7IGR1cmF0aW9uPzogbnVtYmVyIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMubWFwU2VydmljZS5maXRFeHRlbnQoZXh0ZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIGZpdExvbkxhdEV4dGVudChcbiAgICBleHRlbnQ0MzI2OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBvcHRpb25zPzogeyBwYWRkaW5nPzogbnVtYmVyW107IG1heFpvb20/OiBudW1iZXI7IGR1cmF0aW9uPzogbnVtYmVyIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMubWFwU2VydmljZS5maXRMb25MYXRFeHRlbnQoZXh0ZW50NDMyNiwgb3B0aW9ucyk7XG4gIH1cblxuICAvKiogRml0IHByb3ZpbmNlIC8gdG/DoG4gdOG7iW5oIChUQ1FILjE0IEdENSkg4oCUIG5vdCBicm93c2VyIGZ1bGxzY3JlZW4uICovXG4gIGZpdFByb3ZpbmNlKFxuICAgIGV4dGVudDQzMjY/OiByZWFkb25seSBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICBvcHRpb25zPzogeyBwYWRkaW5nPzogbnVtYmVyW107IG1heFpvb20/OiBudW1iZXI7IGR1cmF0aW9uPzogbnVtYmVyIH0sXG4gICk6IHZvaWQge1xuICAgIHRoaXMubWFwU2VydmljZS5maXRQcm92aW5jZShleHRlbnQ0MzI2LCBvcHRpb25zKTtcbiAgfVxuXG4gIHNldEhpZ2hsaWdodEZyb21HZW9Kc29uKGRhdGE6IG9iamVjdCwgb3B0aW9ucz86IEdlb01hcEhpZ2hsaWdodE9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLm1hcFNlcnZpY2Uuc2V0SGlnaGxpZ2h0RnJvbUdlb0pzb24oZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBzZXRIaWdobGlnaHRGZWF0dXJlcyhcbiAgICBmZWF0dXJlczogRmVhdHVyZTxHZW9tZXRyeT5bXSxcbiAgICBvcHRpb25zPzogR2VvTWFwSGlnaGxpZ2h0T3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5tYXBTZXJ2aWNlLnNldEhpZ2hsaWdodEZlYXR1cmVzKGZlYXR1cmVzLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFySGlnaGxpZ2h0KCk6IHZvaWQge1xuICAgIHRoaXMubWFwU2VydmljZS5jbGVhckhpZ2hsaWdodCgpO1xuICB9XG5cbiAgdXBkYXRlU2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLm1hcFNlcnZpY2UudXBkYXRlU2l6ZSgpO1xuICB9XG5cbiAgc3luY0xheWVycyhjb25maWdzOiBHZW9NYXBMYXllckNvbmZpZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5tYXBTZXJ2aWNlLnN5bmNMYXllcnMoY29uZmlncyk7XG4gIH1cblxuICBzZXRMYXllclZpc2liaWxpdHkobGF5ZXJJZDogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5tYXBTZXJ2aWNlLnNldExheWVyVmlzaWJpbGl0eShsYXllcklkLCB2aXNpYmxlKTtcbiAgfVxuXG4gIHNldExheWVyT3BhY2l0eShsYXllcklkOiBzdHJpbmcsIG9wYWNpdHk6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMubWFwU2VydmljZS5zZXRMYXllck9wYWNpdHkobGF5ZXJJZCwgb3BhY2l0eSk7XG4gIH1cblxuICBnZXRMYXllcnMoKTogQ3JlYXRlZE1hcExheWVyW10ge1xuICAgIHJldHVybiB0aGlzLm1hcFNlcnZpY2UuZ2V0TWFuYWdlZExheWVycygpO1xuICB9XG5cbiAgZ2V0TGF5ZXJSdW50aW1lU3RhdGVzKCk6IEdlb01hcExheWVyUnVudGltZVN0YXRlW10ge1xuICAgIHJldHVybiB0aGlzLmxheWVyU2VydmljZS5nZXRBbGxSdW50aW1lU3RhdGVzKCk7XG4gIH1cbn1cbiJdfQ==
|