@opengis/gis 0.2.91 → 0.2.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.css +1 -1
- package/module/test/cls/doc_status.json +31 -31
- package/module/test/select/core.user_uid.sql +1 -1
- package/package.json +2 -2
- package/server/migrations/metadata.sql +416 -0
- package/server/routes/gis/checkXML.js +118 -0
- package/server/routes/gis/index.mjs +14 -0
- package/server/routes/gis/metadata/editMetadata.js +34 -0
- package/server/routes/map/controllers/mapFormat.js +6 -3
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
th[data-v-93fedaf0]{position:sticky;top:0;background:#fff}.mapLayer-filter[data-v-cc1f0579]{display:inline-flex;position:relative}.mapLayer-filter__trigger[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer;border-radius:50%;transition:background .2s ease}.mapLayer-filter__trigger[data-v-cc1f0579]:hover:not(.mapLayer-filter__trigger--disabled){background:#d4dae033}.mapLayer-filter__trigger:hover:not(.mapLayer-filter__trigger--disabled) .mapLayer-filter__icon[data-v-cc1f0579]{color:#1d4ed8}.mapLayer-filter__trigger--disabled[data-v-cc1f0579]{cursor:not-allowed;opacity:.5;pointer-events:auto}.mapLayer-filter__icon[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;color:#475569;transition:color .2s ease}.mapLayer-filter__trigger--disabled .mapLayer-filter__icon[data-v-cc1f0579]{color:inherit}.mapLayer-filter__popover[data-v-cc1f0579]{position:absolute;max-width:min-content}.mapLayer-filter__popover--static[data-v-cc1f0579]{position:static;top:auto;left:auto;transform:none!important}.map-filter[data-v-cc1f0579]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px}.map-filter__header[data-v-cc1f0579]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.map-filter__title[data-v-cc1f0579]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-cc1f0579]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1}.map-filter__close[data-v-cc1f0579]:hover{background:#3b82f633;color:#2563eb}.filter-badge__hint[data-v-cc1f0579]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.map-filter[data-v-98772410]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:240px}.map-filter__header[data-v-98772410]{display:flex;align-items:center;justify-content:space-between}.map-filter__title[data-v-98772410]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-98772410]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer}.map-filter__close[data-v-98772410]:hover{background:#3b82f633;color:#2563eb}.card[data-v-4607baf8]{font-family:inherit}.fade-enter-active[data-v-4607baf8],.fade-leave-active[data-v-4607baf8]{transition:opacity .2s ease}.fade-enter-from[data-v-4607baf8],.fade-leave-to[data-v-4607baf8]{opacity:0}.map-center-control[data-v-03fa94f6]{display:flex;gap:.5rem}.map-widget__filter-host[data-v-245ea378]{position:absolute;left:10px;top:100px;align-self:stretch;pointer-events:auto;z-index:21}.mapLayer-info[data-v-cc1cc7bf]{display:inline-flex;position:relative}.mapLayer-info__trigger[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer}.mapLayer-info__icon[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transition:color .2s ease}.mapLayer-info__icon[data-v-cc1cc7bf]:hover{color:#1d4ed8}.mapLayer-info__popover[data-v-cc1cc7bf]{position:absolute;min-width:200px}.mapLayer-info__inner[data-v-cc1cc7bf]{display:flex;flex-direction:column;gap:0}.mapLayer-info__item[data-v-cc1cc7bf]{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:flex-start;padding:6px 0;border-bottom:1px solid #e2e8f0}.mapLayer-info__item[data-v-cc1cc7bf]:last-child{border-bottom:none}.mapLayer-info__item-label[data-v-cc1cc7bf]{font-size:12px;color:#475569;font-weight:600}.mapLayer-info__item-value[data-v-cc1cc7bf]{font-size:13px;color:#1f2937}.mapLayer-info__item-value--break-all[data-v-cc1cc7bf]{word-break:break-all}.map-info[data-v-813e24fb]{width:100%}.map-info__header[data-v-813e24fb]{display:flex;justify-content:space-between;align-items:flex-start;gap:30px;padding:20px 20px 12px}.map-info__actions[data-v-813e24fb]{display:flex;align-items:center;gap:8px}.map-info__title[data-v-813e24fb]{margin:0;font-size:18px;line-height:1.3;font-weight:600;color:#1f2937}.map-info__menu[data-v-813e24fb]{position:relative}.map-info__menu-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__menu-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__popover[data-v-813e24fb]{position:absolute;background:#fff;box-shadow:0 10px 40px 10px #00000014;border-radius:12px;padding:8px 12px;min-width:160px;z-index:50}.map-info__popover-link[data-v-813e24fb]{display:block;padding:6px 0;font-size:13px;color:#1f2937;text-decoration:none}.map-info__popover-link[data-v-813e24fb]:hover{color:#1d4ed8}.map-info__content[data-v-813e24fb]{padding:0 20px 20px;font-size:14px;color:#34495e;transition:max-height .3s ease,opacity .3s ease,padding .3s ease;overflow:hidden;max-height:1000px;opacity:1}.map-info__content--collapsed[data-v-813e24fb]{max-height:0;opacity:0;padding:0 20px 5px}.map-info__content[data-v-813e24fb] p{margin:0 0 12px}.map-info__toggle-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__toggle-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__toggle-icon--rotated[data-v-813e24fb]{transform:rotate(180deg)}.opacity-btn[data-v-b278347a]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.opacity-btn[data-v-b278347a]:hover{background:#94a3b829;color:#1f2937}.opacity-popover[data-v-b278347a]{position:fixed;z-index:102;padding:12px;width:260px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.opacity-popover__content[data-v-b278347a]{display:flex;align-items:center;gap:8px}.opacity-popover__label[data-v-b278347a]{font-size:12px;color:#6b7280}.opacity-popover__range[data-v-b278347a]{flex:1 1 auto;accent-color:#2563eb}.opacity-popover__value[data-v-b278347a]{font-size:12px;color:#475569}.layers-panel[data-v-9b1b17e7]{display:flex;flex-direction:column;background:#fff;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:220px}.layers-panel__header[data-v-9b1b17e7]{display:flex;justify-content:space-between;align-items:center;gap:16px}.layers-panel__header-actions[data-v-9b1b17e7]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.layers-panel__heading-title[data-v-9b1b17e7]{display:flex;align-items:baseline;gap:8px}.layers-panel__count[data-v-9b1b17e7]{font-size:12px;text-transform:none;color:#475569}.layers-panel__bulk-actions[data-v-9b1b17e7]{display:flex;align-items:center;gap:6px}.layers-panel__header-link[data-v-9b1b17e7]{border:none;background:transparent;padding:0;font-size:12px;font-weight:500;color:#2563eb;cursor:pointer;transition:color .2s ease}.layers-panel__header-link[data-v-9b1b17e7]:hover{color:#1d4ed8}.layers-panel__header-controls[data-v-9b1b17e7]{display:flex;align-items:center;gap:6px}.layers-panel__heading[data-v-9b1b17e7]{display:flex;flex-direction:column;gap:6px}.layers-panel__title[data-v-9b1b17e7]{font-size:18px;font-weight:600;color:#1f2937}.layers-panel__description[data-v-9b1b17e7]{margin:0;font-size:14px;color:#34495e}.layers-panel__clear[data-v-9b1b17e7]{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:10px;border:1px solid rgba(59,130,246,.6);background-color:#3b82f614;color:#1d4ed8;font-size:12px;font-weight:500;line-height:1;transition:background-color .15s ease,color .15s ease}.layers-panel__clear[data-v-9b1b17e7]:hover{background-color:#2563eb26;color:#1e40af}.layers-panel__item[data-v-9b1b17e7]{display:flex;align-items:center;justify-content:space-between;gap:12px}.layers-panel__label[data-v-9b1b17e7]{display:flex;flex-direction:column;gap:4px;color:#334155;width:100%}.layers-panel__label-row[data-v-9b1b17e7]{display:flex;align-items:center;gap:12px}.layers-panel__title-block[data-v-9b1b17e7]{display:inline-flex;align-items:center;gap:8px;flex:1;min-width:0}.layers-panel__checkbox[data-v-9b1b17e7]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border:2px solid var(--layers-panel-checkbox-color, #94a3b8);border-radius:4px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:#fff;transition:all .15s ease}.layers-panel__checkbox[data-v-9b1b17e7]:checked{background:var(--layers-panel-checkbox-color, #94a3b8);border-color:var(--layers-panel-checkbox-color, #94a3b8)}.layers-panel__checkbox[data-v-9b1b17e7]:checked:after{content:"";width:9px;height:9px;display:block;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='9' viewBox='0 0 12 9' fill='none'%3E%3Cpath d='M10.3332 1.5L4.49984 7.33333L1.6665 4.5' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat}.layers-panel__checkbox[data-v-9b1b17e7]:hover{border-color:var(--layers-panel-checkbox-color, #94a3b8);box-shadow:none}.layers-panel__name[data-v-9b1b17e7]{font-size:14px;font-weight:400;color:#1f2937;min-width:0}.layers-panel__meta[data-v-9b1b17e7]{display:flex;align-items:center;gap:4px;margin-left:auto}.layers-panel__actions[data-v-9b1b17e7]{display:flex;align-items:center;gap:4px}.layers-panel__action[data-v-9b1b17e7]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;cursor:pointer;padding:0;color:#475569}.layers-panel__action[data-v-9b1b17e7]:hover{color:#1d4ed8}.layers-panel__content[data-v-9b1b17e7]{display:flex;flex-direction:column;gap:10px;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1;margin-top:15px}.layers-panel__content--collapsed[data-v-9b1b17e7]{margin-top:-5px;max-height:0;opacity:0;gap:0}.layers-panel__toggle-button[data-v-9b1b17e7]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.layers-panel__toggle-button[data-v-9b1b17e7]:hover{background:#94a3b833}.layers-panel__toggle-icon--rotated[data-v-9b1b17e7]{transform:rotate(180deg);transition:transform .3s ease}.catalog-tab[data-v-f68d8bda]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.catalog-tab__search[data-v-f68d8bda]{position:sticky;top:0;background:inherit;z-index:1;padding-bottom:8px}.catalog-tab__list[data-v-f68d8bda]{flex:1 1 auto;display:flex;flex-direction:column;overflow-y:auto;min-height:0;padding-bottom:8px}.fade-enter-active[data-v-f68d8bda],.fade-leave-active[data-v-f68d8bda]{transition:all .2s ease}.fade-enter-from[data-v-f68d8bda],.fade-leave-to[data-v-f68d8bda]{opacity:0;max-height:0}.filter-badge[data-v-f68d8bda]{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:9999px;background:#94a3b826;color:#475569;font-size:11px;font-weight:600;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.filter-badge[data-v-f68d8bda]:hover{background:#94a3b840;color:#1f2937}.filter-badge--disabled[data-v-f68d8bda]{cursor:not-allowed;background:#94a3b814;color:#475569b3}.filter-badge__icon[data-v-f68d8bda]{width:14px;height:14px}.filter-badge__hint[data-v-f68d8bda]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.selected-tab[data-v-39b6f281]{display:flex;flex-direction:column;gap:12px;height:100%;min-height:0}.selected-tab__actions[data-v-39b6f281]{flex:0 0 auto}.selected-tab__add[data-v-39b6f281]{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:8px 12px;border-radius:10px;background:#3b82f614;color:#2563eb;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__add[data-v-39b6f281]:hover{background:#3b82f629;color:#1d4ed8}.selected-tab__empty[data-v-39b6f281]{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px dashed rgba(148,163,184,.6);border-radius:16px;padding:24px;background:#f8fafce6;text-align:center;color:#6b7280}.selected-tab__empty-title[data-v-39b6f281]{margin:0;font-weight:600;color:#1f2937}.selected-tab__empty-text[data-v-39b6f281]{margin:0;font-size:13px}.selected-tab__scroll[data-v-39b6f281]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px;display:flex;flex-direction:column}.selected-tab__scroll>div[data-v-39b6f281]{display:flex;flex-direction:column;gap:8px}.selected-tab__item[data-v-39b6f281]{border:1px solid #e5e7eb;border-radius:10px;padding:12px;background:#fff;color:#4b5563;font-size:13px;transition:background .2s ease,border-color .2s ease}.selected-tab__item[data-v-39b6f281]:hover{background:#f8fafccc}.selected-tab__item--dragging[data-v-39b6f281]{opacity:.5}.selected-tab__item--over[data-v-39b6f281]{border-color:#2563eb;background:#3b82f61f}.selected-tab__item-header[data-v-39b6f281]{display:flex;align-items:center;justify-content:space-between;gap:12px}.selected-tab__item-info[data-v-39b6f281]{display:flex;align-items:center;gap:8px;cursor:move;color:#1f2937}.selected-tab__item-handle[data-v-39b6f281]{color:#64748bcc;font-size:16px}.selected-tab__item-checkbox[data-v-39b6f281]{width:16px;height:16px;accent-color:#2563eb}.selected-tab__item-controls[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__item-opacity[data-v-39b6f281],.selected-tab__item-menu[data-v-39b6f281]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__item-opacity[data-v-39b6f281]:hover,.selected-tab__item-menu[data-v-39b6f281]:hover{background:#94a3b829;color:#1f2937}.selected-tab__popover[data-v-39b6f281]{position:fixed;z-index:102;padding:12px;width:240px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.selected-tab__popover-content[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__popover-label[data-v-39b6f281]{font-size:12px;color:#6b7280}.selected-tab__popover-range[data-v-39b6f281]{flex:1 1 auto;accent-color:#2563eb}.selected-tab__popover-value[data-v-39b6f281]{font-size:12px;color:#475569}.selected-tab__menu[data-v-39b6f281]{position:fixed;z-index:102;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26;padding:12px}.selected-tab__menu-inner[data-v-39b6f281]{display:flex;flex-direction:column;gap:4px;width:190px}.selected-tab__menu-item[data-v-39b6f281]{display:flex;align-items:center;gap:8px;padding:6px 8px;border:none;background:transparent;color:#1f2937;font-size:13px;text-align:left;cursor:pointer;transition:background .2s ease}.selected-tab__menu-item[data-v-39b6f281]:hover{background:#94a3b829}.selected-tab__menu-item--disabled[data-v-39b6f281]{color:#63666a99;cursor:not-allowed}.selected-tab__menu-item--danger[data-v-39b6f281]{color:#dc2626}.selected-tab__menu-item--danger[data-v-39b6f281]:hover{background:#dc26261f}.filter-tab[data-v-c6632fbd]{display:flex;flex-direction:column;gap:16px;height:100%;min-height:0}.filter-tab__header[data-v-c6632fbd]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.filter-tab__subtitle[data-v-c6632fbd]{margin:0 0 4px;font-size:12px;font-weight:500;color:#6b7280}.filter-tab__title[data-v-c6632fbd]{margin:0;font-size:16px;font-weight:600;color:#1f2937}.filter-tab__content[data-v-c6632fbd]{flex:1 1 auto;min-height:0;background:#fffffff0;border:1px solid rgba(148,163,184,.35);box-shadow:0 16px 32px #0f172a1a}.filter-tab__scroll[data-v-c6632fbd]{max-height:100%;overflow-y:auto;padding:0}.filter-tab__empty[data-v-c6632fbd]{padding:24px;text-align:center;background:#f8fafce6;border:1px dashed rgba(148,163,184,.6);border-radius:16px}.filter-tab__empty-title[data-v-c6632fbd]{margin:0 0 8px;font-size:15px;font-weight:600;color:#1f2937}.filter-tab__empty-text[data-v-c6632fbd]{margin:0;font-size:13px;color:#6b7280}.map-catalog-widget[data-v-0023ade8]{display:flex;flex-direction:column;max-height:100%;overflow:hidden}.map-catalog-widget__body[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.map-catalog-widget__scroll[data-v-0023ade8]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px}.map-catalog-widget__content[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1}.map-catalog-widget__content--collapsed[data-v-0023ade8]{max-height:0;opacity:0;padding:0}.map-catalog-widget__toggle-button[data-v-0023ade8]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-catalog-widget__toggle-button[data-v-0023ade8]:hover{background:#94a3b833}.map-catalog-widget__toggle-icon--rotated[data-v-0023ade8]{transform:rotate(180deg);transition:transform .3s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:9999px;background:#94a3b82e;color:#475569;border:none;padding:0;transition:background-color .15s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge:hover,.map-attribute__filter[data-v-9686ce7b] .filter-badge.filter-badge--active{background:#2563eb2e;color:#1d4ed8}.map-attribute__filter[data-v-9686ce7b] .filter-badge__icon{width:16px;height:16px}.map-attribute__filter[data-v-9686ce7b] .filter-badge__panel{border-radius:16px;box-shadow:0 16px 32px #0f172a14}.map-search-widget[data-v-d773179e]{width:100%}.map-print-control[data-v-4fae7635]{z-index:35;display:flex;flex-direction:column;align-items:flex-end;gap:12px}[data-v-4fae7635] .mapboxgl-export-list{display:none;min-width:280px;padding:20px 16px 16px;border-radius:16px;background:#fffffffa;box-shadow:0 18px 40px #0f172a40;color:#0f172a;font-size:14px;line-height:1.4;margin-right:40px}[data-v-4fae7635] .mapboxgl-export-list table{width:100%;border-collapse:separate;border-spacing:0 12px}[data-v-4fae7635] .mapboxgl-export-list td:first-child{width:35%;font-weight:500;color:#334155;padding-right:12px}[data-v-4fae7635] .mapboxgl-export-list label{display:inline-flex;align-items:center}[data-v-4fae7635] .mapboxgl-export-list select{width:100%;height:36px;border-radius:10px;border:1px solid rgba(15,23,42,.1);padding:0 12px;font-size:14px;color:#0f172a;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-v-4fae7635] .mapboxgl-export-list select:focus{outline:none;border-color:#0f172a40;box-shadow:0 0 0 2px #3b82f633}[data-v-4fae7635] .mapboxgl-export-list .generate-button{margin-top:12px;width:100%;height:40px;border-radius:12px;border:none;background:linear-gradient(134deg,#2563eb,#1d4ed8);color:#fff;font-weight:600;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}[data-v-4fae7635] .mapboxgl-export-list .generate-button:hover{transform:translateY(-1px);box-shadow:0 14px 28px #2563eb59}[data-v-4fae7635] .mapboxgl-export-list .generate-button:active{transform:translateY(0);box-shadow:0 10px 20px #2563eb4d}.cursor-coordinates[data-v-334315d9]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:12px;background:#ffffffeb;color:#1f2937;box-shadow:0 10px 22px #0f172a29;font-size:12px;max-width:240px}.cursor-coordinates__icon[data-v-334315d9]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:#2563eb}.cursor-coordinates__icon svg[data-v-334315d9]{width:100%;height:100%}.cursor-coordinates__text[data-v-334315d9]{white-space:nowrap;font-family:ui-monospace,SFMono-Regular,SFMono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.minimap[data-v-bc754c89]{position:relative}.minimap__button[data-v-bc754c89]{width:32px;height:32px;border-radius:50%;border:1px solid rgba(148,163,184,.35);background:#ffffffeb;color:#334155;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 6px 16px #0f172a1f;transition:all .2s ease}.minimap__button[data-v-bc754c89]:hover{border-color:#3b82f680;color:#1d4ed8}.minimap__button-icon[data-v-bc754c89]{transition:transform .2s ease}.minimap__wrapper[data-v-bc754c89]{position:absolute;bottom:2.5rem;right:2rem;border-radius:10px;overflow:hidden;border:1px solid rgba(148,163,184,.4);box-shadow:0 10px 22px #0f172a1f;background:#fff}.minimap-slide-enter-active[data-v-bc754c89],.minimap-slide-leave-active[data-v-bc754c89]{transition:opacity .2s ease,transform .2s ease}.minimap-slide-enter-from[data-v-bc754c89],.minimap-slide-leave-to[data-v-bc754c89]{opacity:0;transform:translate(12px)}.map-widget[data-v-362a1a19]{position:relative;width:100%;background:#f1f5f9;overflow:hidden}.map-widget__view[data-v-362a1a19]{font-family:inherit;width:100%;height:100%}.map-widget__state[data-v-362a1a19]{position:absolute;top:16px;left:50%;transform:translate(-50%);background:#fffffff2;border:1px solid rgba(148,163,184,.4);border-radius:12px;padding:10px 18px;font-size:14px;color:#1f2937;z-index:30;box-shadow:0 12px 24px #0f172a1f}.map-widget__state--error[data-v-362a1a19]{color:#b91c1c;border-color:#dc262659}.map-widget__filter-host[data-v-362a1a19]{position:absolute;left:430px;flex:0 0 auto;width:0;align-self:stretch;pointer-events:auto;z-index:21}.map-widget__overlay-grid[data-v-362a1a19]{position:absolute;top:0;right:0;bottom:0;left:0;font-family:inherit;z-index:20;pointer-events:none;display:flex;justify-content:space-between;padding:16px 16px 36px}.map-widget__side[data-v-362a1a19]{flex:0 0 auto;display:flex;flex-direction:column;justify-content:flex-start;height:100%;width:min(100%,400px);pointer-events:none}.map-widget__side--right[data-v-362a1a19]{align-items:flex-end}.map-widget__stack-wrapper[data-v-362a1a19]{display:flex;flex-direction:column;min-height:0;pointer-events:none;max-height:100%;max-width:calc(100% - 29px)}.map-widget__stack-wrapper--top[data-v-362a1a19]{flex:1 1 auto}.map-widget__stack-wrapper--bottom[data-v-362a1a19]{flex:0 0 auto;margin-top:auto;padding-top:16px}.map-widget__stack[data-v-362a1a19]{display:flex;flex-direction:column;gap:12px;max-height:100%;min-height:0;width:min(100%,400px);pointer-events:auto;overflow-y:auto;padding-right:4px}.map-overlay__item[data-v-362a1a19]{display:contents;flex-direction:column;flex:0 1 auto;max-width:100%;max-height:100%;min-height:0;width:100%;overflow:hidden}.map-widget__filter-host[data-v-362a1a19]{left:16px;top:16px;z-index:82}@media(min-width:768px){.map-widget__filter-host[data-v-362a1a19]{left:397px}}[data-v-84ec8129] .hide-add-btn button.rounded-full{display:none!important}.custom-pagination[data-v-e728e68b] .items-center{display:block}.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact.maplibregl-compact{display:none}.maplibre-demo-map-container{height:100%;width:100%;position:relative}#maplibre-demo-map{height:100%;width:100%;position:absolute}.map-widgets-flex{width:100%;height:100%;display:flex;justify-content:space-between;padding:20px;box-sizing:border-box}.widgets-left,.widgets-right{display:flex;flex-direction:column;gap:10px;height:100%;width:400px;pointer-events:none}.widgets-right .widget-column{align-items:flex-end}.widgets-left{align-items:flex-start}.widget-column{display:flex;flex-direction:column;gap:10px;z-index:10;height:100%}.widgets-top{overflow-y:auto}.widgets-bottom{flex-shrink:0}.widgets-top,.widgets-bottom{display:flex;flex-direction:column;gap:8px;pointer-events:auto;overflow-y:auto}.widgets-top{align-items:flex-start}.widgets-bottom{align-items:flex-end;margin-top:auto}.widgets-left{justify-content:flex-start}
|
|
1
|
+
th[data-v-93fedaf0]{position:sticky;top:0;background:#fff}.mapLayer-filter[data-v-cc1f0579]{display:inline-flex;position:relative}.mapLayer-filter__trigger[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer;border-radius:50%;transition:background .2s ease}.mapLayer-filter__trigger[data-v-cc1f0579]:hover:not(.mapLayer-filter__trigger--disabled){background:#d4dae033}.mapLayer-filter__trigger:hover:not(.mapLayer-filter__trigger--disabled) .mapLayer-filter__icon[data-v-cc1f0579]{color:#1d4ed8}.mapLayer-filter__trigger--disabled[data-v-cc1f0579]{cursor:not-allowed;opacity:.5;pointer-events:auto}.mapLayer-filter__icon[data-v-cc1f0579]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;color:#475569;transition:color .2s ease}.mapLayer-filter__trigger--disabled .mapLayer-filter__icon[data-v-cc1f0579]{color:inherit}.mapLayer-filter__popover[data-v-cc1f0579]{position:absolute;max-width:min-content}.mapLayer-filter__popover--static[data-v-cc1f0579]{position:static;top:auto;left:auto;transform:none!important}.map-filter[data-v-cc1f0579]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px}.map-filter__header[data-v-cc1f0579]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.map-filter__title[data-v-cc1f0579]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-cc1f0579]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:18px;line-height:1}.map-filter__close[data-v-cc1f0579]:hover{background:#3b82f633;color:#2563eb}.filter-badge__hint[data-v-cc1f0579]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.map-filter[data-v-98772410]{background:#fffffff0;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:240px}.map-filter__header[data-v-98772410]{display:flex;align-items:center;justify-content:space-between}.map-filter__title[data-v-98772410]{margin:0;font-size:15px;font-weight:600;color:#1f2937}.map-filter__close[data-v-98772410]{width:24px;height:24px;border:none;border-radius:50%;background:#94a3b833;color:#475569;cursor:pointer}.map-filter__close[data-v-98772410]:hover{background:#3b82f633;color:#2563eb}.card[data-v-4607baf8]{font-family:inherit}.fade-enter-active[data-v-4607baf8],.fade-leave-active[data-v-4607baf8]{transition:opacity .2s ease}.fade-enter-from[data-v-4607baf8],.fade-leave-to[data-v-4607baf8]{opacity:0}.map-center-control[data-v-03fa94f6]{display:flex;gap:.5rem}.map-widget__filter-host[data-v-245ea378]{position:absolute;left:10px;top:100px;align-self:stretch;pointer-events:auto;z-index:21}.mapLayer-info[data-v-cc1cc7bf]{display:inline-flex;position:relative}.mapLayer-info__trigger[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;padding:0;color:inherit;text-decoration:none;cursor:pointer}.mapLayer-info__icon[data-v-cc1cc7bf]{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;transition:color .2s ease}.mapLayer-info__icon[data-v-cc1cc7bf]:hover{color:#1d4ed8}.mapLayer-info__popover[data-v-cc1cc7bf]{position:absolute;min-width:200px}.mapLayer-info__inner[data-v-cc1cc7bf]{display:flex;flex-direction:column;gap:0}.mapLayer-info__item[data-v-cc1cc7bf]{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:flex-start;padding:6px 0;border-bottom:1px solid #e2e8f0}.mapLayer-info__item[data-v-cc1cc7bf]:last-child{border-bottom:none}.mapLayer-info__item-label[data-v-cc1cc7bf]{font-size:12px;color:#475569;font-weight:600}.mapLayer-info__item-value[data-v-cc1cc7bf]{font-size:13px;color:#1f2937}.mapLayer-info__item-value--break-all[data-v-cc1cc7bf]{word-break:break-all}.map-info[data-v-813e24fb]{width:100%}.map-info__header[data-v-813e24fb]{display:flex;justify-content:space-between;align-items:flex-start;gap:30px;padding:20px 20px 12px}.map-info__actions[data-v-813e24fb]{display:flex;align-items:center;gap:8px}.map-info__title[data-v-813e24fb]{margin:0;font-size:18px;line-height:1.3;font-weight:600;color:#1f2937}.map-info__menu[data-v-813e24fb]{position:relative}.map-info__menu-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__menu-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__popover[data-v-813e24fb]{position:absolute;background:#fff;box-shadow:0 10px 40px 10px #00000014;border-radius:12px;padding:8px 12px;min-width:160px;z-index:50}.map-info__popover-link[data-v-813e24fb]{display:block;padding:6px 0;font-size:13px;color:#1f2937;text-decoration:none}.map-info__popover-link[data-v-813e24fb]:hover{color:#1d4ed8}.map-info__content[data-v-813e24fb]{padding:0 20px 20px;font-size:14px;color:#34495e;transition:max-height .3s ease,opacity .3s ease,padding .3s ease;overflow:hidden;max-height:1000px;opacity:1}.map-info__content--collapsed[data-v-813e24fb]{max-height:0;opacity:0;padding:0 20px 5px}.map-info__content[data-v-813e24fb] p{margin:0 0 12px}.map-info__toggle-button[data-v-813e24fb]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-info__toggle-button[data-v-813e24fb]:hover{background:#94a3b833}.map-info__toggle-icon--rotated[data-v-813e24fb]{transform:rotate(180deg)}.opacity-btn[data-v-b278347a]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.opacity-btn[data-v-b278347a]:hover{background:#94a3b829;color:#1f2937}.opacity-popover[data-v-b278347a]{position:fixed;z-index:102;padding:12px;width:260px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.opacity-popover__content[data-v-b278347a]{display:flex;align-items:center;gap:8px}.opacity-popover__label[data-v-b278347a]{font-size:12px;color:#6b7280}.opacity-popover__range[data-v-b278347a]{flex:1 1 auto;accent-color:#2563eb}.opacity-popover__value[data-v-b278347a]{font-size:12px;color:#475569}.layers-panel[data-v-9b1b17e7]{display:flex;flex-direction:column;background:#fff;border:1px solid rgba(148,163,184,.35);border-radius:16px;padding:16px;box-shadow:0 16px 32px #0f172a1a;min-width:220px}.layers-panel__header[data-v-9b1b17e7]{display:flex;justify-content:space-between;align-items:center;gap:16px}.layers-panel__header-actions[data-v-9b1b17e7]{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.layers-panel__heading-title[data-v-9b1b17e7]{display:flex;align-items:baseline;gap:8px}.layers-panel__count[data-v-9b1b17e7]{font-size:12px;text-transform:none;color:#475569}.layers-panel__bulk-actions[data-v-9b1b17e7]{display:flex;align-items:center;gap:6px}.layers-panel__header-link[data-v-9b1b17e7]{border:none;background:transparent;padding:0;font-size:12px;font-weight:500;color:#2563eb;cursor:pointer;transition:color .2s ease}.layers-panel__header-link[data-v-9b1b17e7]:hover{color:#1d4ed8}.layers-panel__header-controls[data-v-9b1b17e7]{display:flex;align-items:center;gap:6px}.layers-panel__heading[data-v-9b1b17e7]{display:flex;flex-direction:column;gap:6px}.layers-panel__title[data-v-9b1b17e7]{font-size:18px;font-weight:600;color:#1f2937}.layers-panel__description[data-v-9b1b17e7]{margin:0;font-size:14px;color:#34495e}.layers-panel__clear[data-v-9b1b17e7]{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:10px;border:1px solid rgba(59,130,246,.6);background-color:#3b82f614;color:#1d4ed8;font-size:12px;font-weight:500;line-height:1;transition:background-color .15s ease,color .15s ease}.layers-panel__clear[data-v-9b1b17e7]:hover{background-color:#2563eb26;color:#1e40af}.layers-panel__item[data-v-9b1b17e7]{display:flex;align-items:center;justify-content:space-between;gap:12px}.layers-panel__label[data-v-9b1b17e7]{display:flex;flex-direction:column;gap:4px;color:#334155;width:100%}.layers-panel__label-row[data-v-9b1b17e7]{display:flex;align-items:center;gap:12px}.layers-panel__title-block[data-v-9b1b17e7]{display:inline-flex;align-items:center;gap:8px;flex:1;min-width:0}.layers-panel__checkbox[data-v-9b1b17e7]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border:2px solid var(--layers-panel-checkbox-color, #94a3b8);border-radius:4px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;background:#fff;transition:all .15s ease}.layers-panel__checkbox[data-v-9b1b17e7]:checked{background:var(--layers-panel-checkbox-color, #94a3b8);border-color:var(--layers-panel-checkbox-color, #94a3b8)}.layers-panel__checkbox[data-v-9b1b17e7]:checked:after{content:"";width:9px;height:9px;display:block;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='9' viewBox='0 0 12 9' fill='none'%3E%3Cpath d='M10.3332 1.5L4.49984 7.33333L1.6665 4.5' stroke='%23fff' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat}.layers-panel__checkbox[data-v-9b1b17e7]:hover{border-color:var(--layers-panel-checkbox-color, #94a3b8);box-shadow:none}.layers-panel__name[data-v-9b1b17e7]{font-size:14px;font-weight:400;color:#1f2937;min-width:0}.layers-panel__meta[data-v-9b1b17e7]{display:flex;align-items:center;gap:4px;margin-left:auto}.layers-panel__actions[data-v-9b1b17e7]{display:flex;align-items:center;gap:4px}.layers-panel__action[data-v-9b1b17e7]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border:none;background:transparent;cursor:pointer;padding:0;color:#475569}.layers-panel__action[data-v-9b1b17e7]:hover{color:#1d4ed8}.layers-panel__content[data-v-9b1b17e7]{display:flex;flex-direction:column;gap:10px;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1;margin-top:15px}.layers-panel__content--collapsed[data-v-9b1b17e7]{margin-top:-5px;max-height:0;opacity:0;gap:0}.layers-panel__toggle-button[data-v-9b1b17e7]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.layers-panel__toggle-button[data-v-9b1b17e7]:hover{background:#94a3b833}.layers-panel__toggle-icon--rotated[data-v-9b1b17e7]{transform:rotate(180deg);transition:transform .3s ease}.catalog-tab[data-v-f68d8bda]{display:flex;flex-direction:column;flex:1 1 auto;min-height:0}.catalog-tab__search[data-v-f68d8bda]{position:sticky;top:0;background:inherit;z-index:1;padding-bottom:8px}.catalog-tab__list[data-v-f68d8bda]{flex:1 1 auto;display:flex;flex-direction:column;overflow-y:auto;min-height:0;padding-bottom:8px}.fade-enter-active[data-v-f68d8bda],.fade-leave-active[data-v-f68d8bda]{transition:all .2s ease}.fade-enter-from[data-v-f68d8bda],.fade-leave-to[data-v-f68d8bda]{opacity:0;max-height:0}.filter-badge[data-v-f68d8bda]{display:inline-flex;align-items:center;gap:4px;padding:4px;border-radius:9999px;background:#94a3b826;color:#475569;font-size:11px;font-weight:600;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.filter-badge[data-v-f68d8bda]:hover{background:#94a3b840;color:#1f2937}.filter-badge--disabled[data-v-f68d8bda]{cursor:not-allowed;background:#94a3b814;color:#475569b3}.filter-badge__icon[data-v-f68d8bda]{width:14px;height:14px}.filter-badge__hint[data-v-f68d8bda]{position:fixed;transform:translate(-50%);max-width:220px;font-size:11px;line-height:1.3;color:#1f2937;background:#fffffff2;border:1px solid rgba(148,163,184,.35);border-radius:6px;padding:6px 8px;box-shadow:0 8px 16px #0f172a1f;pointer-events:none;white-space:normal;z-index:1000}.selected-tab[data-v-39b6f281]{display:flex;flex-direction:column;gap:12px;height:100%;min-height:0}.selected-tab__actions[data-v-39b6f281]{flex:0 0 auto}.selected-tab__add[data-v-39b6f281]{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:8px 12px;border-radius:10px;background:#3b82f614;color:#2563eb;border:none;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__add[data-v-39b6f281]:hover{background:#3b82f629;color:#1d4ed8}.selected-tab__empty[data-v-39b6f281]{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;border:1px dashed rgba(148,163,184,.6);border-radius:16px;padding:24px;background:#f8fafce6;text-align:center;color:#6b7280}.selected-tab__empty-title[data-v-39b6f281]{margin:0;font-weight:600;color:#1f2937}.selected-tab__empty-text[data-v-39b6f281]{margin:0;font-size:13px}.selected-tab__scroll[data-v-39b6f281]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px;display:flex;flex-direction:column}.selected-tab__scroll>div[data-v-39b6f281]{display:flex;flex-direction:column;gap:8px}.selected-tab__item[data-v-39b6f281]{border:1px solid #e5e7eb;border-radius:10px;padding:12px;background:#fff;color:#4b5563;font-size:13px;transition:background .2s ease,border-color .2s ease}.selected-tab__item[data-v-39b6f281]:hover{background:#f8fafccc}.selected-tab__item--dragging[data-v-39b6f281]{opacity:.5}.selected-tab__item--over[data-v-39b6f281]{border-color:#2563eb;background:#3b82f61f}.selected-tab__item-header[data-v-39b6f281]{display:flex;align-items:center;justify-content:space-between;gap:12px}.selected-tab__item-info[data-v-39b6f281]{display:flex;align-items:center;gap:8px;cursor:move;color:#1f2937}.selected-tab__item-handle[data-v-39b6f281]{color:#64748bcc;font-size:16px}.selected-tab__item-checkbox[data-v-39b6f281]{width:16px;height:16px;accent-color:#2563eb}.selected-tab__item-controls[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__item-opacity[data-v-39b6f281],.selected-tab__item-menu[data-v-39b6f281]{display:inline-flex;align-items:center;justify-content:center;padding:4px 8px;border-radius:8px;border:none;background:transparent;color:#475569;cursor:pointer;transition:background .2s ease,color .2s ease}.selected-tab__item-opacity[data-v-39b6f281]:hover,.selected-tab__item-menu[data-v-39b6f281]:hover{background:#94a3b829;color:#1f2937}.selected-tab__popover[data-v-39b6f281]{position:fixed;z-index:102;padding:12px;width:240px;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26}.selected-tab__popover-content[data-v-39b6f281]{display:flex;align-items:center;gap:8px}.selected-tab__popover-label[data-v-39b6f281]{font-size:12px;color:#6b7280}.selected-tab__popover-range[data-v-39b6f281]{flex:1 1 auto;accent-color:#2563eb}.selected-tab__popover-value[data-v-39b6f281]{font-size:12px;color:#475569}.selected-tab__menu[data-v-39b6f281]{position:fixed;z-index:102;background:#fff;border-radius:12px;box-shadow:0 16px 32px #0f172a26;padding:12px}.selected-tab__menu-inner[data-v-39b6f281]{display:flex;flex-direction:column;gap:4px;width:190px}.selected-tab__menu-item[data-v-39b6f281]{display:flex;align-items:center;gap:8px;padding:6px 8px;border:none;background:transparent;color:#1f2937;font-size:13px;text-align:left;cursor:pointer;transition:background .2s ease}.selected-tab__menu-item[data-v-39b6f281]:hover{background:#94a3b829}.selected-tab__menu-item--disabled[data-v-39b6f281]{color:#63666a99;cursor:not-allowed}.selected-tab__menu-item--danger[data-v-39b6f281]{color:#dc2626}.selected-tab__menu-item--danger[data-v-39b6f281]:hover{background:#dc26261f}.filter-tab[data-v-c6632fbd]{display:flex;flex-direction:column;gap:16px;height:100%;min-height:0}.filter-tab__header[data-v-c6632fbd]{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.filter-tab__subtitle[data-v-c6632fbd]{margin:0 0 4px;font-size:12px;font-weight:500;color:#6b7280}.filter-tab__title[data-v-c6632fbd]{margin:0;font-size:16px;font-weight:600;color:#1f2937}.filter-tab__content[data-v-c6632fbd]{flex:1 1 auto;min-height:0;background:#fffffff0;border:1px solid rgba(148,163,184,.35);box-shadow:0 16px 32px #0f172a1a}.filter-tab__scroll[data-v-c6632fbd]{max-height:100%;overflow-y:auto;padding:0}.filter-tab__empty[data-v-c6632fbd]{padding:24px;text-align:center;background:#f8fafce6;border:1px dashed rgba(148,163,184,.6);border-radius:16px}.filter-tab__empty-title[data-v-c6632fbd]{margin:0 0 8px;font-size:15px;font-weight:600;color:#1f2937}.filter-tab__empty-text[data-v-c6632fbd]{margin:0;font-size:13px;color:#6b7280}.map-catalog-widget[data-v-0023ade8]{display:flex;flex-direction:column;max-height:100%;overflow:hidden}.map-catalog-widget__body[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.map-catalog-widget__scroll[data-v-0023ade8]{flex:1 1 auto;min-height:0;overflow-y:auto;padding-right:4px}.map-catalog-widget__content[data-v-0023ade8]{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;transition:max-height .3s ease,opacity .3s ease;overflow:hidden;max-height:10000px;opacity:1}.map-catalog-widget__content--collapsed[data-v-0023ade8]{max-height:0;opacity:0;padding:0}.map-catalog-widget__toggle-button[data-v-0023ade8]{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;border-radius:50%;background:transparent;cursor:pointer;transition:background .2s ease}.map-catalog-widget__toggle-button[data-v-0023ade8]:hover{background:#94a3b833}.map-catalog-widget__toggle-icon--rotated[data-v-0023ade8]{transform:rotate(180deg);transition:transform .3s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:9999px;background:#94a3b82e;color:#475569;border:none;padding:0;transition:background-color .15s ease}.map-attribute__filter[data-v-9686ce7b] .filter-badge:hover,.map-attribute__filter[data-v-9686ce7b] .filter-badge.filter-badge--active{background:#2563eb2e;color:#1d4ed8}.map-attribute__filter[data-v-9686ce7b] .filter-badge__icon{width:16px;height:16px}.map-attribute__filter[data-v-9686ce7b] .filter-badge__panel{border-radius:16px;box-shadow:0 16px 32px #0f172a14}.map-search-widget[data-v-d773179e]{width:100%}.map-print-control[data-v-4fae7635]{z-index:35;display:flex;flex-direction:column;align-items:flex-end;gap:12px}[data-v-4fae7635] .mapboxgl-export-list{display:none;min-width:280px;padding:20px 16px 16px;border-radius:16px;background:#fffffffa;box-shadow:0 18px 40px #0f172a40;color:#0f172a;font-size:14px;line-height:1.4;margin-right:40px}[data-v-4fae7635] .mapboxgl-export-list table{width:100%;border-collapse:separate;border-spacing:0 12px}[data-v-4fae7635] .mapboxgl-export-list td:first-child{width:35%;font-weight:500;color:#334155;padding-right:12px}[data-v-4fae7635] .mapboxgl-export-list label{display:inline-flex;align-items:center}[data-v-4fae7635] .mapboxgl-export-list select{width:100%;height:36px;border-radius:10px;border:1px solid rgba(15,23,42,.1);padding:0 12px;font-size:14px;color:#0f172a;background:#fff;-webkit-appearance:none;-moz-appearance:none;appearance:none}[data-v-4fae7635] .mapboxgl-export-list select:focus{outline:none;border-color:#0f172a40;box-shadow:0 0 0 2px #3b82f633}[data-v-4fae7635] .mapboxgl-export-list .generate-button{margin-top:12px;width:100%;height:40px;border-radius:12px;border:none;background:linear-gradient(134deg,#2563eb,#1d4ed8);color:#fff;font-weight:600;cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}[data-v-4fae7635] .mapboxgl-export-list .generate-button:hover{transform:translateY(-1px);box-shadow:0 14px 28px #2563eb59}[data-v-4fae7635] .mapboxgl-export-list .generate-button:active{transform:translateY(0);box-shadow:0 10px 20px #2563eb4d}.cursor-coordinates[data-v-334315d9]{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:12px;background:#ffffffeb;color:#1f2937;box-shadow:0 10px 22px #0f172a29;font-size:12px;max-width:240px}.cursor-coordinates__icon[data-v-334315d9]{display:flex;align-items:center;justify-content:center;width:24px;height:24px;color:#2563eb}.cursor-coordinates__icon svg[data-v-334315d9]{width:100%;height:100%}.cursor-coordinates__text[data-v-334315d9]{white-space:nowrap;font-family:ui-monospace,SFMono-Regular,SFMono,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.minimap[data-v-bc754c89]{position:relative}.minimap__button[data-v-bc754c89]{width:32px;height:32px;border-radius:50%;border:1px solid rgba(148,163,184,.35);background:#ffffffeb;color:#334155;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 6px 16px #0f172a1f;transition:all .2s ease}.minimap__button[data-v-bc754c89]:hover{border-color:#3b82f680;color:#1d4ed8}.minimap__button-icon[data-v-bc754c89]{transition:transform .2s ease}.minimap__wrapper[data-v-bc754c89]{position:absolute;bottom:2.5rem;right:2rem;border-radius:10px;overflow:hidden;border:1px solid rgba(148,163,184,.4);box-shadow:0 10px 22px #0f172a1f;background:#fff}.minimap-slide-enter-active[data-v-bc754c89],.minimap-slide-leave-active[data-v-bc754c89]{transition:opacity .2s ease,transform .2s ease}.minimap-slide-enter-from[data-v-bc754c89],.minimap-slide-leave-to[data-v-bc754c89]{opacity:0;transform:translate(12px)}.map-widget[data-v-362a1a19]{position:relative;width:100%;background:#f1f5f9;overflow:hidden}.map-widget__view[data-v-362a1a19]{font-family:inherit;width:100%;height:100%}.map-widget__state[data-v-362a1a19]{position:absolute;top:16px;left:50%;transform:translate(-50%);background:#fffffff2;border:1px solid rgba(148,163,184,.4);border-radius:12px;padding:10px 18px;font-size:14px;color:#1f2937;z-index:30;box-shadow:0 12px 24px #0f172a1f}.map-widget__state--error[data-v-362a1a19]{color:#b91c1c;border-color:#dc262659}.map-widget__filter-host[data-v-362a1a19]{position:absolute;left:430px;flex:0 0 auto;width:0;align-self:stretch;pointer-events:auto;z-index:21}.map-widget__overlay-grid[data-v-362a1a19]{position:absolute;top:0;right:0;bottom:0;left:0;font-family:inherit;z-index:20;pointer-events:none;display:flex;justify-content:space-between;padding:16px 16px 36px}.map-widget__side[data-v-362a1a19]{flex:0 0 auto;display:flex;flex-direction:column;justify-content:flex-start;height:100%;width:min(100%,400px);pointer-events:none}.map-widget__side--right[data-v-362a1a19]{align-items:flex-end}.map-widget__stack-wrapper[data-v-362a1a19]{display:flex;flex-direction:column;min-height:0;pointer-events:none;max-height:100%;max-width:calc(100% - 29px)}.map-widget__stack-wrapper--top[data-v-362a1a19]{flex:1 1 auto}.map-widget__stack-wrapper--bottom[data-v-362a1a19]{flex:0 0 auto;margin-top:auto;padding-top:16px}.map-widget__stack[data-v-362a1a19]{display:flex;flex-direction:column;gap:12px;max-height:100%;min-height:0;width:min(100%,400px);pointer-events:auto;overflow-y:auto;padding-right:4px}.map-overlay__item[data-v-362a1a19]{display:contents;flex-direction:column;flex:0 1 auto;max-width:100%;max-height:100%;min-height:0;width:100%;overflow:hidden}.map-widget__filter-host[data-v-362a1a19]{left:16px;top:16px;z-index:82}@media (min-width: 768px){.map-widget__filter-host[data-v-362a1a19]{left:397px}}[data-v-84ec8129] .hide-add-btn button.rounded-full{display:none!important}.custom-pagination[data-v-e728e68b] .items-center{display:block}.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-compact.maplibregl-compact{display:none}.maplibre-demo-map-container{height:100%;width:100%;position:relative}#maplibre-demo-map{height:100%;width:100%;position:absolute}.map-widgets-flex{width:100%;height:100%;display:flex;justify-content:space-between;padding:20px;box-sizing:border-box}.widgets-left,.widgets-right{display:flex;flex-direction:column;gap:10px;height:100%;width:400px;pointer-events:none}.widgets-right .widget-column{align-items:flex-end}.widgets-left{align-items:flex-start}.widget-column{display:flex;flex-direction:column;gap:10px;z-index:10;height:100%}.widgets-top{overflow-y:auto}.widgets-bottom{flex-shrink:0}.widgets-top,.widgets-bottom{display:flex;flex-direction:column;gap:8px;pointer-events:auto;overflow-y:auto}.widgets-top{align-items:flex-start}.widgets-bottom{align-items:flex-end;margin-top:auto}.widgets-left{justify-content:flex-start}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"id": "1",
|
|
4
|
-
"text": "Діючий",
|
|
5
|
-
"color": "#1ab394"
|
|
6
|
-
},
|
|
7
|
-
{
|
|
8
|
-
"id": "2",
|
|
9
|
-
"text": "Зупинений",
|
|
10
|
-
"color": "#ed82c8"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"id": "3",
|
|
14
|
-
"text": "Скасований",
|
|
15
|
-
"color": "#4a4a4a"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"id": "5",
|
|
19
|
-
"text": "Проектний",
|
|
20
|
-
"color": "#6495ed"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"id": "7",
|
|
24
|
-
"text": "Очікує розгляду",
|
|
25
|
-
"color": "#92b8ef"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"id": "10",
|
|
29
|
-
"text": "Архівний",
|
|
30
|
-
"color": "#d48428"
|
|
31
|
-
}
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "1",
|
|
4
|
+
"text": "Діючий",
|
|
5
|
+
"color": "#1ab394"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"id": "2",
|
|
9
|
+
"text": "Зупинений",
|
|
10
|
+
"color": "#ed82c8"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "3",
|
|
14
|
+
"text": "Скасований",
|
|
15
|
+
"color": "#4a4a4a"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "5",
|
|
19
|
+
"text": "Проектний",
|
|
20
|
+
"color": "#6495ed"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": "7",
|
|
24
|
+
"text": "Очікує розгляду",
|
|
25
|
+
"color": "#92b8ef"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "10",
|
|
29
|
+
"text": "Архівний",
|
|
30
|
+
"color": "#d48428"
|
|
31
|
+
}
|
|
32
32
|
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
select uid, coalesce(coalesce(sur_name,'')||coalesce(' '||user_name,'') ||coalesce(' '||father_name,''),login) as text from admin.users
|
|
1
|
+
select uid, coalesce(coalesce(sur_name,'')||coalesce(' '||user_name,'') ||coalesce(' '||father_name,''),login) as text from admin.users
|
package/package.json
CHANGED
|
@@ -0,0 +1,416 @@
|
|
|
1
|
+
create table if not exists gis.metadata
|
|
2
|
+
(
|
|
3
|
+
metadata_id text default next_id() not null primary key,
|
|
4
|
+
layer_id text not null,
|
|
5
|
+
name text,
|
|
6
|
+
metadata_key text unique,
|
|
7
|
+
abstract text,
|
|
8
|
+
purpose text,
|
|
9
|
+
source text,
|
|
10
|
+
access_constraints text,
|
|
11
|
+
use_constraints text,
|
|
12
|
+
license text,
|
|
13
|
+
topic_category text,
|
|
14
|
+
keywords text[],
|
|
15
|
+
accuracy_statement text,
|
|
16
|
+
update_frequency text,
|
|
17
|
+
scale text,
|
|
18
|
+
encoding text default 'UTF-8'::text not null,
|
|
19
|
+
language text default 'ua'::text not null,
|
|
20
|
+
katottg text,
|
|
21
|
+
region text,
|
|
22
|
+
size numeric,
|
|
23
|
+
standards text default '4'::text not null,
|
|
24
|
+
service_type text default 'web_service'::text not null,
|
|
25
|
+
geom geometry,
|
|
26
|
+
date_created date,
|
|
27
|
+
date_updated date,
|
|
28
|
+
year integer,
|
|
29
|
+
data_owner_code text not null,
|
|
30
|
+
data_producer_code text,
|
|
31
|
+
created_at timestamp default now(),
|
|
32
|
+
created_by text,
|
|
33
|
+
updated_by text,
|
|
34
|
+
updated_at timestamp,
|
|
35
|
+
contact_id text,
|
|
36
|
+
srid text default 4326,
|
|
37
|
+
description text,
|
|
38
|
+
resource_level text,
|
|
39
|
+
atu_id text,
|
|
40
|
+
metadata_owner_id text,
|
|
41
|
+
metadata_producer_id text,
|
|
42
|
+
frequency_update text,
|
|
43
|
+
limit_access json,
|
|
44
|
+
resource_locator json,
|
|
45
|
+
history json,
|
|
46
|
+
z_max integer,
|
|
47
|
+
z_min integer,
|
|
48
|
+
high_scale text,
|
|
49
|
+
low_scale text,
|
|
50
|
+
spatial_resolution text,
|
|
51
|
+
coord_ref_system text,
|
|
52
|
+
cdate timestamp default now(),
|
|
53
|
+
uid text,
|
|
54
|
+
editor_id text,
|
|
55
|
+
editor_date timestamp,
|
|
56
|
+
files json,
|
|
57
|
+
character_encoding text,
|
|
58
|
+
conditions_access text,
|
|
59
|
+
processing_environment text,
|
|
60
|
+
dataresource_source json,
|
|
61
|
+
type_localization integer[],
|
|
62
|
+
way_create_obj text,
|
|
63
|
+
eval_method_scope text,
|
|
64
|
+
type_of_financing text,
|
|
65
|
+
conformity text,
|
|
66
|
+
links json,
|
|
67
|
+
tender_id text,
|
|
68
|
+
rights json,
|
|
69
|
+
limitations json,
|
|
70
|
+
enabled boolean default true,
|
|
71
|
+
product_cost numeric,
|
|
72
|
+
attribution_text text,
|
|
73
|
+
is_verify boolean default false,
|
|
74
|
+
image text,
|
|
75
|
+
object_id text,
|
|
76
|
+
type text default 'service'::text not null
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
comment on table gis.metadata is 'Каталог метаданих';
|
|
80
|
+
|
|
81
|
+
comment on column gis.metadata.metadata_id is 'Id метаданих';
|
|
82
|
+
|
|
83
|
+
comment on column gis.metadata.layer_id is 'Ідентифікатор ресурсу';
|
|
84
|
+
|
|
85
|
+
comment on column gis.metadata.name is 'Назва метаданих';
|
|
86
|
+
|
|
87
|
+
comment on column gis.metadata.metadata_key is 'Унікальний ключ';
|
|
88
|
+
|
|
89
|
+
comment on column gis.metadata.abstract is 'Опис набору даних або шару';
|
|
90
|
+
|
|
91
|
+
comment on column gis.metadata.purpose is 'Мета метаданих';
|
|
92
|
+
|
|
93
|
+
comment on column gis.metadata.source is 'Джерело даних';
|
|
94
|
+
|
|
95
|
+
comment on column gis.metadata.access_constraints is 'Обмеження доступу';
|
|
96
|
+
|
|
97
|
+
comment on column gis.metadata.use_constraints is 'Обмеження використання';
|
|
98
|
+
|
|
99
|
+
comment on column gis.metadata.license is 'Ліцензія';
|
|
100
|
+
|
|
101
|
+
comment on column gis.metadata.topic_category is 'Тематична категорія ресурсу';
|
|
102
|
+
|
|
103
|
+
comment on column gis.metadata.keywords is 'Ключові слова';
|
|
104
|
+
|
|
105
|
+
comment on column gis.metadata.accuracy_statement is 'Точність метаданих';
|
|
106
|
+
|
|
107
|
+
comment on column gis.metadata.update_frequency is 'Частота оновлення';
|
|
108
|
+
|
|
109
|
+
comment on column gis.metadata.scale is 'Масштаб';
|
|
110
|
+
|
|
111
|
+
comment on column gis.metadata.encoding is 'Код набору символів';
|
|
112
|
+
|
|
113
|
+
comment on column gis.metadata.language is 'Мова метаданих';
|
|
114
|
+
|
|
115
|
+
comment on column gis.metadata.katottg is 'Код КАТОТТГ';
|
|
116
|
+
|
|
117
|
+
comment on column gis.metadata.region is 'Територіального охоплення';
|
|
118
|
+
|
|
119
|
+
comment on column gis.metadata.size is 'Розмір';
|
|
120
|
+
|
|
121
|
+
comment on column gis.metadata.standards is 'Інформація про відповідність метаданих стандартам';
|
|
122
|
+
|
|
123
|
+
comment on column gis.metadata.service_type is 'Тип сервісу';
|
|
124
|
+
|
|
125
|
+
comment on column gis.metadata.geom is 'Охоплення (екстент)';
|
|
126
|
+
|
|
127
|
+
comment on column gis.metadata.date_created is 'Дата створення мемаданих';
|
|
128
|
+
|
|
129
|
+
comment on column gis.metadata.date_updated is 'Дата оновлення мемаданих';
|
|
130
|
+
|
|
131
|
+
comment on column gis.metadata.year is 'Рік актуальності метаданих';
|
|
132
|
+
|
|
133
|
+
comment on column gis.metadata.data_owner_code is 'Код суб''єкта, що є власником ресурсу';
|
|
134
|
+
|
|
135
|
+
comment on column gis.metadata.data_producer_code is 'Код виробника даних';
|
|
136
|
+
|
|
137
|
+
comment on column gis.metadata.contact_id is 'Суб''єкт, що є власником ресурсу';
|
|
138
|
+
|
|
139
|
+
comment on column gis.metadata.srid is 'Просторова система координат';
|
|
140
|
+
|
|
141
|
+
comment on column gis.metadata.description is 'Опис метаданих';
|
|
142
|
+
|
|
143
|
+
comment on column gis.metadata.resource_level is 'Рівень (міжнар, нац., місц.)';
|
|
144
|
+
|
|
145
|
+
comment on column gis.metadata.atu_id is 'Територіальне охоплення';
|
|
146
|
+
|
|
147
|
+
comment on column gis.metadata.metadata_owner_id is 'Власник даних';
|
|
148
|
+
|
|
149
|
+
comment on column gis.metadata.metadata_producer_id is 'Виробники даних';
|
|
150
|
+
|
|
151
|
+
comment on column gis.metadata.frequency_update is 'Частота оновлення';
|
|
152
|
+
|
|
153
|
+
comment on column gis.metadata.limit_access is 'Права та ліцензія';
|
|
154
|
+
|
|
155
|
+
comment on column gis.metadata.resource_locator is 'Посиланння';
|
|
156
|
+
|
|
157
|
+
comment on column gis.metadata.history is 'історія';
|
|
158
|
+
|
|
159
|
+
comment on column gis.metadata.z_max is 'Максимальний зум';
|
|
160
|
+
|
|
161
|
+
comment on column gis.metadata.z_min is 'Мінімальний зум';
|
|
162
|
+
|
|
163
|
+
comment on column gis.metadata.high_scale is 'Максимальний масштаб подання даних';
|
|
164
|
+
|
|
165
|
+
comment on column gis.metadata.low_scale is 'Мінімальний масштаб подання даних';
|
|
166
|
+
|
|
167
|
+
comment on column gis.metadata.spatial_resolution is 'Роздільна здатність в масштабі';
|
|
168
|
+
|
|
169
|
+
comment on column gis.metadata.coord_ref_system is 'Система координат';
|
|
170
|
+
|
|
171
|
+
comment on column gis.metadata.editor_id is 'Ідентифікатор редактора';
|
|
172
|
+
|
|
173
|
+
comment on column gis.metadata.files is 'Файли';
|
|
174
|
+
|
|
175
|
+
comment on column gis.metadata.character_encoding is 'Система кодування';
|
|
176
|
+
|
|
177
|
+
comment on column gis.metadata.conditions_access is 'Умови до даних';
|
|
178
|
+
|
|
179
|
+
comment on column gis.metadata.processing_environment is 'Середовище обробки (ПЗ)';
|
|
180
|
+
|
|
181
|
+
comment on column gis.metadata.dataresource_source is 'Опис джерела даних';
|
|
182
|
+
|
|
183
|
+
comment on column gis.metadata.type_localization is 'Спосіб просторового подання об’єкта місцевості';
|
|
184
|
+
|
|
185
|
+
comment on column gis.metadata.way_create_obj is 'Спосіб створення об’єкта місцевості';
|
|
186
|
+
|
|
187
|
+
comment on column gis.metadata.eval_method_scope is 'Правила цифрового опису';
|
|
188
|
+
|
|
189
|
+
comment on column gis.metadata.type_of_financing is 'Джерело фінансування';
|
|
190
|
+
|
|
191
|
+
comment on column gis.metadata.conformity is 'Відповідність стандартам, специфікаціям для інетроперабельності';
|
|
192
|
+
|
|
193
|
+
comment on column gis.metadata.links is 'Розповсюдження даних';
|
|
194
|
+
|
|
195
|
+
comment on column gis.metadata.tender_id is 'Посилання на тендер';
|
|
196
|
+
|
|
197
|
+
comment on column gis.metadata.rights is 'Права';
|
|
198
|
+
|
|
199
|
+
comment on column gis.metadata.limitations is 'Обмеження у використанні';
|
|
200
|
+
|
|
201
|
+
comment on column gis.metadata.product_cost is 'Вартість продукції';
|
|
202
|
+
|
|
203
|
+
comment on column gis.metadata.attribution_text is 'Атрибуція текстова';
|
|
204
|
+
|
|
205
|
+
comment on column gis.metadata.is_verify is 'Ознака чи верифіковано метадані';
|
|
206
|
+
|
|
207
|
+
comment on column gis.metadata.image is 'Прев''ю метаданих';
|
|
208
|
+
|
|
209
|
+
comment on column gis.metadata.object_id is 'ID Об''єкта';
|
|
210
|
+
|
|
211
|
+
create unique index if not exists layer_id_unique
|
|
212
|
+
on gis.metadata (metadata_id, layer_id);
|
|
213
|
+
|
|
214
|
+
create index if not exists gis_metadata_metadata_id_gin_idx
|
|
215
|
+
on gis.metadata using gin (metadata_id public.gin_trgm_ops);
|
|
216
|
+
|
|
217
|
+
create index if not exists gis_metadata_metadata_key_gin_idx_lower
|
|
218
|
+
on gis.metadata using gin (lower(metadata_key) public.gin_trgm_ops);
|
|
219
|
+
|
|
220
|
+
create index if not exists gis_metadata_abstract_gin_idx
|
|
221
|
+
on gis.metadata using gin (abstract public.gin_trgm_ops);
|
|
222
|
+
|
|
223
|
+
create index if not exists gis_metadata_abstract_gin_idx_lower
|
|
224
|
+
on gis.metadata using gin (lower(abstract) public.gin_trgm_ops);
|
|
225
|
+
|
|
226
|
+
create index if not exists gis_metadata_metadata_id_gin_idx_lower
|
|
227
|
+
on gis.metadata using gin (lower(metadata_id) public.gin_trgm_ops);
|
|
228
|
+
|
|
229
|
+
create index if not exists gis_metadata_name_gin_idx_lower
|
|
230
|
+
on gis.metadata using gin (lower(name) public.gin_trgm_ops);
|
|
231
|
+
|
|
232
|
+
create index if not exists gis_metadata_metadata_key_gin_idx
|
|
233
|
+
on gis.metadata using gin (metadata_key public.gin_trgm_ops);
|
|
234
|
+
|
|
235
|
+
create index if not exists gis_metadata_layer_id_gin_idx
|
|
236
|
+
on gis.metadata using gin (layer_id public.gin_trgm_ops);
|
|
237
|
+
|
|
238
|
+
create index if not exists gis_metadata_layer_id_gin_idx_lower
|
|
239
|
+
on gis.metadata using gin (lower(layer_id) public.gin_trgm_ops);
|
|
240
|
+
|
|
241
|
+
create index if not exists gis_metadata_name_gin_idx
|
|
242
|
+
on gis.metadata using gin (name public.gin_trgm_ops);
|
|
243
|
+
|
|
244
|
+
create index if not exists gis_metadata_purpose_gin_idx
|
|
245
|
+
on gis.metadata using gin (purpose public.gin_trgm_ops);
|
|
246
|
+
|
|
247
|
+
create index if not exists gis_metadata_source_gin_idx_lower
|
|
248
|
+
on gis.metadata using gin (lower(source) public.gin_trgm_ops);
|
|
249
|
+
|
|
250
|
+
create index if not exists gis_metadata_purpose_gin_idx_lower
|
|
251
|
+
on gis.metadata using gin (lower(purpose) public.gin_trgm_ops);
|
|
252
|
+
|
|
253
|
+
create index if not exists gis_metadata_use_constraints_gin_idx_lower
|
|
254
|
+
on gis.metadata using gin (lower(use_constraints) public.gin_trgm_ops);
|
|
255
|
+
|
|
256
|
+
create index if not exists gis_metadata_access_constraints_gin_idx
|
|
257
|
+
on gis.metadata using gin (access_constraints public.gin_trgm_ops);
|
|
258
|
+
|
|
259
|
+
create index if not exists gis_metadata_source_gin_idx
|
|
260
|
+
on gis.metadata using gin (source public.gin_trgm_ops);
|
|
261
|
+
|
|
262
|
+
create index if not exists gis_metadata_use_constraints_gin_idx
|
|
263
|
+
on gis.metadata using gin (use_constraints public.gin_trgm_ops);
|
|
264
|
+
|
|
265
|
+
create index if not exists gis_metadata_topic_category_gin_idx
|
|
266
|
+
on gis.metadata using gin (topic_category public.gin_trgm_ops);
|
|
267
|
+
|
|
268
|
+
create index if not exists gis_metadata_license_gin_idx
|
|
269
|
+
on gis.metadata using gin (license public.gin_trgm_ops);
|
|
270
|
+
|
|
271
|
+
create index if not exists gis_metadata_access_constraints_gin_idx_lower
|
|
272
|
+
on gis.metadata using gin (lower(access_constraints) public.gin_trgm_ops);
|
|
273
|
+
|
|
274
|
+
create index if not exists gis_metadata_license_gin_idx_lower
|
|
275
|
+
on gis.metadata using gin (lower(license) public.gin_trgm_ops);
|
|
276
|
+
|
|
277
|
+
create index if not exists gis_metadata_topic_category_gin_idx_lower
|
|
278
|
+
on gis.metadata using gin (lower(topic_category) public.gin_trgm_ops);
|
|
279
|
+
|
|
280
|
+
create index if not exists gis_metadata_accuracy_statement_gin_idx
|
|
281
|
+
on gis.metadata using gin (accuracy_statement public.gin_trgm_ops);
|
|
282
|
+
|
|
283
|
+
create index if not exists gis_metadata_accuracy_statement_gin_idx_lower
|
|
284
|
+
on gis.metadata using gin (lower(accuracy_statement) public.gin_trgm_ops);
|
|
285
|
+
|
|
286
|
+
create index if not exists gis_metadata_update_frequency_gin_idx
|
|
287
|
+
on gis.metadata using gin (update_frequency public.gin_trgm_ops);
|
|
288
|
+
|
|
289
|
+
create index if not exists gis_metadata_update_frequency_gin_idx_lower
|
|
290
|
+
on gis.metadata using gin (lower(update_frequency) public.gin_trgm_ops);
|
|
291
|
+
|
|
292
|
+
create index if not exists gis_metadata_scale_gin_idx_lower
|
|
293
|
+
on gis.metadata using gin (lower(scale) public.gin_trgm_ops);
|
|
294
|
+
|
|
295
|
+
create index if not exists gis_metadata_encoding_gin_idx_lower
|
|
296
|
+
on gis.metadata using gin (lower(encoding) public.gin_trgm_ops);
|
|
297
|
+
|
|
298
|
+
create index if not exists gis_metadata_language_gin_idx
|
|
299
|
+
on gis.metadata using gin (language public.gin_trgm_ops);
|
|
300
|
+
|
|
301
|
+
create index if not exists gis_metadata_katottg_gin_idx
|
|
302
|
+
on gis.metadata using gin (katottg public.gin_trgm_ops);
|
|
303
|
+
|
|
304
|
+
create index if not exists gis_metadata_language_gin_idx_lower
|
|
305
|
+
on gis.metadata using gin (lower(language) public.gin_trgm_ops);
|
|
306
|
+
|
|
307
|
+
create index if not exists gis_metadata_region_gin_idx_lower
|
|
308
|
+
on gis.metadata using gin (lower(region) public.gin_trgm_ops);
|
|
309
|
+
|
|
310
|
+
create index if not exists gis_metadata_region_gin_idx
|
|
311
|
+
on gis.metadata using gin (region public.gin_trgm_ops);
|
|
312
|
+
|
|
313
|
+
create index if not exists gis_metadata_katottg_gin_idx_lower
|
|
314
|
+
on gis.metadata using gin (lower(katottg) public.gin_trgm_ops);
|
|
315
|
+
|
|
316
|
+
create index if not exists gis_metadata_size_btree_idx
|
|
317
|
+
on gis.metadata (size);
|
|
318
|
+
|
|
319
|
+
create index if not exists gis_metadata_standards_gin_idx
|
|
320
|
+
on gis.metadata using gin (standards public.gin_trgm_ops);
|
|
321
|
+
|
|
322
|
+
create index if not exists gis_metadata_standards_gin_idx_lower
|
|
323
|
+
on gis.metadata using gin (lower(standards) public.gin_trgm_ops);
|
|
324
|
+
|
|
325
|
+
create index if not exists gis_metadata_service_type_gin_idx
|
|
326
|
+
on gis.metadata using gin (service_type public.gin_trgm_ops);
|
|
327
|
+
|
|
328
|
+
create index if not exists gis_metadata_service_type_gin_idx_lower
|
|
329
|
+
on gis.metadata using gin (lower(service_type) public.gin_trgm_ops);
|
|
330
|
+
|
|
331
|
+
create index if not exists gis_metadata_scale_gin_idx
|
|
332
|
+
on gis.metadata using gin (scale public.gin_trgm_ops);
|
|
333
|
+
|
|
334
|
+
create index if not exists gis_metadata_geom_4326_idx
|
|
335
|
+
on gis.metadata using gist (st_transform(geom, 4326));
|
|
336
|
+
|
|
337
|
+
create index if not exists gis_metadata_geom_area_true_idx
|
|
338
|
+
on gis.metadata (st_area(geom::geography, true));
|
|
339
|
+
|
|
340
|
+
create index if not exists gis_metadata_encoding_gin_idx
|
|
341
|
+
on gis.metadata using gin (encoding public.gin_trgm_ops);
|
|
342
|
+
|
|
343
|
+
create index if not exists gis_metadata_geom_gist1_idx
|
|
344
|
+
on gis.metadata using gist (geom);
|
|
345
|
+
|
|
346
|
+
create index if not exists gis_metadata_geom_area_idx
|
|
347
|
+
on gis.metadata (st_area(st_transform(geom, 3857)));
|
|
348
|
+
|
|
349
|
+
create index if not exists gis_metadata_date_updated_btree_idx
|
|
350
|
+
on gis.metadata (date_updated);
|
|
351
|
+
|
|
352
|
+
create index if not exists gis_metadata_year_btree_idx
|
|
353
|
+
on gis.metadata (year);
|
|
354
|
+
|
|
355
|
+
create index if not exists gis_metadata_date_created_btree_idx
|
|
356
|
+
on gis.metadata (date_created);
|
|
357
|
+
|
|
358
|
+
create index if not exists gis_metadata_data_owner_code_gin_idx
|
|
359
|
+
on gis.metadata using gin (data_owner_code public.gin_trgm_ops);
|
|
360
|
+
|
|
361
|
+
create index if not exists gis_metadata_data_owner_code_gin_idx_lower
|
|
362
|
+
on gis.metadata using gin (lower(data_owner_code) public.gin_trgm_ops);
|
|
363
|
+
|
|
364
|
+
create index if not exists gis_metadata_data_producer_code_gin_idx
|
|
365
|
+
on gis.metadata using gin (data_producer_code public.gin_trgm_ops);
|
|
366
|
+
|
|
367
|
+
create index if not exists gis_metadata_data_producer_code_gin_idx_lower
|
|
368
|
+
on gis.metadata using gin (lower(data_producer_code) public.gin_trgm_ops);
|
|
369
|
+
|
|
370
|
+
create index if not exists gis_metadata_updated_by_gin_idx_lower
|
|
371
|
+
on gis.metadata using gin (lower(updated_by) public.gin_trgm_ops);
|
|
372
|
+
|
|
373
|
+
create index if not exists gis_metadata_updated_by_gin_idx
|
|
374
|
+
on gis.metadata using gin (updated_by public.gin_trgm_ops);
|
|
375
|
+
|
|
376
|
+
create index if not exists gis_metadata_created_by_gin_idx
|
|
377
|
+
on gis.metadata using gin (created_by public.gin_trgm_ops);
|
|
378
|
+
|
|
379
|
+
create index if not exists gis_metadata_updated_at_btree_idx
|
|
380
|
+
on gis.metadata (updated_at);
|
|
381
|
+
|
|
382
|
+
create index if not exists gis_metadata_created_by_gin_idx_lower
|
|
383
|
+
on gis.metadata using gin (lower(created_by) public.gin_trgm_ops);
|
|
384
|
+
|
|
385
|
+
create index if not exists gis_metadata_created_at_btree_idx
|
|
386
|
+
on gis.metadata (created_at);
|
|
387
|
+
|
|
388
|
+
create index if not exists gis_metadata_contact_id_btree_idx
|
|
389
|
+
on gis.metadata (contact_id);
|
|
390
|
+
|
|
391
|
+
create index if not exists gis_metadata_layer_id_btree_idx
|
|
392
|
+
on gis.metadata (layer_id);
|
|
393
|
+
|
|
394
|
+
create index if not exists gis_metadata_topic_category_btree_idx
|
|
395
|
+
on gis.metadata (topic_category);
|
|
396
|
+
|
|
397
|
+
create index if not exists gis_metadata_resource_level_btree_idx
|
|
398
|
+
on gis.metadata (resource_level);
|
|
399
|
+
|
|
400
|
+
create index if not exists gis_metadata_metadata_owner_id_trgm_idx
|
|
401
|
+
on gis.metadata using gin (metadata_owner_id public.gin_trgm_ops);
|
|
402
|
+
|
|
403
|
+
create index if not exists gis_metadata_metadata_producer_id_trgm_idx
|
|
404
|
+
on gis.metadata using gin (metadata_producer_id public.gin_trgm_ops);
|
|
405
|
+
|
|
406
|
+
create index if not exists gis_metadata_frequency_update_btree_idx
|
|
407
|
+
on gis.metadata (frequency_update);
|
|
408
|
+
|
|
409
|
+
create index if not exists gis_metadata_conditions_access_btree_idx
|
|
410
|
+
on gis.metadata (conditions_access);
|
|
411
|
+
|
|
412
|
+
alter table gis.metadata add column if not exists producer text;
|
|
413
|
+
alter table gis.metadata add column if not exists group_id text;
|
|
414
|
+
alter table gis.metadata add column if not exists license text;
|
|
415
|
+
alter table gis.metadata add column if not exists type text;
|
|
416
|
+
alter table gis.metadata alter column data_owner_code drop not null;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
|
|
3
|
+
import { config, eventStream, pgClients } from "@opengis/fastify-table/utils.js";
|
|
4
|
+
|
|
5
|
+
import mapnik from "../../plugins/mapnik/funcs/mapnik.js";
|
|
6
|
+
|
|
7
|
+
const {
|
|
8
|
+
GetRasterStatus, GetRasterInfo, RenderTile,
|
|
9
|
+
} = mapnik();
|
|
10
|
+
|
|
11
|
+
export default async function checkXML(req, reply) {
|
|
12
|
+
const { pg = pgClients.client } = req;
|
|
13
|
+
const send = process.env.NODE_ENV === 'test' || process.env.VITEST
|
|
14
|
+
? console.log
|
|
15
|
+
: eventStream(reply);
|
|
16
|
+
|
|
17
|
+
const errors = { raster: 0, css: 0, service: 0 };
|
|
18
|
+
try {
|
|
19
|
+
const rasters = pg?.pk?.['gis.rasters'] ? await pg.query('select * from gis.rasters').then(el => el.rows || []) : [];
|
|
20
|
+
|
|
21
|
+
const css = pg?.pk?.['gis.cartocss'] ? await pg.query('select * from gis.cartocss').then(el => el.rows || []) : [];
|
|
22
|
+
|
|
23
|
+
const dataset = pg?.pk?.['gis.dataset'] && false ? await pg.query('select * from gis.dataset').then(el => el.rows || []) : [];
|
|
24
|
+
|
|
25
|
+
const total = rasters.length + css.length + dataset.length;
|
|
26
|
+
let successCount = 0;
|
|
27
|
+
|
|
28
|
+
send(`Всього растрів: ${rasters.length || '0'}`);
|
|
29
|
+
|
|
30
|
+
await rasters.reduce(
|
|
31
|
+
(promise, row, idx) => promise.then(async () => {
|
|
32
|
+
const uploadStatus = path.extname(row.source_path) ? await GetRasterStatus({ path: row.source_path }) : {};
|
|
33
|
+
|
|
34
|
+
if (uploadStatus.exists === false) {
|
|
35
|
+
errors.raster += 1;
|
|
36
|
+
send(`${idx}/${rasters.length} ERROR: GetRasterStatus: not uploaded (raster:${row.raster_id})`);
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (uploadStatus.finished === false) {
|
|
41
|
+
errors.raster += 1;
|
|
42
|
+
send(`${idx}/${rasters.length} ERROR: GetRasterStatus: upload not finished (raster:${row.raster_id})`);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const rasterInfo = await GetRasterInfo({
|
|
47
|
+
path: row.source_path,
|
|
48
|
+
ttl: '0',
|
|
49
|
+
}).catch(err => ({ err }));
|
|
50
|
+
|
|
51
|
+
if (rasterInfo.err) {
|
|
52
|
+
errors.raster += 1;
|
|
53
|
+
send(`${idx}/${rasters.length} ERROR: GetRasterInfo: ${rasterInfo.err} (raster:${row.raster_id})`);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const data = await RenderTile({
|
|
58
|
+
path: row.source_path,
|
|
59
|
+
width: 256,
|
|
60
|
+
bbox: [3713463.7081504324, 6088362.176970857, 3713616.5822070027, 6088515.051027427], // /:id/18/155363/91245.png
|
|
61
|
+
ttl: '0',
|
|
62
|
+
}).catch(err => ({ err: err.toString() }));
|
|
63
|
+
|
|
64
|
+
if (data.err) {
|
|
65
|
+
errors.raster += 1;
|
|
66
|
+
send(`${idx}/${rasters.length} ERROR: RenderTile: ${data.err} (raster:${row.raster_id})`);
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
send(`${idx}/${rasters.length} OK: (raster:${row.raster_id})`);
|
|
71
|
+
successCount += 1;
|
|
72
|
+
}),
|
|
73
|
+
Promise.resolve(),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
send(`Всього CSS: ${css.length || '0'}`);
|
|
77
|
+
|
|
78
|
+
await css.reduce(
|
|
79
|
+
(promise, row, idx) => promise.then(async () => {
|
|
80
|
+
const data = await RenderTile({
|
|
81
|
+
path: row.source_path,
|
|
82
|
+
name: row.source_path ? undefined : row.cartocss_id,
|
|
83
|
+
width: 256,
|
|
84
|
+
bbox: [3713463.7081504324, 6088362.176970857, 3713616.5822070027, 6088515.051027427], // /:id/18/155363/91245.png
|
|
85
|
+
ttl: '0',
|
|
86
|
+
}).catch(err => ({ err: err.toString() }));
|
|
87
|
+
|
|
88
|
+
if (data.err) {
|
|
89
|
+
errors.css += 1;
|
|
90
|
+
send(`${idx}/${css.length} ERROR: RenderTile: ${data.err} (css:${row.cartocss_id})`);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
send(`${idx}/${css.length} OK: (css:${row.cartocss_id})`);
|
|
95
|
+
successCount += 1;
|
|
96
|
+
}),
|
|
97
|
+
Promise.resolve(),
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
send(`Всього наборів: ${dataset.length || '0'}`);
|
|
101
|
+
// ? place dataset check logic here
|
|
102
|
+
|
|
103
|
+
const errorCount = Object.keys(errors).reduce((acc, curr) => acc + errors[curr], 0);
|
|
104
|
+
send(`Всього помилок: ${errorCount || '0'}`);
|
|
105
|
+
send(`Помилки растрів: ${errors.raster || '0'}`);
|
|
106
|
+
send(`Помилки CSS: ${errors.css || '0'}`);
|
|
107
|
+
send(`Помилки наборів: ${errors.dataset || '0'}`);
|
|
108
|
+
|
|
109
|
+
send(`Успіх: ${successCount || '0'}/${total || '0'}`);
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
send(config.local ? err.toString() : 'check error');
|
|
113
|
+
throw err; // allow logger to catch error automatically
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
send('finish', true);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -2,6 +2,7 @@ import insertColumns from './registers/insert.columns.js';
|
|
|
2
2
|
import insertFilters from './registers/insert.filters.js';
|
|
3
3
|
|
|
4
4
|
import metadataXML from './metadata/metadataXML.js';
|
|
5
|
+
import editMetadata from './metadata/editMetadata.js';
|
|
5
6
|
|
|
6
7
|
import getLayerGeom from './services/get.layer.geom.js';
|
|
7
8
|
import gisRegistry from './registers/gis.registry.js';
|
|
@@ -19,6 +20,7 @@ import getServicesCol from './services/get.services.col.js';
|
|
|
19
20
|
import legendAuto from './services/legend.auto.js';
|
|
20
21
|
import mapInfoPoint from './ogc/map.info.point.js';
|
|
21
22
|
import getDashboard from './dashboard.js';
|
|
23
|
+
import checkXML from './checkXML.js';
|
|
22
24
|
|
|
23
25
|
import getCartocss from './cartocss/get.cartocss.js';
|
|
24
26
|
import addCartocss from './cartocss/add.cartocss.js';
|
|
@@ -35,11 +37,22 @@ const mapInfoPointSchema = {
|
|
|
35
37
|
required: ['x', 'y', 'layers'],
|
|
36
38
|
},
|
|
37
39
|
};
|
|
40
|
+
const editMetadataSchema = {
|
|
41
|
+
params: {
|
|
42
|
+
type: 'object',
|
|
43
|
+
properties: {
|
|
44
|
+
type: { type: 'string', enum: ['raster', 'css', 'dataset'] },
|
|
45
|
+
id: { type: 'string' },
|
|
46
|
+
},
|
|
47
|
+
required: ['type', 'id'],
|
|
48
|
+
},
|
|
49
|
+
};
|
|
38
50
|
|
|
39
51
|
const params = { config: { package: 'gis' } };
|
|
40
52
|
const publicParams = { config: { policy: 'L0', package: 'gis' } };
|
|
41
53
|
|
|
42
54
|
async function route(app) {
|
|
55
|
+
app.get('/gis-check', params, checkXML);
|
|
43
56
|
app.put('/insert-columns/:token', params, insertColumns);
|
|
44
57
|
app.put('/insert-filters/:token', params, insertFilters);
|
|
45
58
|
app.get('/gis-registry/:slug', publicParams, gisRegistry);
|
|
@@ -51,6 +64,7 @@ async function route(app) {
|
|
|
51
64
|
app.get('/map-registry/:slug/:id', publicParams, mapRegistry);
|
|
52
65
|
|
|
53
66
|
app.get('/xml/:id', publicParams, metadataXML);
|
|
67
|
+
app.post('/gis-metadata/:type/:id', { ...params, schema: editMetadataSchema }, editMetadata);
|
|
54
68
|
|
|
55
69
|
app.get('/get-layer-geom/:id', publicParams, getLayerGeom);
|
|
56
70
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { pgClients, dataUpsert } from "@opengis/fastify-table/utils.js";
|
|
2
|
+
|
|
3
|
+
export default async function editMetadata(req, reply) {
|
|
4
|
+
const { pg = pgClients.client, body, params } = req;
|
|
5
|
+
const { type, id } = params || {};
|
|
6
|
+
const { uid } = req.user || {};
|
|
7
|
+
|
|
8
|
+
const q = {
|
|
9
|
+
raster: 'select 1 from gis.rasters where raster_id = $1',
|
|
10
|
+
css: 'select 1 from gis.cartocss where cartocss_id = $1',
|
|
11
|
+
dataset: 'select 1 from gis.dataset where dataset_id = $1',
|
|
12
|
+
|
|
13
|
+
}[type];
|
|
14
|
+
|
|
15
|
+
if (!q) {
|
|
16
|
+
return reply.code(400).send({ error: 'invalid params: type', code: 400 });
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const exists = await pg.query(q, [id]).then(el => el.rowCount || 0);
|
|
20
|
+
|
|
21
|
+
if (!exists) {
|
|
22
|
+
return reply.code(404).send({ error: `${type} not found: ${id}`, code: 404 });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const data = await dataUpsert({
|
|
26
|
+
pg,
|
|
27
|
+
id,
|
|
28
|
+
table: 'gis.metadata',
|
|
29
|
+
data: { ...body, type, layer_id: id },
|
|
30
|
+
uid,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
return reply.status(200).send(data);
|
|
34
|
+
}
|
|
@@ -62,13 +62,15 @@ async function getLayersData({
|
|
|
62
62
|
|
|
63
63
|
const layerData = rows[0].key ? cartocss.config?.find(el => el.key === rows[0].key) || { table: cartocss?.card_table, columns: cartocss?.card_columns } : {};
|
|
64
64
|
|
|
65
|
+
const { data } = rows[0] || {};
|
|
66
|
+
|
|
65
67
|
if (rows[0].data && layerData.columns) {
|
|
66
68
|
const columnNames = layerData.columns.split(',');
|
|
67
69
|
const rowData = Object.keys(rows[0].data).filter(key => columnNames.includes(key)).reduce((acc, key) => ({ ...acc, [key]: rows[0].data[key] }), {});
|
|
68
70
|
Object.assign(rows[0], { data: undefined, ...rowData });
|
|
69
71
|
}
|
|
70
72
|
|
|
71
|
-
const metaColumns = cartocss?.card_table
|
|
73
|
+
const metaColumns = cartocss?.card_table
|
|
72
74
|
? await getMeta({ pg, table: cartocss?.card_table }).then(el => el.columns?.map(({ name }) => ({ name, format: 'text' })) || [])
|
|
73
75
|
: [];
|
|
74
76
|
|
|
@@ -78,6 +80,7 @@ async function getLayersData({
|
|
|
78
80
|
|
|
79
81
|
return {
|
|
80
82
|
rows,
|
|
83
|
+
data,
|
|
81
84
|
columns,
|
|
82
85
|
tname: layerData.table,
|
|
83
86
|
htmlTemplate: cartocss.card_html,
|
|
@@ -164,7 +167,7 @@ export default async function mapFormat({ pg = pgClients.client, query = {}, use
|
|
|
164
167
|
}
|
|
165
168
|
|
|
166
169
|
const {
|
|
167
|
-
rows, columns, classifiers, tname, template, error, code = 500, htmlTemplate,
|
|
170
|
+
rows, data, columns, classifiers, tname, template, error, code = 500, htmlTemplate,
|
|
168
171
|
} = cartocss
|
|
169
172
|
? await getLayersData({
|
|
170
173
|
cartocss, id, lng, lat, nogeom,
|
|
@@ -200,7 +203,7 @@ export default async function mapFormat({ pg = pgClients.client, query = {}, use
|
|
|
200
203
|
</div > `);
|
|
201
204
|
}
|
|
202
205
|
|
|
203
|
-
const html1 = htmlTemplate ? await handlebars.compile(htmlTemplate)(fullRow) : null;
|
|
206
|
+
const html1 = htmlTemplate ? await handlebars.compile(htmlTemplate)(data || fullRow) : null;
|
|
204
207
|
|
|
205
208
|
const auto = service ? service?.card_mode === 'list' : cartocss?.card_auto;
|
|
206
209
|
const html = html1 || (auto ? `< dl class="divide-y divide-gray-100 py-[5px]" > ${result.join('')}</dl > ` : undefined);
|