From 84b53932faa3051d6a5ec901cfa8e65bcd43c777 Mon Sep 17 00:00:00 2001 From: Alexandre Caron Date: Wed, 5 Jul 2023 07:24:39 -0400 Subject: [PATCH 01/20] Revert "chore(cadastre): delete cadastre provider" This reverts commit cd06e104034adcd1c2b33014d117886d71eb7819. --- docs/config_json.rst | 4 ++++ docs/properties.rst | 31 ++++++++++++++++++++++++++ src/app/app.module.ts | 3 +++ src/config/config.json | 5 +++++ src/environments/environment.github.ts | 3 +++ src/environments/environment.prod.ts | 3 +++ src/environments/environment.ts | 3 +++ 7 files changed, 52 insertions(+) diff --git a/docs/config_json.rst b/docs/config_json.rst index ae41d123c..7694c1738 100644 --- a/docs/config_json.rst +++ b/docs/config_json.rst @@ -1226,6 +1226,10 @@ Exemple complet config.json }, ], "searchSources": { + "cadastre": { + "title": "Cadastre", + "enabled": true + }, "nominatim": { "enabled": false }, diff --git a/docs/properties.rst b/docs/properties.rst index 33a4ddc65..9a9a77671 100644 --- a/docs/properties.rst +++ b/docs/properties.rst @@ -1516,6 +1516,7 @@ Source (base commune) Elles seront présentées dans les sections dédiées aux sources. Les sources disponible sont: + - `Cadastre`_ - `Coordonnées`_ - `iCherche`_ (Québec) - `iCherche Reverse`_ - par coordonnées (Québec) @@ -1550,6 +1551,36 @@ Liens - `igo2-lib/packages/geo/src/lib/search/shared/sources/source.interfaces.ts `__ +Cadastre +=============== + + .. line-block:: + + Le service de recherches de lots rénovés du Québec. + Le résultat de la recherche est la géométrie du lot rénové. + ** Pour fonctionner l'application doit avoir accès au service CPTAQ (sécurité, CORS) + +Exemples + + .. code:: json + + {"cadastre": { + "searchUrl": "https://carto.cptaq.gouv.qc.ca/php/find_lot_v1.php?" + }} + +Propriétés + + Seulement les propriétés spécifiques à ce service sont présentées. + + .. tabularcolumns:: |p{1cm}|p{2cm}|p{7cm}|p{2cm}| + + .. csv-table:: + :file: _tables/fr/properties/search/cadastre.csv + :header-rows: 1 + :widths: 10 10 30 15 + + Pour les autres propriétés, référez-vous à `Source (base commune)`_ . + Coordonnées =============== diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 8fbc805ba..ec009f4e6 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -21,6 +21,7 @@ import { provideStoredQueriesSearchSource, provideOsrmDirectionsSource, provideOptionsApi, + provideCadastreSearchSource, provideStyleListOptions } from '@igo2/geo'; @@ -77,6 +78,8 @@ export const defaultTooltipOptions: MatTooltipDefaultOptions = { provideStoredQueriesSearchSource(), provideOsrmDirectionsSource(), provideOptionsApi(), + provideCadastreSearchSource(), + { provide: APP_INITIALIZER, useFactory: appInitializerFactory, diff --git a/src/config/config.json b/src/config/config.json index 7243ba217..398040ce7 100644 --- a/src/config/config.json +++ b/src/config/config.json @@ -29,6 +29,11 @@ "homeExtButtonCenter": [-71.938087, 48.446975], "homeExtButtonZoom" : 6 }, + "searchSources": { + "cadastre": { + "available": false + } + }, "title": "IGO", "welcomeWindow": { "showAgainOnNewIGOVersion": true, diff --git a/src/environments/environment.github.ts b/src/environments/environment.github.ts index 0c32167e1..6ecaadf15 100644 --- a/src/environments/environment.github.ts +++ b/src/environments/environment.github.ts @@ -106,6 +106,9 @@ export const environment: Environment = { params: { limit: '5' } + }, + cadastre: { + enabled: false } }, projections: [ diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 3674e582b..906cb4f19 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -87,6 +87,9 @@ export const environment: Environment = { params: { limit: '5' } + }, + cadastre: { + available: false } }, depot: { diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 25504467f..7579fa714 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -320,6 +320,9 @@ export const environment: Environment = { params: { limit: '5' } + }, + cadastre: { + enabled: false } }, projections: [ From a8ed9cdb51c3f4eba0705535923cce18ec35a859 Mon Sep 17 00:00:00 2001 From: Alexandre Caron Date: Wed, 5 Jul 2023 08:21:53 -0400 Subject: [PATCH 02/20] feat(app): upgrade igo2-lib --- README.md | 2 + package-lock.json | 128 +++++++++++++++++++++++----------------------- package.json | 14 ++--- 3 files changed, 73 insertions(+), 71 deletions(-) diff --git a/README.md b/README.md index 9a302e9c3..2ed060ee7 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ IGO2 is having multiple features, such as Web GIS viewer adapted to Desktop and --- ## Téléchargement +- [Version 1.15.4](https://github.com/infra-geo-ouverte/igo2/releases/download/1.15.4/igo2.zip) - [Version 1.15.3](https://github.com/infra-geo-ouverte/igo2/releases/download/1.15.3/igo2.zip) - [Version 1.15.2](https://github.com/infra-geo-ouverte/igo2/releases/download/1.15.2/igo2.zip) - [Version 1.14.2](https://github.com/infra-geo-ouverte/igo2/releases/download/1.14.2/igo2.zip) @@ -141,6 +142,7 @@ Nous sommes bien heureux que vous pensiez contribuer à IGO! Avant de le faire, --- ## Download +- [Version 1.15.4](https://github.com/infra-geo-ouverte/igo2/releases/download/1.15.4/igo2.zip) - [Version 1.15.3](https://github.com/infra-geo-ouverte/igo2/releases/download/1.15.3/igo2.zip) - [Version 1.15.2](https://github.com/infra-geo-ouverte/igo2/releases/download/1.15.2/igo2.zip) - [Version 1.14.2](https://github.com/infra-geo-ouverte/igo2/releases/download/1.14.2/igo2.zip) diff --git a/package-lock.json b/package-lock.json index b48df5bd0..b3b7588d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,13 +22,13 @@ "@angular/service-worker": "^14.3.0", "@azure/msal-angular": "^2.4.1", "@azure/msal-browser": "^2.28.1", - "@igo2/auth": "1.15.3", - "@igo2/common": "1.15.3", - "@igo2/context": "1.15.3", - "@igo2/core": "1.15.3", - "@igo2/geo": "1.15.3", - "@igo2/integration": "1.15.3", - "@igo2/utils": "1.15.3", + "@igo2/auth": "1.15.4", + "@igo2/common": "1.15.4", + "@igo2/context": "1.15.4", + "@igo2/core": "1.15.4", + "@igo2/geo": "1.15.4", + "@igo2/integration": "1.15.4", + "@igo2/utils": "1.15.4", "@mat-datetimepicker/core": "~10.0.0", "@turf/buffer": "^6.5.0", "@turf/point-on-feature": "^6.5.0", @@ -4319,9 +4319,9 @@ } }, "node_modules/@igo2/auth": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/auth/-/auth-1.15.3.tgz", - "integrity": "sha512-AF6zv4v/mZoycdpsh9QKQRFRKmAZmBQhJHCHFsDjskN4kYwYETSA3ym1lUf82tnJILHfnMJmoukDFTCWP4x1+A==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/auth/-/auth-1.15.4.tgz", + "integrity": "sha512-I2s3T2YsImKTckcwQgXtbPFamvB4wZ4ngVmOZ0hPI0qmZpNz0POqSZsC7C7WHm5dJybtFIE/HM3e0pvlSIr42g==", "dependencies": { "jwt-decode": "^2.2.0", "ts-cacheable": "^1.0.5", @@ -4340,15 +4340,15 @@ "@angular/router": "^14.3.0", "@azure/msal-angular": "^2.4.1", "@azure/msal-browser": "^2.28.1", - "@igo2/core": "^1.15.3", - "@igo2/utils": "^1.15.3", + "@igo2/core": "^1.15.4", + "@igo2/utils": "^1.15.4", "rxjs": "^7.5.6" } }, "node_modules/@igo2/common": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/common/-/common-1.15.3.tgz", - "integrity": "sha512-SQBI9mzCyAX8QLxQDF8eOimHuQryLwTCyViQ3h3O2gFwR5hcBb/MVQQCsrS3IqmEHuyF/b3hjTw61BEEsbT73A==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/common/-/common-1.15.4.tgz", + "integrity": "sha512-k01QDRTABLRSxSbvYUO1WNS8/Icj4w0900i8vPPCLsrXUi5N8CCKZmGrerhDhgDnzaRKNJtd3cQvAwmkYy4Zqw==", "dependencies": { "tslib": "^2.4.0" }, @@ -4360,16 +4360,16 @@ "@angular/core": "^14.3.0", "@angular/material": "^14.2.7", "@angular/platform-browser": "^14.3.0", - "@igo2/core": "^1.15.3", - "@igo2/utils": "^1.15.3", + "@igo2/core": "^1.15.4", + "@igo2/utils": "^1.15.4", "scroll-into-view-if-needed": "^2.2.20", "typy": "^3.3.0" } }, "node_modules/@igo2/context": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/context/-/context-1.15.3.tgz", - "integrity": "sha512-YodzvnccCjIBe3vVfpK9fURVYoDA/MFNkxbxVVJYWdnijizILHsQ8DjpQENVT9nGGFo80DOJEAjykDuJgLX6IQ==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/context/-/context-1.15.4.tgz", + "integrity": "sha512-WwNBRi6vfTjDdnRVyHnFhrlmSIQOicMKsKRyZaA5xKirmQdDMJt+iXdEZV4LcQzegP+i4uIv0YrVaz6op8sJcQ==", "dependencies": { "tslib": "^2.4.0" }, @@ -4383,19 +4383,19 @@ "@angular/forms": "^14.3.0", "@angular/material": "^14.2.7", "@angular/platform-browser": "^14.3.0", - "@igo2/auth": "^1.15.3", - "@igo2/common": "^1.15.3", - "@igo2/core": "^1.15.3", - "@igo2/geo": "^1.15.3", - "@igo2/utils": "^1.15.3", + "@igo2/auth": "^1.15.4", + "@igo2/common": "^1.15.4", + "@igo2/core": "^1.15.4", + "@igo2/geo": "^1.15.4", + "@igo2/utils": "^1.15.4", "ol": "^7.3.0", "rxjs": "^7.5.6" } }, "node_modules/@igo2/core": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/core/-/core-1.15.3.tgz", - "integrity": "sha512-Y0vJi3wKozpEg25Y820e1ysWzaXQLOMdGKvnx+f/Wo4lkUl090jPKC/7rpuQxlbzcxUNSt9B6K6FlT7ePXC43g==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/core/-/core-1.15.4.tgz", + "integrity": "sha512-0Y8S6vowBjRmr/E5l9v1/RjMNbUpE2LeBjoRKXu4kbMLmSS6hTTIL52XUI7lbgNvOteHmX4ilK3ua1f0qjWlgQ==", "dependencies": { "@ngx-translate/core": "^14.0.0", "tslib": "^2.4.0" @@ -4409,16 +4409,16 @@ "@angular/core": "^14.3.0", "@angular/platform-browser": "^14.3.0", "@angular/router": "^14.3.0", - "@igo2/utils": "^1.15.3", + "@igo2/utils": "^1.15.4", "ngx-indexed-db": "^11.0.2", "ngx-toastr": "^15.0.0", "rxjs": "^7.5.6" } }, "node_modules/@igo2/geo": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/geo/-/geo-1.15.3.tgz", - "integrity": "sha512-AD7nWIMl3r/tNG0EVmhhVdQMhG0ZnSz5JXydFAtbRTwpfkOWhx01rPcnBfJZyf+b77LLRXVM3g3gzJSTeRb1Hg==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/geo/-/geo-1.15.4.tgz", + "integrity": "sha512-ICOQY6F8EaFaaZ+ef2F+aTXJO27bUj4CeDEuG1U7n8SD3wQme5EM89ajDrUx+q7MHH5lS+oh4g0cb0bV7zqooA==", "dependencies": { "@turf/helpers": "^6.5.0", "@turf/line-intersect": "^6.5.0", @@ -4447,9 +4447,9 @@ "@angular/forms": "^14.3.0", "@angular/material": "^14.2.7", "@angular/platform-browser": "^14.3.0", - "@igo2/common": "^1.15.3", - "@igo2/core": "^1.15.3", - "@igo2/utils": "^1.15.3", + "@igo2/common": "^1.15.4", + "@igo2/core": "^1.15.4", + "@igo2/utils": "^1.15.4", "flexsearch": "0.7.21", "ngx-color-picker": "^13.0.0", "ngx-indexed-db": "^11.0.2", @@ -4460,9 +4460,9 @@ } }, "node_modules/@igo2/integration": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/integration/-/integration-1.15.3.tgz", - "integrity": "sha512-Pb4tVhXj73i9sIZaEGP7aYQtSCMoUp74DqJhi3uAUBGuw5FhtjeVxFfeJhOrZs6Lz4Wz/Ttn0SkLTZzeQ9RJhg==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/integration/-/integration-1.15.4.tgz", + "integrity": "sha512-rlGce3X34uCUjwYratISkW3L4kr400fgiiufLuvpWWGDfrs1ddmD6mQAn39rh0qgc050UzSaBfhI9n0ZKZ358w==", "dependencies": { "tslib": "^2.4.0" }, @@ -4472,15 +4472,15 @@ "peerDependencies": { "@angular/common": "^14.3.0", "@angular/core": "^14.3.0", - "@igo2/context": "1.15.3", - "@igo2/geo": "1.15.3", + "@igo2/context": "1.15.4", + "@igo2/geo": "1.15.4", "rxjs": "^7.5.6" } }, "node_modules/@igo2/utils": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/utils/-/utils-1.15.3.tgz", - "integrity": "sha512-kWx1GlFLiQYiR5+HTcuC+pbFjfKzV2Qiw/t1ckNDPH7uLcANBEVhjRGTQbCYgl1Lc8maMshNklmHb9BvWTezsQ==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/utils/-/utils-1.15.4.tgz", + "integrity": "sha512-0dx38w3TyxyQLMlA7dSoxZmcd3zwU36UVDRhEncnJhQ6RJGmyhfEqMC0d1Z+ZB1Zx3odrbuZRD1zUGloCUX5zg==", "dependencies": { "bowser": "^2.10.0", "tslib": "^2.4.0" @@ -33051,9 +33051,9 @@ "dev": true }, "@igo2/auth": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/auth/-/auth-1.15.3.tgz", - "integrity": "sha512-AF6zv4v/mZoycdpsh9QKQRFRKmAZmBQhJHCHFsDjskN4kYwYETSA3ym1lUf82tnJILHfnMJmoukDFTCWP4x1+A==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/auth/-/auth-1.15.4.tgz", + "integrity": "sha512-I2s3T2YsImKTckcwQgXtbPFamvB4wZ4ngVmOZ0hPI0qmZpNz0POqSZsC7C7WHm5dJybtFIE/HM3e0pvlSIr42g==", "requires": { "jwt-decode": "^2.2.0", "ts-cacheable": "^1.0.5", @@ -33062,34 +33062,34 @@ } }, "@igo2/common": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/common/-/common-1.15.3.tgz", - "integrity": "sha512-SQBI9mzCyAX8QLxQDF8eOimHuQryLwTCyViQ3h3O2gFwR5hcBb/MVQQCsrS3IqmEHuyF/b3hjTw61BEEsbT73A==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/common/-/common-1.15.4.tgz", + "integrity": "sha512-k01QDRTABLRSxSbvYUO1WNS8/Icj4w0900i8vPPCLsrXUi5N8CCKZmGrerhDhgDnzaRKNJtd3cQvAwmkYy4Zqw==", "requires": { "tslib": "^2.4.0" } }, "@igo2/context": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/context/-/context-1.15.3.tgz", - "integrity": "sha512-YodzvnccCjIBe3vVfpK9fURVYoDA/MFNkxbxVVJYWdnijizILHsQ8DjpQENVT9nGGFo80DOJEAjykDuJgLX6IQ==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/context/-/context-1.15.4.tgz", + "integrity": "sha512-WwNBRi6vfTjDdnRVyHnFhrlmSIQOicMKsKRyZaA5xKirmQdDMJt+iXdEZV4LcQzegP+i4uIv0YrVaz6op8sJcQ==", "requires": { "tslib": "^2.4.0" } }, "@igo2/core": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/core/-/core-1.15.3.tgz", - "integrity": "sha512-Y0vJi3wKozpEg25Y820e1ysWzaXQLOMdGKvnx+f/Wo4lkUl090jPKC/7rpuQxlbzcxUNSt9B6K6FlT7ePXC43g==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/core/-/core-1.15.4.tgz", + "integrity": "sha512-0Y8S6vowBjRmr/E5l9v1/RjMNbUpE2LeBjoRKXu4kbMLmSS6hTTIL52XUI7lbgNvOteHmX4ilK3ua1f0qjWlgQ==", "requires": { "@ngx-translate/core": "^14.0.0", "tslib": "^2.4.0" } }, "@igo2/geo": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/geo/-/geo-1.15.3.tgz", - "integrity": "sha512-AD7nWIMl3r/tNG0EVmhhVdQMhG0ZnSz5JXydFAtbRTwpfkOWhx01rPcnBfJZyf+b77LLRXVM3g3gzJSTeRb1Hg==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/geo/-/geo-1.15.4.tgz", + "integrity": "sha512-ICOQY6F8EaFaaZ+ef2F+aTXJO27bUj4CeDEuG1U7n8SD3wQme5EM89ajDrUx+q7MHH5lS+oh4g0cb0bV7zqooA==", "requires": { "@turf/helpers": "^6.5.0", "@turf/line-intersect": "^6.5.0", @@ -33108,17 +33108,17 @@ } }, "@igo2/integration": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/integration/-/integration-1.15.3.tgz", - "integrity": "sha512-Pb4tVhXj73i9sIZaEGP7aYQtSCMoUp74DqJhi3uAUBGuw5FhtjeVxFfeJhOrZs6Lz4Wz/Ttn0SkLTZzeQ9RJhg==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/integration/-/integration-1.15.4.tgz", + "integrity": "sha512-rlGce3X34uCUjwYratISkW3L4kr400fgiiufLuvpWWGDfrs1ddmD6mQAn39rh0qgc050UzSaBfhI9n0ZKZ358w==", "requires": { "tslib": "^2.4.0" } }, "@igo2/utils": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/@igo2/utils/-/utils-1.15.3.tgz", - "integrity": "sha512-kWx1GlFLiQYiR5+HTcuC+pbFjfKzV2Qiw/t1ckNDPH7uLcANBEVhjRGTQbCYgl1Lc8maMshNklmHb9BvWTezsQ==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/@igo2/utils/-/utils-1.15.4.tgz", + "integrity": "sha512-0dx38w3TyxyQLMlA7dSoxZmcd3zwU36UVDRhEncnJhQ6RJGmyhfEqMC0d1Z+ZB1Zx3odrbuZRD1zUGloCUX5zg==", "requires": { "bowser": "^2.10.0", "tslib": "^2.4.0" diff --git a/package.json b/package.json index 5709e5a6e..c752eb8f5 100644 --- a/package.json +++ b/package.json @@ -61,13 +61,13 @@ "@angular/service-worker": "^14.3.0", "@azure/msal-angular": "^2.4.1", "@azure/msal-browser": "^2.28.1", - "@igo2/auth": "1.15.3", - "@igo2/common": "1.15.3", - "@igo2/context": "1.15.3", - "@igo2/core": "1.15.3", - "@igo2/geo": "1.15.3", - "@igo2/integration": "1.15.3", - "@igo2/utils": "1.15.3", + "@igo2/auth": "1.15.4", + "@igo2/common": "1.15.4", + "@igo2/context": "1.15.4", + "@igo2/core": "1.15.4", + "@igo2/geo": "1.15.4", + "@igo2/integration": "1.15.4", + "@igo2/utils": "1.15.4", "@mat-datetimepicker/core": "~10.0.0", "@turf/buffer": "^6.5.0", "@turf/point-on-feature": "^6.5.0", From 741c692224c8fef3f1be028023aec84770abd354 Mon Sep 17 00:00:00 2001 From: Alexandre Caron Date: Wed, 5 Jul 2023 08:30:28 -0400 Subject: [PATCH 03/20] 1.15.4 --- CHANGELOG.md | 10 +++++----- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8076766f7..a428da3e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,14 @@ -## [1.15.3](https://github.com/infra-geo-ouverte/igo2/compare/1.15.2...1.15.3) (2023-06-13) +## [1.15.4](https://github.com/infra-geo-ouverte/igo2/compare/1.15.2...1.15.4) (2023-07-05) -### Bug Fixes +### Features -* **GithubActions:** remove ([f69bfc5](https://github.com/infra-geo-ouverte/igo2/commit/f69bfc57e52a1a997bffa119a3454d6da1f500ea)) +* **app:** upgrade igo2-lib ([a8ed9cd](https://github.com/infra-geo-ouverte/igo2/commit/a8ed9cdb51c3f4eba0705535923cce18ec35a859)) -### Features +### Reverts -* **app:** upgrade igo2-lib ([1d22610](https://github.com/infra-geo-ouverte/igo2/commit/1d2261044f5a054e8aa400e9c67a8739052ee94c)) +* Revert "chore(cadastre): delete cadastre provider" ([84b5393](https://github.com/infra-geo-ouverte/igo2/commit/84b53932faa3051d6a5ec901cfa8e65bcd43c777)) diff --git a/package-lock.json b/package-lock.json index b3b7588d2..26cfa632e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "igo", - "version": "1.15.3", + "version": "1.15.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "igo", - "version": "1.15.3", + "version": "1.15.4", "hasInstallScript": true, "license": "LiLiQ-R", "dependencies": { diff --git a/package.json b/package.json index c752eb8f5..c6c517f70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "igo", - "version": "1.15.3", + "version": "1.15.4", "description": "Infrastructure géomatique ouverte", "author": "Communauté IGO", "repository": { From e59e2949c55babbbecbd12d0051c621cfc82feef Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 17 Jul 2023 14:37:56 -0400 Subject: [PATCH 04/20] Added reght clic for change style and json --- src/app/pages/portal/portal.component.ts | 49 ++++++++++++- src/contexts/_contexts.json | 4 ++ src/contexts/_geostylerStyles.json | 89 ++++++++++++++++++++++++ 3 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 src/contexts/_geostylerStyles.json diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index cf23d15e9..93486f9ee 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -15,6 +15,8 @@ import * as olProj from 'ol/proj'; import olFeature from 'ol/Feature'; import type { default as OlGeometry } from 'ol/geom/Geometry'; +import OpenLayersParser from "geostyler-openlayers-parser"; + import { MediaService, Media, @@ -386,7 +388,13 @@ export class PortalComponent implements OnInit, OnDestroy { (context: DetailedContext) => this.onChangeContext(context) ); - const contextActions = [{ + const contextActions = [ + { + id: 'change style', + title: 'Change style', + handler: () => this.changeStyle() + }, + { id: 'coordinates', title: 'coordinates', handler: () => this.searchCoordinate(this.contextMenuCoord) @@ -641,6 +649,45 @@ export class PortalComponent implements OnInit, OnDestroy { this.sidenavMediaAndOrientation$$.unsubscribe(); } + changeStyle() { + const lastLayer = this.map.layers + .filter(l => l.showInLayerList) + .filter(l => l.dataSource.options.type === 'wfs').pop(); + + const geoStylerStyle: any = { + "name": "Basic Circle", + "rules": [ + { + "name": "Rule 1", + "symbolizers": [ + { + "kind": "Mark", + "wellKnownName": "circle", + "color": "#ff8000", + "radius": 30 + }, + { + "kind": "Text", + "label": "{{desclocal}}", + "color": "#000000", + "opacity": 1, + "size": 12 + } + ] + } + ] + }; + const olParser = new OpenLayersParser(); + olParser.writeStyle(geoStylerStyle) + .then((output) => { + console.log(output); + (lastLayer.ol as any).setStyle(output.output) + console.log(output.output) + }) + .catch(error => console.log(error)); + console.log(lastLayer) + } + /** * Cancel ongoing add layer, if any */ diff --git a/src/contexts/_contexts.json b/src/contexts/_contexts.json index 9d4dc2642..8d0101dd4 100644 --- a/src/contexts/_contexts.json +++ b/src/contexts/_contexts.json @@ -50,5 +50,9 @@ { "uri": "geolocation", "title": "Geolocation" + }, + { + "uri": "geostylerStyles", + "title": "GeostylerStyles" } ] diff --git a/src/contexts/_geostylerStyles.json b/src/contexts/_geostylerStyles.json new file mode 100644 index 000000000..34ae10c77 --- /dev/null +++ b/src/contexts/_geostylerStyles.json @@ -0,0 +1,89 @@ +{ + "uri": "geostylerStyles", + "base": "_base", + "layers": [ + { + "title": "World, Geostyler definition's based", + "zIndex": 10, + "id": "gs-style", + "sourceOptions": { + "queryable": false, + "type": "mvt", + "url": "https://ahocevar.com/geoserver/gwc/service/tms/1.0.0/ne:ne_10m_admin_0_countries@EPSG:900913@pbf/{z}/{x}/{-y}.pbf" + }, + "igoStyle": { + "geoStyler": { + "name": "GeoStyler Test", + "symbolizers":[ + { + "kind": "Mark", + "color": "#ff0000", + "width": 5 + } + ], + "scaleDenominator": { + "min": 50, + "max": 200 + } + } + } + }, + { + "title": "WFS - Geostyler", + "visible": true, + "sourceOptions": { + "type": "wfs", + "url": "https://ws.mapserver.transports.gouv.qc.ca/swtq", + "queryable": true, + "queryTitle": "desclocal", + "params": { + "featureTypes": "telephone_urg", + "fieldNameGeometry": "geometry", + "maxFeatures": 5001, + "outputFormat": "geojson" + }, + + "ogcFilters": { + "enabled": true, + "editable": true, + "allowedOperatorsType": "all", + "filters": { + "operator": "PropertyIsEqualTo", + "propertyName": "orgresp", + "expression": "Bell" + }, + "pushButtons": { + "groups": [ + {"title": "Group 1 Title","name": "1","ids": ["id1","id2"]} + ], + "bundles": [ + { + "id": "id1", + "logical": "Or", + "selectors": [ + { + "title": "Bell", + "enabled": true, + "filters": { + "operator": "PropertyIsEqualTo", + "propertyName": "orgresp", + "expression": "Bell" + } + }, + { + "title": "MTQ", + "enabled": false, + "filters": { + "operator": "PropertyIsEqualTo", + "propertyName": "orgresp", + "expression": "MTQ" + } + } + ] + } + ] + }} + } + } + ] + } \ No newline at end of file From b8e77ac56410b8e3c4cecb1b694cf73b59b58c6a Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 28 Aug 2023 10:33:24 -0400 Subject: [PATCH 05/20] Add change style to new points with right click --- package-lock.json | 113 ++++++++++++--- package.json | 3 +- src/app/pages/portal/portal.component.ts | 84 ++++++++++- src/contexts/_geostylerStyles.json | 175 ++++++++++++----------- 4 files changed, 267 insertions(+), 108 deletions(-) diff --git a/package-lock.json b/package-lock.json index b48df5bd0..5174d0755 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,7 @@ "fast-text-encoding": "^1.0.4", "file-saver": "^2.0.2", "flexsearch": "0.7.21", + "geostyler-openlayers-parser": "^4.2.1", "hammerjs": "^2.0.8", "html2canvas": "^1.4.1", "jspdf": "^2.5.1", @@ -5414,6 +5415,11 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/lodash": { + "version": "4.14.195", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", + "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==" + }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -9053,6 +9059,11 @@ "postcss": "^8.4" } }, + "node_modules/css-font-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-font-parser/-/css-font-parser-2.0.0.tgz", + "integrity": "sha512-YjgBiAq5rFNXfsPHofaEZwsUbCoSK0avstS76BSqNyVCM7+oiO44wZxbtq6YFSaQafCG0llS/f79oqlsmzaBJg==" + }, "node_modules/css-has-pseudo": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", @@ -12272,6 +12283,40 @@ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" }, + "node_modules/geostyler-openlayers-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/geostyler-openlayers-parser/-/geostyler-openlayers-parser-4.2.1.tgz", + "integrity": "sha512-oP/wZyzHasSsYZFP0EA2rBG/6oWSZjt7aB+Ykbvz0Pn2Z9jDEFtSfWRgVeakfWubolzlXgLmb7JZko1EYOeW+g==", + "dependencies": { + "css-font-parser": "^2.0.0", + "geostyler-style": "^7.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://opencollective.com/geostyler" + }, + "peerDependencies": { + "ol": ">=7.4" + } + }, + "node_modules/geostyler-style": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/geostyler-style/-/geostyler-style-7.3.1.tgz", + "integrity": "sha512-9KOXmtRt0O7lhwWfmRORM5l3j3H1uR52NFHlHv1qTb1hgNGZIPhLUrGCaoceUdNkD9+P/Cjiqsea+X+H8h64zw==", + "dependencies": { + "@types/lodash": "^4.14.168", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + }, + "funding": { + "url": "https://opencollective.com/geostyler" + } + }, "node_modules/geotiff": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.7.tgz", @@ -15976,8 +16021,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -22968,13 +23012,13 @@ "dev": true }, "node_modules/ol": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ol/-/ol-7.3.0.tgz", - "integrity": "sha512-08vJE4xITKPazQ9qJjeqYjRngnM9s+1eSv219Pdlrjj3LpLqjEH386ncq+76Dw1oGPGR8eLVEePk7FEd9XqqMw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-7.4.0.tgz", + "integrity": "sha512-bgBbiah694HhC0jt8ptEFNRXwgO8d6xWH3G97PCg4bmn9Li5nLLbi59oSrvqUI6VPVwonPQF1YcqJymxxyMC6A==", "dependencies": { "earcut": "^2.2.3", "geotiff": "^2.0.7", - "ol-mapbox-style": "^9.2.0", + "ol-mapbox-style": "^10.1.0", "pbf": "3.2.1", "rbush": "^3.0.1" }, @@ -22984,12 +23028,13 @@ } }, "node_modules/ol-mapbox-style": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-9.7.0.tgz", - "integrity": "sha512-YX3u8FBJHsRHaoGxmd724Mp5WPTuV7wLQW6zZhcihMuInsSdCX1EiZfU+8IAL7jG0pbgl5YgC0aWE/MXJcUXxg==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-10.6.0.tgz", + "integrity": "sha512-s86QhCoyyKVRsYkvPzzdWd///bhYh3onWrBq4lNXnCd9G/hS6AoK023kn4zlDESVlTBDTWLz8vhOistp0M3TXA==", "dependencies": { "@mapbox/mapbox-gl-style-spec": "^13.23.1", - "mapbox-to-css-font": "^2.4.1" + "mapbox-to-css-font": "^2.4.1", + "ol": "^7.3.0" } }, "node_modules/on-finished": { @@ -33868,6 +33913,11 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/lodash": { + "version": "4.14.195", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", + "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==" + }, "@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -36648,6 +36698,11 @@ "postcss-selector-parser": "^6.0.9" } }, + "css-font-parser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-font-parser/-/css-font-parser-2.0.0.tgz", + "integrity": "sha512-YjgBiAq5rFNXfsPHofaEZwsUbCoSK0avstS76BSqNyVCM7+oiO44wZxbtq6YFSaQafCG0llS/f79oqlsmzaBJg==" + }, "css-has-pseudo": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", @@ -39046,6 +39101,24 @@ } } }, + "geostyler-openlayers-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/geostyler-openlayers-parser/-/geostyler-openlayers-parser-4.2.1.tgz", + "integrity": "sha512-oP/wZyzHasSsYZFP0EA2rBG/6oWSZjt7aB+Ykbvz0Pn2Z9jDEFtSfWRgVeakfWubolzlXgLmb7JZko1EYOeW+g==", + "requires": { + "css-font-parser": "^2.0.0", + "geostyler-style": "^7.3.1" + } + }, + "geostyler-style": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/geostyler-style/-/geostyler-style-7.3.1.tgz", + "integrity": "sha512-9KOXmtRt0O7lhwWfmRORM5l3j3H1uR52NFHlHv1qTb1hgNGZIPhLUrGCaoceUdNkD9+P/Cjiqsea+X+H8h64zw==", + "requires": { + "@types/lodash": "^4.14.168", + "lodash": "^4.17.21" + } + }, "geotiff": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.0.7.tgz", @@ -41933,8 +42006,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -47384,24 +47456,25 @@ "dev": true }, "ol": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ol/-/ol-7.3.0.tgz", - "integrity": "sha512-08vJE4xITKPazQ9qJjeqYjRngnM9s+1eSv219Pdlrjj3LpLqjEH386ncq+76Dw1oGPGR8eLVEePk7FEd9XqqMw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/ol/-/ol-7.4.0.tgz", + "integrity": "sha512-bgBbiah694HhC0jt8ptEFNRXwgO8d6xWH3G97PCg4bmn9Li5nLLbi59oSrvqUI6VPVwonPQF1YcqJymxxyMC6A==", "requires": { "earcut": "^2.2.3", "geotiff": "^2.0.7", - "ol-mapbox-style": "^9.2.0", + "ol-mapbox-style": "^10.1.0", "pbf": "3.2.1", "rbush": "^3.0.1" } }, "ol-mapbox-style": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-9.7.0.tgz", - "integrity": "sha512-YX3u8FBJHsRHaoGxmd724Mp5WPTuV7wLQW6zZhcihMuInsSdCX1EiZfU+8IAL7jG0pbgl5YgC0aWE/MXJcUXxg==", + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-10.6.0.tgz", + "integrity": "sha512-s86QhCoyyKVRsYkvPzzdWd///bhYh3onWrBq4lNXnCd9G/hS6AoK023kn4zlDESVlTBDTWLz8vhOistp0M3TXA==", "requires": { "@mapbox/mapbox-gl-style-spec": "^13.23.1", - "mapbox-to-css-font": "^2.4.1" + "mapbox-to-css-font": "^2.4.1", + "ol": "^7.3.0" } }, "on-finished": { diff --git a/package.json b/package.json index 5709e5a6e..ad8a0cb4c 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,7 @@ "fast-text-encoding": "^1.0.4", "file-saver": "^2.0.2", "flexsearch": "0.7.21", + "geostyler-openlayers-parser": "^4.2.1", "hammerjs": "^2.0.8", "html2canvas": "^1.4.1", "jspdf": "^2.5.1", @@ -107,9 +108,9 @@ "@angular-eslint/eslint-plugin-template": "14.1.2", "@angular-eslint/schematics": "14.1.2", "@angular-eslint/template-parser": "14.1.2", - "@angular/platform-browser-dynamic": "^14.3.0", "@angular/cli": "^14.2.10", "@angular/compiler-cli": "^14.3.0", + "@angular/platform-browser-dynamic": "^14.3.0", "@babel/core": "^7.18.10", "@babel/preset-env": "^7.18.10", "@compodoc/compodoc": "^1.1.19", diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index 93486f9ee..c19879c73 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -74,9 +74,12 @@ import { MapExtent, moveToOlFeatures, FeatureMotion, - ConfigFileToGeoDBService + ConfigFileToGeoDBService, + FeatureDataSource } from '@igo2/geo'; +import * as olGeom from 'ol/geom'; + import { ToolState, MapState, @@ -101,8 +104,9 @@ import { HttpClient, HttpParams } from '@angular/common/http'; import { WelcomeWindowComponent } from './welcome-window/welcome-window.component'; import { WelcomeWindowService } from './welcome-window/welcome-window.service'; import { MatPaginator } from '@angular/material/paginator'; -import { ObjectUtils } from '@igo2/utils'; +import { ObjectUtils, uuid } from '@igo2/utils'; import olFormatGeoJSON from 'ol/format/GeoJSON'; +import { KEY_FORMAT_JWK } from '@azure/msal-browser/dist/utils/BrowserConstants'; @Component({ selector: 'app-portal', @@ -394,6 +398,16 @@ export class PortalComponent implements OnInit, OnDestroy { title: 'Change style', handler: () => this.changeStyle() }, + { + id: 'Change new points style', + title: 'Change new points style', + handler:() => this.changePointsStyle() + }, + { + id: 'addLayer', + title: 'addLayer Point', + handler: () => this.addLayerWithPoint(this.contextMenuCoord) + }, { id: 'coordinates', title: 'coordinates', @@ -649,6 +663,38 @@ export class PortalComponent implements OnInit, OnDestroy { this.sidenavMediaAndOrientation$$.unsubscribe(); } + changePointsStyle() { + const lastLayer = this.map.getLayerById('layerWithPoints'); + + const pointGeoStyle: any = { + "name": "Basic star fill", + "rules": [ + { + "name": "Rule 2", + "symbolizers": [ + { + "kind": "Mark", + "wellKnownName": "star", + "color": "#ff0000", + "radius": 15 + } + ] + } + ] + }; + + const olParser2 = new OpenLayersParser; + olParser2.writeStyle(pointGeoStyle) + .then((output) => { + console.log("output", output); + (lastLayer.ol as any).setStyle(output.output) + console.log("output", output.output) + }) + .catch(error => console.log(error)); + console.log("lastLayer", lastLayer) + + } + changeStyle() { const lastLayer = this.map.layers .filter(l => l.showInLayerList) @@ -662,8 +708,10 @@ export class PortalComponent implements OnInit, OnDestroy { "symbolizers": [ { "kind": "Mark", - "wellKnownName": "circle", + "wellKnownName": "triangle", "color": "#ff8000", + "strokeColor": "#000000", + "rotate": 90, "radius": 30 }, { @@ -677,15 +725,16 @@ export class PortalComponent implements OnInit, OnDestroy { } ] }; + const olParser = new OpenLayersParser(); olParser.writeStyle(geoStylerStyle) .then((output) => { - console.log(output); + console.log("output", output); (lastLayer.ol as any).setStyle(output.output) - console.log(output.output) + console.log("output", output.output) }) .catch(error => console.log(error)); - console.log(lastLayer) + console.log("lastLayer", lastLayer) } /** @@ -957,6 +1006,29 @@ export class PortalComponent implements OnInit, OnDestroy { coord.map((c) => c.toFixed(6)).join(', ') : coord.reverse().map((c) => c.toFixed(6)).join(', '); } + addLayerWithPoint(coord: [number, number]) { + let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; + if (!layer) { + layer = new VectorLayer({ + title: 'Layer de points créé afin de changer le style.', + isIgoInternalLayer: true, + id: `layerWithPoints`, + zIndex: 200, + source: new FeatureDataSource(), + igoStyle: undefined, + showInLayerList: true, + exportable: true, + browsable: false, + workspace: { enabled: true } + }); + this.map.addLayer(layer); + } + const geometry4326 = new olGeom.Point(coord); + const geometryMapProjection = geometry4326.transform('EPSG:4326',this.map.projection); + const feature = new olFeature({ id: uuid(), geometry: geometryMapProjection }); + layer.dataSource.ol.addFeature(feature) + } + updateMapBrowserClass() { const header = this.queryState.store.entities$.value.length > 0; if (this.hasExpansionPanel && this.workspaceState.workspaceEnabled$.value) { diff --git a/src/contexts/_geostylerStyles.json b/src/contexts/_geostylerStyles.json index 34ae10c77..21adf46f2 100644 --- a/src/contexts/_geostylerStyles.json +++ b/src/contexts/_geostylerStyles.json @@ -1,89 +1,102 @@ { - "uri": "geostylerStyles", - "base": "_base", - "layers": [ - { - "title": "World, Geostyler definition's based", - "zIndex": 10, - "id": "gs-style", - "sourceOptions": { - "queryable": false, - "type": "mvt", - "url": "https://ahocevar.com/geoserver/gwc/service/tms/1.0.0/ne:ne_10m_admin_0_countries@EPSG:900913@pbf/{z}/{x}/{-y}.pbf" - }, - "igoStyle": { - "geoStyler": { - "name": "GeoStyler Test", - "symbolizers":[ - { - "kind": "Mark", - "color": "#ff0000", - "width": 5 - } - ], - "scaleDenominator": { - "min": 50, - "max": 200 + "uri": "geostylerStyles", + "base": "_base", + "layers": [ + { + "title": "World, Geostyler definition's based", + "zIndex": 10, + "id": "gs-style", + "sourceOptions": { + "queryable": false, + "type": "mvt", + "url": "https://ahocevar.com/geoserver/gwc/service/tms/1.0.0/ne:ne_10m_admin_0_countries@EPSG:900913@pbf/{z}/{x}/{-y}.pbf" + }, + "igoStyle": { + "geoStylerStyle": { + "name": "GeoStyler Test", + "symbolizers":[ + { + "kind": "Mark", + "color": "#ff0000", + "width": 5 } + ], + "scaleDenominator": { + "min": 50, + "max": 200 } } - }, - { - "title": "WFS - Geostyler", - "visible": true, - "sourceOptions": { - "type": "wfs", - "url": "https://ws.mapserver.transports.gouv.qc.ca/swtq", - "queryable": true, - "queryTitle": "desclocal", - "params": { - "featureTypes": "telephone_urg", - "fieldNameGeometry": "geometry", - "maxFeatures": 5001, - "outputFormat": "geojson" - }, + } + }, + { + "title": "WFS - Geostyler", + "visible": true, + "sourceOptions": { + "type": "wfs", + "url": "https://ws.mapserver.transports.gouv.qc.ca/swtq", + "queryable": true, + "queryTitle": "desclocal", + "params": { + "featureTypes": "telephone_urg", + "fieldNameGeometry": "geometry", + "maxFeatures": 5001, + "outputFormat": "geojson" + }, - "ogcFilters": { - "enabled": true, - "editable": true, - "allowedOperatorsType": "all", - "filters": { - "operator": "PropertyIsEqualTo", - "propertyName": "orgresp", - "expression": "Bell" - }, - "pushButtons": { - "groups": [ - {"title": "Group 1 Title","name": "1","ids": ["id1","id2"]} - ], - "bundles": [ - { - "id": "id1", - "logical": "Or", - "selectors": [ - { - "title": "Bell", - "enabled": true, - "filters": { - "operator": "PropertyIsEqualTo", - "propertyName": "orgresp", - "expression": "Bell" - } - }, - { - "title": "MTQ", - "enabled": false, - "filters": { - "operator": "PropertyIsEqualTo", - "propertyName": "orgresp", - "expression": "MTQ" - } + "ogcFilters": { + "enabled": true, + "editable": true, + "allowedOperatorsType": "all", + "filters": { + "operator": "PropertyIsEqualTo", + "propertyName": "orgresp", + "expression": "Bell" + }, + "pushButtons": { + "groups": [ + {"title": "Group 1 Title","name": "1","ids": ["id1","id2"]} + ], + "bundles": [ + { + "id": "id1", + "logical": "Or", + "selectors": [ + { + "title": "Bell", + "enabled": true, + "filters": { + "operator": "PropertyIsEqualTo", + "propertyName": "orgresp", + "expression": "Bell" + } + }, + { + "title": "MTQ", + "enabled": false, + "filters": { + "operator": "PropertyIsEqualTo", + "propertyName": "orgresp", + "expression": "MTQ" } - ] - } - ] - }} + } + ] + } + ] + }} + }, + "igoStyle": { + "geoStylerStyle": { + "name": "WFS GeoStyler Test", + "symbolizers":[ + { + "kind": "Mark", + "wellKnownName": "circle", + "color": "#fc0000", + "radius": 92 + } + ] } } - ] - } \ No newline at end of file + } + ] + } \ No newline at end of file From 45d723e5e795155c670220803b91ac0919004063 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-=C3=89tienne=20Lord?= Date: Tue, 29 Aug 2023 13:16:58 -0400 Subject: [PATCH 06/20] wip --- src/contexts/_geostylerStyles.json | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/contexts/_geostylerStyles.json b/src/contexts/_geostylerStyles.json index 21adf46f2..3e0925f91 100644 --- a/src/contexts/_geostylerStyles.json +++ b/src/contexts/_geostylerStyles.json @@ -86,15 +86,23 @@ }, "igoStyle": { "geoStylerStyle": { - "name": "WFS GeoStyler Test", - "symbolizers":[ - { - "kind": "Mark", - "wellKnownName": "circle", - "color": "#fc0000", - "radius": 92 - } - ] + "global": { + "name": "Basic star fill", + "rules": [ + { + "name": "Rule 2", + "symbolizers": [ + { + "kind": "Mark", + "wellKnownName": "star", + "color": "#ff0000", + "radius": 15 + } + ] + } + ] + + } } } } From 1a61bb2cf99f75adf92959a4c11f288ddf605a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-=C3=89tienne=20Lord?= Date: Tue, 29 Aug 2023 13:22:05 -0400 Subject: [PATCH 07/20] wip lint --- src/app/pages/portal/portal.component.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index c19879c73..c97313769 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -106,7 +106,6 @@ import { WelcomeWindowService } from './welcome-window/welcome-window.service'; import { MatPaginator } from '@angular/material/paginator'; import { ObjectUtils, uuid } from '@igo2/utils'; import olFormatGeoJSON from 'ol/format/GeoJSON'; -import { KEY_FORMAT_JWK } from '@azure/msal-browser/dist/utils/BrowserConstants'; @Component({ selector: 'app-portal', @@ -687,11 +686,11 @@ export class PortalComponent implements OnInit, OnDestroy { olParser2.writeStyle(pointGeoStyle) .then((output) => { console.log("output", output); - (lastLayer.ol as any).setStyle(output.output) - console.log("output", output.output) + (lastLayer.ol as any).setStyle(output.output); + console.log("output", output.output); }) .catch(error => console.log(error)); - console.log("lastLayer", lastLayer) + console.log("lastLayer", lastLayer); } @@ -699,7 +698,7 @@ export class PortalComponent implements OnInit, OnDestroy { const lastLayer = this.map.layers .filter(l => l.showInLayerList) .filter(l => l.dataSource.options.type === 'wfs').pop(); - + const geoStylerStyle: any = { "name": "Basic Circle", "rules": [ @@ -730,11 +729,11 @@ export class PortalComponent implements OnInit, OnDestroy { olParser.writeStyle(geoStylerStyle) .then((output) => { console.log("output", output); - (lastLayer.ol as any).setStyle(output.output) - console.log("output", output.output) + (lastLayer.ol as any).setStyle(output.output); + console.log("output", output.output); }) .catch(error => console.log(error)); - console.log("lastLayer", lastLayer) + console.log("lastLayer", lastLayer); } /** @@ -1026,7 +1025,7 @@ export class PortalComponent implements OnInit, OnDestroy { const geometry4326 = new olGeom.Point(coord); const geometryMapProjection = geometry4326.transform('EPSG:4326',this.map.projection); const feature = new olFeature({ id: uuid(), geometry: geometryMapProjection }); - layer.dataSource.ol.addFeature(feature) + layer.dataSource.ol.addFeature(feature); } updateMapBrowserClass() { From cb287417864e24ff1fc0ee1d54ac1572e5a1d25f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-=C3=89tienne=20Lord?= Date: Tue, 29 Aug 2023 17:01:47 -0400 Subject: [PATCH 08/20] wip --- src/contexts/_geostylerStyles.json | 73 ++++++++---------------------- 1 file changed, 20 insertions(+), 53 deletions(-) diff --git a/src/contexts/_geostylerStyles.json b/src/contexts/_geostylerStyles.json index 3e0925f91..8584472d0 100644 --- a/src/contexts/_geostylerStyles.json +++ b/src/contexts/_geostylerStyles.json @@ -13,17 +13,20 @@ }, "igoStyle": { "geoStylerStyle": { - "name": "GeoStyler Test", - "symbolizers":[ - { - "kind": "Mark", - "color": "#ff0000", - "width": 5 - } - ], - "scaleDenominator": { - "min": 50, - "max": 200 + "global": { + "name": "Hola", + "rules": [ + { + "names": "test", + "symbolizers": [ + { + "kind": "Fill", + "color": "#0b64e1", + "fillOpacity": 0.6 + } + ] + } + ] } } } @@ -41,48 +44,7 @@ "fieldNameGeometry": "geometry", "maxFeatures": 5001, "outputFormat": "geojson" - }, - - "ogcFilters": { - "enabled": true, - "editable": true, - "allowedOperatorsType": "all", - "filters": { - "operator": "PropertyIsEqualTo", - "propertyName": "orgresp", - "expression": "Bell" - }, - "pushButtons": { - "groups": [ - {"title": "Group 1 Title","name": "1","ids": ["id1","id2"]} - ], - "bundles": [ - { - "id": "id1", - "logical": "Or", - "selectors": [ - { - "title": "Bell", - "enabled": true, - "filters": { - "operator": "PropertyIsEqualTo", - "propertyName": "orgresp", - "expression": "Bell" - } - }, - { - "title": "MTQ", - "enabled": false, - "filters": { - "operator": "PropertyIsEqualTo", - "propertyName": "orgresp", - "expression": "MTQ" - } - } - ] - } - ] - }} + } }, "igoStyle": { "geoStylerStyle": { @@ -91,6 +53,11 @@ "rules": [ { "name": "Rule 2", + "filter": [ + "==", + "orgresp", + "Bell" + ], "symbolizers": [ { "kind": "Mark", From 1d953423daac22b3e44370537b494bee5307cec6 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Wed, 13 Sep 2023 13:54:55 -0400 Subject: [PATCH 09/20] Add Hover Layer to geostylerstyles json --- src/contexts/_geostylerStyles.json | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/contexts/_geostylerStyles.json b/src/contexts/_geostylerStyles.json index 8584472d0..9d97a25a8 100644 --- a/src/contexts/_geostylerStyles.json +++ b/src/contexts/_geostylerStyles.json @@ -6,6 +6,7 @@ "title": "World, Geostyler definition's based", "zIndex": 10, "id": "gs-style", + "visible": false, "sourceOptions": { "queryable": false, "type": "mvt", @@ -72,6 +73,47 @@ } } } + }, + { + "title": "Polygons - MVT - Hover", + "id": "mvtsbap", + "visible": true, + "sourceOptions": { + "queryable": true, + "queryTitle": "nom_unite_", + "featureClass": "feature", + "type": "mvt", + "url": "https://ws.mapserver.transports.gouv.qc.ca/swtq?mode=tile&tilemode=gmap&tile={x}+{y}+{z}&layers=bgr_v_centr_servc_geomt_act&map.imagetype=mvt" + }, + "igoStyle":{ + "geoStylerStyle":{ + "hover":{ + "name": "Geostyler Hover Basic Fill", + "rules":[ + { + "name": "Rule Basic Fill", + "symbolizers": [ + { + "kind": "Fill", + "color": "#006aff", + "outlineColor": "#000000" + } + ] + }, + { + "name": "Mouse Over Fill", + "symbolizers": [ + { + "kind": "Fill", + "color": "#ff0000", + "outlineColor": "#ffffff" + } + ] + } + ] + } + } + } } ] } \ No newline at end of file From a5bbb1d8b44f016919c105226125f573d900c8d0 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 18 Sep 2023 12:43:43 -0400 Subject: [PATCH 10/20] Added geostyler-legend to branch --- package-lock.json | 891 ++++++++++++++++++++++- package.json | 1 + src/app/pages/portal/portal.component.ts | 38 +- 3 files changed, 915 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index dd2d71198..0a257cf33 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,6 +39,7 @@ "fast-text-encoding": "^1.0.4", "file-saver": "^2.0.2", "flexsearch": "0.7.21", + "geostyler-legend": "^4.0.0", "geostyler-openlayers-parser": "^4.2.1", "hammerjs": "^2.0.8", "html2canvas": "^1.4.1", @@ -5317,6 +5318,11 @@ "@types/node": "*" } }, + "node_modules/@types/d3-selection": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.6.tgz", + "integrity": "sha512-2ACr96USZVjXR9KMD9IWi1Epo4rSDKnUtYn6q2SPhYxykvXTw9vR77lkFNruXVg4i1tzQtBxeDMx0oNvJWbF1w==" + }, "node_modules/@types/eslint": { "version": "8.37.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", @@ -9208,11 +9214,246 @@ "type": "^1.0.1" } }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "peer": true, + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "peer": true, + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "peer": true, + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "peer": true, + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "peer": true, + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "peer": true, + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-geo": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", @@ -9221,6 +9462,229 @@ "d3-array": "1" } }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "peer": true, + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "peer": true, + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "peer": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "peer": true, + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "peer": true, + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "peer": true, + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "peer": true, + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3/node_modules/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "peer": true, + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -9550,6 +10014,15 @@ "rimraf": "bin.js" } }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "peer": true, + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -12283,6 +12756,22 @@ "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" }, + "node_modules/geostyler-legend": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/geostyler-legend/-/geostyler-legend-4.0.0.tgz", + "integrity": "sha512-GXNcprNpsm9cfiJ9oiYnPHhJog9wkQm0Z7Ab+Raqln5CnTNydS4jFFhEfdoqkMTk3aEE6yonXNsX+vfm0DwUCA==", + "dependencies": { + "@types/d3-selection": "^3.0.1", + "geostyler-openlayers-parser": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "d3": ">=6", + "ol": ">=6" + } + }, "node_modules/geostyler-openlayers-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/geostyler-openlayers-parser/-/geostyler-openlayers-parser-4.2.1.tgz", @@ -14506,6 +14995,15 @@ "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", "dev": true }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -25950,6 +26448,12 @@ "node": "*" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "peer": true + }, "node_modules/rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -26049,8 +26553,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { "version": "1.62.1", @@ -33815,6 +34318,11 @@ "@types/node": "*" } }, + "@types/d3-selection": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.6.tgz", + "integrity": "sha512-2ACr96USZVjXR9KMD9IWi1Epo4rSDKnUtYn6q2SPhYxykvXTw9vR77lkFNruXVg4i1tzQtBxeDMx0oNvJWbF1w==" + }, "@types/eslint": { "version": "8.37.0", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", @@ -36801,11 +37309,208 @@ "type": "^1.0.1" } }, + "d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "peer": true, + "requires": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "dependencies": { + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "requires": { + "internmap": "1 - 2" + } + }, + "d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", + "peer": true, + "requires": { + "d3-array": "2.5.0 - 3" + } + } + } + }, "d3-array": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" }, + "d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "peer": true + }, + "d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + } + }, + "d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "peer": true, + "requires": { + "d3-path": "1 - 3" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "peer": true + }, + "d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "peer": true, + "requires": { + "d3-array": "^3.2.0" + }, + "dependencies": { + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "requires": { + "internmap": "1 - 2" + } + } + } + }, + "d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "peer": true, + "requires": { + "delaunator": "5" + } + }, + "d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "peer": true + }, + "d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + } + }, + "d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "peer": true, + "requires": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true + }, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "peer": true + }, + "d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "peer": true, + "requires": { + "d3-dsv": "1 - 3" + } + }, + "d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "peer": true + }, "d3-geo": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.7.1.tgz", @@ -36814,6 +37519,155 @@ "d3-array": "1" } }, + "d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "peer": true + }, + "d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "peer": true, + "requires": { + "d3-color": "1 - 3" + } + }, + "d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "peer": true + }, + "d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "peer": true + }, + "d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "peer": true + }, + "d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "peer": true + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "peer": true, + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "dependencies": { + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "requires": { + "internmap": "1 - 2" + } + } + } + }, + "d3-scale-chromatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", + "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", + "peer": true, + "requires": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + } + }, + "d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "peer": true + }, + "d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "peer": true, + "requires": { + "d3-path": "^3.1.0" + } + }, + "d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "peer": true, + "requires": { + "d3-array": "2 - 3" + }, + "dependencies": { + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "requires": { + "internmap": "1 - 2" + } + } + } + }, + "d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "peer": true, + "requires": { + "d3-time": "1 - 3" + } + }, + "d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "peer": true + }, + "d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "peer": true, + "requires": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + } + }, + "d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "peer": true, + "requires": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + } + }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", @@ -37061,6 +37915,15 @@ } } }, + "delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "peer": true, + "requires": { + "robust-predicates": "^3.0.0" + } + }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -39101,6 +39964,15 @@ } } }, + "geostyler-legend": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/geostyler-legend/-/geostyler-legend-4.0.0.tgz", + "integrity": "sha512-GXNcprNpsm9cfiJ9oiYnPHhJog9wkQm0Z7Ab+Raqln5CnTNydS4jFFhEfdoqkMTk3aEE6yonXNsX+vfm0DwUCA==", + "requires": { + "@types/d3-selection": "^3.0.1", + "geostyler-openlayers-parser": "^4.0.0" + } + }, "geostyler-openlayers-parser": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/geostyler-openlayers-parser/-/geostyler-openlayers-parser-4.2.1.tgz", @@ -40843,6 +41715,12 @@ "integrity": "sha512-tvFwvS4g7q6iDot/4FjtWFHwwpv6TVvEumbTdLQilk1F07ojakbXPQcvf3kMAlyNDpzKRzn+d33O3RuXODuxZQ==", "dev": true }, + "internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "peer": true + }, "interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", @@ -49621,6 +50499,12 @@ } } }, + "robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "peer": true + }, "rollup": { "version": "2.79.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", @@ -49685,8 +50569,7 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { "version": "1.62.1", diff --git a/package.json b/package.json index 63cb7f57f..7a5c8d207 100644 --- a/package.json +++ b/package.json @@ -78,6 +78,7 @@ "fast-text-encoding": "^1.0.4", "file-saver": "^2.0.2", "flexsearch": "0.7.21", + "geostyler-legend": "^4.0.0", "geostyler-openlayers-parser": "^4.2.1", "hammerjs": "^2.0.8", "html2canvas": "^1.4.1", diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index c97313769..26aa97b2c 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -16,6 +16,7 @@ import olFeature from 'ol/Feature'; import type { default as OlGeometry } from 'ol/geom/Geometry'; import OpenLayersParser from "geostyler-openlayers-parser"; +import LegendRenderer from 'geostyler-legend/dist/LegendRenderer/LegendRenderer' import { MediaService, @@ -663,34 +664,49 @@ export class PortalComponent implements OnInit, OnDestroy { } changePointsStyle() { - const lastLayer = this.map.getLayerById('layerWithPoints'); - - const pointGeoStyle: any = { - "name": "Basic star fill", + const style123: any = { + "name": "Basic Circle", "rules": [ { - "name": "Rule 2", + "name": "Rule 1", "symbolizers": [ { "kind": "Mark", - "wellKnownName": "star", - "color": "#ff0000", - "radius": 15 + "wellKnownName": "triangle", + "color": "#ff8000", + "strokeColor": "#000000", + "rotate": 90, + "radius": 30 + }, + { + "kind": "Text", + "label": "{{desclocal}}", + "color": "#000000", + "opacity": 1, + "size": 12 } ] } ] }; + const renderer = new LegendRenderer({ + maxColumnWidth: 300, + maxColumnHeight: 300, + overflow: 'auto', + styles: [style123], + size: [600, 300] + }); - const olParser2 = new OpenLayersParser; - olParser2.writeStyle(pointGeoStyle) + //renderer.render(someElement); + + /*olParser2.writeStyle(pointGeoStyle) .then((output) => { console.log("output", output); (lastLayer.ol as any).setStyle(output.output); console.log("output", output.output); }) .catch(error => console.log(error)); - console.log("lastLayer", lastLayer); + console.log("lastLayer", lastLayer);*/ } From 51be8665deb4a1be28cdb33eb83fda5944f441b0 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Tue, 26 Sep 2023 09:06:19 -0400 Subject: [PATCH 11/20] Corrected errors for merge with 16.0.0 --- src/app/pages/portal/portal.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index 26aa97b2c..18514f586 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -16,7 +16,7 @@ import olFeature from 'ol/Feature'; import type { default as OlGeometry } from 'ol/geom/Geometry'; import OpenLayersParser from "geostyler-openlayers-parser"; -import LegendRenderer from 'geostyler-legend/dist/LegendRenderer/LegendRenderer' +import LegendRenderer from 'geostyler-legend/dist/LegendRenderer/LegendRenderer'; import { MediaService, From 617c054f25bfd4f4fa87301aad8cfd7502c0c1e5 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 2 Oct 2023 08:59:46 -0400 Subject: [PATCH 12/20] lint --- src/app/pages/portal/portal.component.ts | 131 ++++++++++++----------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index d67118d04..d3d25f358 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -19,7 +19,7 @@ import * as olProj from 'ol/proj'; import olFeature from 'ol/Feature'; import type { default as OlGeometry } from 'ol/geom/Geometry'; -import OpenLayersParser from "geostyler-openlayers-parser"; +import OpenLayersParser from 'geostyler-openlayers-parser'; import { MediaService, @@ -430,7 +430,7 @@ export class PortalComponent implements OnInit, OnDestroy { { id: 'Change new points style', title: 'Change new points style', - handler:() => this.changePointsStyle() + handler: () => this.changePointsStyle() }, { id: 'addLayer', @@ -438,20 +438,21 @@ export class PortalComponent implements OnInit, OnDestroy { handler: () => this.addLayerWithPoint(this.contextMenuCoord) }, { - id: 'coordinates', - title: 'coordinates', - handler: () => this.searchCoordinate(this.contextMenuCoord) - }, - { - id: 'googleMaps', - title: 'googleMap', - handler: () => this.openGoogleMaps(this.contextMenuCoord) - }, - { - id: 'googleStreetView', - title: 'googleStreetView', - handler: () => this.openGoogleStreetView(this.contextMenuCoord) - }]; + id: 'coordinates', + title: 'coordinates', + handler: () => this.searchCoordinate(this.contextMenuCoord) + }, + { + id: 'googleMaps', + title: 'googleMap', + handler: () => this.openGoogleMaps(this.contextMenuCoord) + }, + { + id: 'googleStreetView', + title: 'googleStreetView', + handler: () => this.openGoogleStreetView(this.contextMenuCoord) + } + ]; this.contextMenuStore.load(contextActions); @@ -714,59 +715,60 @@ export class PortalComponent implements OnInit, OnDestroy { const lastLayer = this.map.getLayerById('layerWithPoints'); const pointGeoStyle: any = { - "name": "Basic star fill", - "rules": [ + name: 'Basic star fill', + rules: [ { - "name": "Rule 2", - "symbolizers": [ + name: 'Rule 2', + symbolizers: [ { - "kind": "Mark", - "wellKnownName": "star", - "color": "#ff0000", - "radius": 15 + kind: 'Mark', + wellKnownName: 'star', + color: '#ff0000', + radius: 15 } ] } ] }; - const olParser2 = new OpenLayersParser; - olParser2.writeStyle(pointGeoStyle) - .then((output) => { - console.log("output", output); - (lastLayer.ol as any).setStyle(output.output); - console.log("output", output.output); - }) - .catch(error => console.log(error)); - console.log("lastLayer", lastLayer); - + const olParser2 = new OpenLayersParser(); + olParser2 + .writeStyle(pointGeoStyle) + .then((output) => { + console.log('output', output); + (lastLayer.ol as any).setStyle(output.output); + console.log('output', output.output); + }) + .catch((error) => console.log(error)); + console.log('lastLayer', lastLayer); } changeStyle() { const lastLayer = this.map.layers - .filter(l => l.showInLayerList) - .filter(l => l.dataSource.options.type === 'wfs').pop(); + .filter((l) => l.showInLayerList) + .filter((l) => l.dataSource.options.type === 'wfs') + .pop(); const geoStylerStyle: any = { - "name": "Basic Circle", - "rules": [ + name: 'Basic Circle', + rules: [ { - "name": "Rule 1", - "symbolizers": [ + name: 'Rule 1', + symbolizers: [ { - "kind": "Mark", - "wellKnownName": "triangle", - "color": "#ff8000", - "strokeColor": "#000000", - "rotate": 90, - "radius": 30 + kind: 'Mark', + wellKnownName: 'triangle', + color: '#ff8000', + strokeColor: '#000000', + rotate: 90, + radius: 30 }, { - "kind": "Text", - "label": "{{desclocal}}", - "color": "#000000", - "opacity": 1, - "size": 12 + kind: 'Text', + label: '{{desclocal}}', + color: '#000000', + opacity: 1, + size: 12 } ] } @@ -774,14 +776,15 @@ export class PortalComponent implements OnInit, OnDestroy { }; const olParser = new OpenLayersParser(); - olParser.writeStyle(geoStylerStyle) - .then((output) => { - console.log("output", output); - (lastLayer.ol as any).setStyle(output.output); - console.log("output", output.output); - }) - .catch(error => console.log(error)); - console.log("lastLayer", lastLayer); + olParser + .writeStyle(geoStylerStyle) + .then((output) => { + console.log('output', output); + (lastLayer.ol as any).setStyle(output.output); + console.log('output', output.output); + }) + .catch((error) => console.log(error)); + console.log('lastLayer', lastLayer); } /** @@ -1078,8 +1081,14 @@ export class PortalComponent implements OnInit, OnDestroy { this.map.addLayer(layer); } const geometry4326 = new olGeom.Point(coord); - const geometryMapProjection = geometry4326.transform('EPSG:4326',this.map.projection); - const feature = new olFeature({ id: uuid(), geometry: geometryMapProjection }); + const geometryMapProjection = geometry4326.transform( + 'EPSG:4326', + this.map.projection + ); + const feature = new olFeature({ + id: uuid(), + geometry: geometryMapProjection + }); layer.dataSource.ol.addFeature(feature); } From a8730e4f868eec68ce7e17313fa040dd4a127d01 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Wed, 4 Oct 2023 13:33:00 -0400 Subject: [PATCH 13/20] Started button to get a geostyler legend --- package-lock.json | 296 ++++++++++++++++++++--- package.json | 1 + src/app/pages/portal/portal.component.ts | 101 +++++++- 3 files changed, 355 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index 100ac7b2d..858f7f51c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "@igo2/integration": "16.0.0-rc.1", "@igo2/utils": "16.0.0-rc.1", "core-js": "^3.32.2", + "geostyler-legend": "^4.0.0", "geostyler-openlayers-parser": "^4.2.1", "hammerjs": "^2.0.8", "ol": "^7.5.2", @@ -8612,6 +8613,241 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/d3": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz", + "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==", + "peer": true, + "dependencies": { + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "peer": true, + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "peer": true, + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "peer": true, + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "peer": true, + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "peer": true, + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "peer": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "peer": true, + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "peer": true, + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/d3-hierarchy": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", @@ -8698,18 +8934,6 @@ "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "peer": true, - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-selection": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", @@ -8755,18 +8979,6 @@ "node": ">=12" } }, - "node_modules/d3-time/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "peer": true, - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-timer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", @@ -8811,18 +9023,6 @@ "node": ">=12" } }, - "node_modules/d3/node_modules/d3-array": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", - "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "peer": true, - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3/node_modules/d3-geo": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", @@ -9043,6 +9243,15 @@ "node": ">=8" } }, + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "peer": true, + "dependencies": { + "robust-predicates": "^3.0.0" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -12134,6 +12343,15 @@ "node": ">=8" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "peer": true, + "engines": { + "node": ">=12" + } + }, "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", @@ -16708,6 +16926,12 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "peer": true + }, "node_modules/rollup": { "version": "3.29.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.2.tgz", diff --git a/package.json b/package.json index 67ed876e1..15c5ed17a 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,7 @@ "@igo2/integration": "16.0.0-rc.1", "@igo2/utils": "16.0.0-rc.1", "core-js": "^3.32.2", + "geostyler-legend": "^4.0.0", "geostyler-openlayers-parser": "^4.2.1", "hammerjs": "^2.0.8", "ol": "^7.5.2", diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index c82b23104..a501a0966 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -423,6 +423,11 @@ export class PortalComponent implements OnInit, OnDestroy { ); const contextActions = [ + { + id: 'export legend', + title: 'Export Legend', + handler: () => this.exportLegend() + }, { id: 'change style', title: 'Change style', @@ -757,13 +762,6 @@ export class PortalComponent implements OnInit, OnDestroy { } ] }; - const renderer = new LegendRenderer({ - maxColumnWidth: 300, - maxColumnHeight: 300, - overflow: 'auto', - styles: [style123], - size: [600, 300] - }); //renderer.render(someElement); @@ -777,6 +775,95 @@ export class PortalComponent implements OnInit, OnDestroy { console.log("lastLayer", lastLayer);*/ } + exportLegend() { + const layerDescriptors = []; + + const style1: any = { + name: 'Basic Circle', + rules: [ + { + name: 'Rule 1', + symbolizers: [ + { + kind: 'Mark', + wellKnownName: 'triangle', + color: '#ff8000', + strokeColor: '#000000', + rotate: 90, + radius: 30 + }, + { + kind: 'Text', + label: '{{desclocal}}', + color: '#000000', + opacity: 1, + size: 12 + } + ] + } + ] + }; + const style2: any = { + name: 'Basic Circle 2', + rules: [ + { + name: 'Rule 1', + symbolizers: [ + { + kind: 'Mark', + wellKnownName: 'triangle', + color: '#ff8000', + strokeColor: '#000000', + rotate: 90, + radius: 30 + }, + { + kind: 'Text', + label: '{{desclocal}}', + color: '#000000', + opacity: 1, + size: 12 + } + ] + } + ] + }; + + //lire tous les couches affichées; parser.readStyle().output + + const renderer = new LegendRenderer({ + maxColumnWidth: 300, + maxColumnHeight: 300, + overflow: 'auto', + styles: [style1, style2], + size: [600, 300] + }); + renderer.renderAsImage('svg'); + console.log(renderer.renderAsImage('svg')); + //renderer.renderLegend + const el = document.createElement('div'); + console.log(renderer.render(el)); + + let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; + if (!layer) { + layer = new VectorLayer({ + title: 'Layer de points créé afin de changer le style.', + isIgoInternalLayer: true, + id: `layerWithPoints`, + zIndex: 200, + source: new FeatureDataSource(), + igoStyle: undefined, + showInLayerList: true, + exportable: true, + browsable: false, + workspace: { enabled: true } + }); + } + this.map.addLayer(layer); + console.log(el.innerHTML); // Image as SVG string + return el.innerHTML; + } + changeStyle() { const lastLayer = this.map.layers .filter((l) => l.showInLayerList) From fdcfdb2a986febb9e979403e80e315440184e070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-=C3=89tienne=20Lord?= Date: Wed, 4 Oct 2023 14:34:43 -0400 Subject: [PATCH 14/20] wip push test --- src/app/pages/portal/portal.component.html | 1 + src/app/pages/portal/portal.component.ts | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/pages/portal/portal.component.html b/src/app/pages/portal/portal.component.html index aa29faf2f..316728f9e 100644 --- a/src/app/pages/portal/portal.component.html +++ b/src/app/pages/portal/portal.component.html @@ -1,3 +1,4 @@ +
diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index a501a0966..fda12df09 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -836,9 +836,22 @@ export class PortalComponent implements OnInit, OnDestroy { maxColumnHeight: 300, overflow: 'auto', styles: [style1, style2], - size: [600, 300] + size: [600, 300], + hideRect: true }); - renderer.renderAsImage('svg'); + + const legendEl = document.getElementById('legend'); + if (legendEl) { + renderer.render(legendEl); + } /* + const blob = new Blob([arrayBufferView], { type: 'image/png' }); + const urlCreator = window.URL; + const imageUrl = urlCreator.createObjectURL(blob); +*/ + renderer.renderAsImage('png').then((r) => { + console.log(r); + }); + console.log(renderer.renderAsImage('svg')); //renderer.renderLegend const el = document.createElement('div'); From 0f1e202bbbfdb8845b4de1f08c0b0adefd97c071 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Fri, 13 Oct 2023 08:35:40 -0400 Subject: [PATCH 15/20] Added right click export legend as a test until it works in geostyler-service --- src/app/pages/portal/portal.component.ts | 169 ++++++++++++++++++----- 1 file changed, 131 insertions(+), 38 deletions(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index fda12df09..886ba9442 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -7,7 +7,15 @@ import { ElementRef } from '@angular/core'; import { ActivatedRoute, Params } from '@angular/router'; -import { Subscription, of, BehaviorSubject, combineLatest } from 'rxjs'; +import { + Subscription, + of, + BehaviorSubject, + combineLatest, + Observable, + from, + map +} from 'rxjs'; import { debounceTime, take, pairwise, skipWhile, first } from 'rxjs/operators'; import { MatDialog, @@ -20,6 +28,7 @@ import olFeature from 'ol/Feature'; import type { default as OlGeometry } from 'ol/geom/Geometry'; import OpenLayersParser from 'geostyler-openlayers-parser'; +import { Style as GeoStylerStyle } from 'geostyler-style'; import LegendRenderer from 'geostyler-legend/dist/LegendRenderer/LegendRenderer'; import { @@ -80,7 +89,8 @@ import { moveToOlFeatures, FeatureMotion, ConfigFileToGeoDBService, - FeatureDataSource + FeatureDataSource, + GeostylerStyleService } from '@igo2/geo'; import * as olGeom from 'ol/geom'; @@ -112,6 +122,8 @@ import { MatPaginator } from '@angular/material/paginator'; import { ObjectUtils, uuid } from '@igo2/utils'; import olFormatGeoJSON from 'ol/format/GeoJSON'; +//import MarkSymbolizer from 'geostyler-style'; + @Component({ selector: 'app-portal', templateUrl: './portal.component.html', @@ -349,7 +361,8 @@ export class PortalComponent implements OnInit, OnDestroy { private storageService: StorageService, private editionWorkspaceService: EditionWorkspaceService, private directionState: DirectionState, - private configFileToGeoDBService: ConfigFileToGeoDBService + private configFileToGeoDBService: ConfigFileToGeoDBService, + private geostylerService: GeostylerStyleService ) { this.fullExtent = this.storageService.get('fullExtent') as boolean; this._toastPanelOpened = @@ -811,10 +824,9 @@ export class PortalComponent implements OnInit, OnDestroy { symbolizers: [ { kind: 'Mark', - wellKnownName: 'triangle', + wellKnownName: 'star', color: '#ff8000', strokeColor: '#000000', - rotate: 90, radius: 30 }, { @@ -828,10 +840,43 @@ export class PortalComponent implements OnInit, OnDestroy { } ] }; - - //lire tous les couches affichées; parser.readStyle().output - - const renderer = new LegendRenderer({ + const style3: any = { + name: 'Basic Circle 3', + rules: [ + { + name: 'Rule 1', + symbolizers: [ + { + kind: 'Mark', + wellKnownName: 'square', + color: '#ff8000', + strokeColor: '#000000', + rotate: 90, + radius: 30 + } + ] + } + ] + }; + const style4: any = { + name: 'Basic Circle 4', + rules: [ + { + name: 'Rule 1 gjgjgjgjgjgjgj gj gj ggj gj gj gj g jgj gj g jgj gjgjgjgjgjgj gjgjgj gjgjgjgjgjggjgj ', + symbolizers: [ + { + kind: 'Mark', + wellKnownName: 'circle', + color: '#ff8000', + strokeColor: '#000000', + rotate: 90, + radius: 30 + } + ] + } + ] + }; + /*const renderer = new LegendRenderer({ maxColumnWidth: 300, maxColumnHeight: 300, overflow: 'auto', @@ -839,42 +884,90 @@ export class PortalComponent implements OnInit, OnDestroy { size: [600, 300], hideRect: true }); - const legendEl = document.getElementById('legend'); if (legendEl) { renderer.render(legendEl); - } /* - const blob = new Blob([arrayBufferView], { type: 'image/png' }); - const urlCreator = window.URL; - const imageUrl = urlCreator.createObjectURL(blob); -*/ - renderer.renderAsImage('png').then((r) => { - console.log(r); - }); + }*/ - console.log(renderer.renderAsImage('svg')); - //renderer.renderLegend - const el = document.createElement('div'); - console.log(renderer.render(el)); + //lire tous les couches affichées; parser.readStyle().output + const type: string = 'svg'; + //alert('allok'); + //this.geostylerService + const monNouveauStyle = Object.assign([], style1); + console.log('monNouveauStyle', monNouveauStyle); + console.log('objectUtils', ObjectUtils.resolve(monNouveauStyle, 'radius')); + this.geostylerService + .getStylerStyleToLegend(type, [style1, style2, style3, style4]) + .subscribe((r) => { + console.log(r); + let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; + if (!layer) { + layer = new VectorLayer({ + title: 'Layer de points créé afin de changer le style.', + isIgoInternalLayer: true, + id: `layerWithPoints`, + zIndex: 200, + source: new FeatureDataSource(), + igoStyle: undefined, + showInLayerList: true, + exportable: true, + browsable: false, + workspace: { enabled: true }, + legendOptions: { + collapsed: false, + display: true, + html: type === 'svg' ? r : undefined, + url: type !== 'svg' ? r : undefined + } + }); + } + this.map.addLayer(layer); + }); + } - let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; - if (!layer) { - layer = new VectorLayer({ - title: 'Layer de points créé afin de changer le style.', - isIgoInternalLayer: true, - id: `layerWithPoints`, - zIndex: 200, - source: new FeatureDataSource(), - igoStyle: undefined, - showInLayerList: true, - exportable: true, - browsable: false, - workspace: { enabled: true } + public getStylerStyleToLegend( + type: string, // todo enum a faire + styles: GeoStylerStyle[], + width: number = 300, //width et height qui doivent changer pour avoir une hauteur dynamique + height: number = 300 + ): Observable { + //width = styles.length * 100; + height = styles.length * 55; + for (var index in styles) { + styles[index].rules.forEach(function (value) { + for (var symbol of value.symbolizers) { + /* if (typeof symbol === MarkSymbolizer) { + }*/ + console.log(symbol); + //symbol. + } }); } - this.map.addLayer(layer); - console.log(el.innerHTML); // Image as SVG string - return el.innerHTML; + // todo define height automatically? + //const allo: new yolo(); + const renderer = new LegendRenderer({ + maxColumnWidth: 100, + maxColumnHeight: 1000, + overflow: 'auto', + styles, + size: [width, height], + hideRect: true + }); + return from(renderer.renderAsImage('svg')).pipe( + map((r: Element) => { + const serializer = new XMLSerializer(); + const svgXmlString = serializer.serializeToString(r); + if (type === 'svg') { + return svgXmlString; + } else { + const blob = new Blob([svgXmlString], { + type: 'image/svg+xml' + }); + const urlCreator = window.URL; + return urlCreator.createObjectURL(blob); + } + }) + ); } changeStyle() { From 919f6533b9cc4a84a0a8825daf49bcf82cf3a2cc Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 30 Oct 2023 12:43:09 -0400 Subject: [PATCH 16/20] Added symbol size management for geostylerLegend. --- src/app/pages/portal/portal.component.ts | 138 +++++++++++++---------- 1 file changed, 78 insertions(+), 60 deletions(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index 886ba9442..cabeab2fe 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -28,7 +28,12 @@ import olFeature from 'ol/Feature'; import type { default as OlGeometry } from 'ol/geom/Geometry'; import OpenLayersParser from 'geostyler-openlayers-parser'; -import { Style as GeoStylerStyle } from 'geostyler-style'; +import { + Style as GeoStylerStyle, + MarkSymbolizer, + LineSymbolizer, + IconSymbolizer +} from 'geostyler-style'; import LegendRenderer from 'geostyler-legend/dist/LegendRenderer/LegendRenderer'; import { @@ -122,8 +127,6 @@ import { MatPaginator } from '@angular/material/paginator'; import { ObjectUtils, uuid } from '@igo2/utils'; import olFormatGeoJSON from 'ol/format/GeoJSON'; -//import MarkSymbolizer from 'geostyler-style'; - @Component({ selector: 'app-portal', templateUrl: './portal.component.html', @@ -862,7 +865,7 @@ export class PortalComponent implements OnInit, OnDestroy { name: 'Basic Circle 4', rules: [ { - name: 'Rule 1 gjgjgjgjgjgjgj gj gj ggj gj gj gj g jgj gj g jgj gjgjgjgjgjgj gjgjgj gjgjgjgjgjggjgj ', + name: 'Rule 1j ', symbolizers: [ { kind: 'Mark', @@ -876,53 +879,42 @@ export class PortalComponent implements OnInit, OnDestroy { } ] }; - /*const renderer = new LegendRenderer({ - maxColumnWidth: 300, - maxColumnHeight: 300, - overflow: 'auto', - styles: [style1, style2], - size: [600, 300], - hideRect: true - }); - const legendEl = document.getElementById('legend'); - if (legendEl) { - renderer.render(legendEl); - }*/ - //lire tous les couches affichées; parser.readStyle().output const type: string = 'svg'; - //alert('allok'); - //this.geostylerService const monNouveauStyle = Object.assign([], style1); console.log('monNouveauStyle', monNouveauStyle); console.log('objectUtils', ObjectUtils.resolve(monNouveauStyle, 'radius')); - this.geostylerService - .getStylerStyleToLegend(type, [style1, style2, style3, style4]) - .subscribe((r) => { - console.log(r); - let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; - if (!layer) { - layer = new VectorLayer({ - title: 'Layer de points créé afin de changer le style.', - isIgoInternalLayer: true, - id: `layerWithPoints`, - zIndex: 200, - source: new FeatureDataSource(), - igoStyle: undefined, - showInLayerList: true, - exportable: true, - browsable: false, - workspace: { enabled: true }, - legendOptions: { - collapsed: false, - display: true, - html: type === 'svg' ? r : undefined, - url: type !== 'svg' ? r : undefined - } - }); - } - this.map.addLayer(layer); - }); + // call geostyler.service with this.geostylerService + this.getStylerStyleToLegend(type, [ + style1, + style2, + style3, + style4 + ]).subscribe((r) => { + console.log(r); + let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; + if (!layer) { + layer = new VectorLayer({ + title: 'Layer de points créé afin de changer le style.', + isIgoInternalLayer: true, + id: `layerWithPoints`, + zIndex: 200, + source: new FeatureDataSource(), + igoStyle: undefined, + showInLayerList: true, + exportable: true, + browsable: false, + workspace: { enabled: true }, + legendOptions: { + collapsed: false, + display: true, + html: type === 'svg' ? r : undefined, + url: type !== 'svg' ? r : undefined + } + }); + } + this.map.addLayer(layer); + }); } public getStylerStyleToLegend( @@ -931,25 +923,14 @@ export class PortalComponent implements OnInit, OnDestroy { width: number = 300, //width et height qui doivent changer pour avoir une hauteur dynamique height: number = 300 ): Observable { - //width = styles.length * 100; + const layerDescriptors: GeoStylerStyle[] = + this.transferLayersToLegend(styles); height = styles.length * 55; - for (var index in styles) { - styles[index].rules.forEach(function (value) { - for (var symbol of value.symbolizers) { - /* if (typeof symbol === MarkSymbolizer) { - }*/ - console.log(symbol); - //symbol. - } - }); - } - // todo define height automatically? - //const allo: new yolo(); const renderer = new LegendRenderer({ maxColumnWidth: 100, maxColumnHeight: 1000, overflow: 'auto', - styles, + styles: layerDescriptors, size: [width, height], hideRect: true }); @@ -970,6 +951,43 @@ export class PortalComponent implements OnInit, OnDestroy { ); } + transferLayersToLegend(styles: GeoStylerStyle[]) { + var stylesCopy = [...styles]; + const layerDescriptorsList: GeoStylerStyle[] = []; + for (var index in stylesCopy) { + var DescriptorLayerRulesAdapted = []; + let descriptorLayerName = stylesCopy[index].name; + stylesCopy[index].rules.forEach(function (styleRule) { + var styleRuleSymbolizersAdapted = []; + styleRule.symbolizers.forEach(function (styleRuleSymbolizer) { + switch (styleRuleSymbolizer.kind) { + case 'Mark': + (styleRuleSymbolizer as MarkSymbolizer).radius = 10; + break; + case 'Line': + (styleRuleSymbolizer as LineSymbolizer).width = 3; + break; + case 'Icon': + (styleRuleSymbolizer as IconSymbolizer).size = 15; + default: + break; + } + styleRuleSymbolizersAdapted.push(styleRuleSymbolizer); + }); + DescriptorLayerRulesAdapted.push({ + name: styleRule.name, + symbolizers: styleRuleSymbolizersAdapted + }); + }); + let styleNoRadius: any = { + name: descriptorLayerName, + rules: DescriptorLayerRulesAdapted + }; + layerDescriptorsList.push(styleNoRadius); + } + return layerDescriptorsList; + } + changeStyle() { const lastLayer = this.map.layers .filter((l) => l.showInLayerList) From 2d74c7ade969fc86d7e929f51ef45177151827ec Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 30 Oct 2023 15:08:08 -0400 Subject: [PATCH 17/20] Lint --- src/app/pages/portal/portal.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index cabeab2fe..938144b23 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -920,7 +920,7 @@ export class PortalComponent implements OnInit, OnDestroy { public getStylerStyleToLegend( type: string, // todo enum a faire styles: GeoStylerStyle[], - width: number = 300, //width et height qui doivent changer pour avoir une hauteur dynamique + width: number = 300, height: number = 300 ): Observable { const layerDescriptors: GeoStylerStyle[] = From 750d316bab32a193d01116612943096e5e28cbd8 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Tue, 31 Oct 2023 09:21:44 -0400 Subject: [PATCH 18/20] Put GeostylerStyleService as comments. --- src/app/pages/portal/portal.component.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index 938144b23..b3193617c 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -94,8 +94,8 @@ import { moveToOlFeatures, FeatureMotion, ConfigFileToGeoDBService, - FeatureDataSource, - GeostylerStyleService + FeatureDataSource + //GeostylerStyleService } from '@igo2/geo'; import * as olGeom from 'ol/geom'; @@ -364,8 +364,7 @@ export class PortalComponent implements OnInit, OnDestroy { private storageService: StorageService, private editionWorkspaceService: EditionWorkspaceService, private directionState: DirectionState, - private configFileToGeoDBService: ConfigFileToGeoDBService, - private geostylerService: GeostylerStyleService + private configFileToGeoDBService: ConfigFileToGeoDBService //private geostylerService: GeostylerStyleService ) { this.fullExtent = this.storageService.get('fullExtent') as boolean; this._toastPanelOpened = @@ -792,8 +791,6 @@ export class PortalComponent implements OnInit, OnDestroy { } exportLegend() { - const layerDescriptors = []; - const style1: any = { name: 'Basic Circle', rules: [ From c5a40cc8e95c2b6f092d00aeb18f0a722ebc0738 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Mon, 15 Jan 2024 15:03:00 -0500 Subject: [PATCH 19/20] Remove management of the legendRenderer from panel.component. --- src/app/pages/portal/portal.component.ts | 154 +++++------------------ 1 file changed, 31 insertions(+), 123 deletions(-) diff --git a/src/app/pages/portal/portal.component.ts b/src/app/pages/portal/portal.component.ts index 54237ee82..e6947e9c2 100644 --- a/src/app/pages/portal/portal.component.ts +++ b/src/app/pages/portal/portal.component.ts @@ -46,9 +46,10 @@ import { EditionWorkspaceService, FEATURE, Feature, - FeatureDataSource, //GeostylerStyleService + FeatureDataSource, FeatureMotion, FeatureWorkspace, + GeostylerStyleService, GoogleLinks, IgoMap, ImageLayer, @@ -92,30 +93,9 @@ import * as olGeom from 'ol/geom'; import type { default as OlGeometry } from 'ol/geom/Geometry'; import * as olProj from 'ol/proj'; -import LegendRenderer from 'geostyler-legend/dist/LegendRenderer/LegendRenderer'; import OpenLayersParser from 'geostyler-openlayers-parser'; -import { - Style as GeoStylerStyle, - IconSymbolizer, - LineSymbolizer, - MarkSymbolizer -} from 'geostyler-style'; -import { - BehaviorSubject, - Observable, - Subscription, - combineLatest, - from, - of -} from 'rxjs'; -import { - debounceTime, - first, - map, - pairwise, - skipWhile, - take -} from 'rxjs/operators'; +import { BehaviorSubject, Subscription, combineLatest, of } from 'rxjs'; +import { debounceTime, first, pairwise, skipWhile, take } from 'rxjs/operators'; import { getAppVersion } from 'src/app/app.utils'; import { EnvironmentOptions } from 'src/environments/environnement.interface'; @@ -356,7 +336,8 @@ export class PortalComponent implements OnInit, OnDestroy { private storageService: StorageService, private editionWorkspaceService: EditionWorkspaceService, private directionState: DirectionState, - private configFileToGeoDBService: ConfigFileToGeoDBService //private geostylerService: GeostylerStyleService + private configFileToGeoDBService: ConfigFileToGeoDBService, + private geostylerService: GeostylerStyleService ) { this.handleAppConfigs(); this.storageService.set('version', getAppVersion(this.configService)); @@ -859,107 +840,34 @@ export class PortalComponent implements OnInit, OnDestroy { console.log('monNouveauStyle', monNouveauStyle); console.log('objectUtils', ObjectUtils.resolve(monNouveauStyle, 'radius')); // call geostyler.service with this.geostylerService - this.getStylerStyleToLegend(type, [ - style1, - style2, - style3, - style4 - ]).subscribe((r) => { - console.log(r); - let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; - if (!layer) { - layer = new VectorLayer({ - title: 'Layer de points créé afin de changer le style.', - isIgoInternalLayer: true, - id: `layerWithPoints`, - zIndex: 200, - source: new FeatureDataSource(), - igoStyle: undefined, - showInLayerList: true, - exportable: true, - browsable: false, - workspace: { enabled: true }, - legendOptions: { - collapsed: false, - display: true, - html: type === 'svg' ? r : undefined, - url: type !== 'svg' ? r : undefined - } - }); - } - this.map.addLayer(layer); - }); - } - - public getStylerStyleToLegend( - type: string, // todo enum a faire - styles: GeoStylerStyle[], - width: number = 300, - height: number = 300 - ): Observable { - const layerDescriptors: GeoStylerStyle[] = - this.transferLayersToLegend(styles); - height = styles.length * 55; - const renderer = new LegendRenderer({ - maxColumnWidth: 100, - maxColumnHeight: 1000, - overflow: 'auto', - styles: layerDescriptors, - size: [width, height], - hideRect: true - }); - return from(renderer.renderAsImage('svg')).pipe( - map((r: Element) => { - const serializer = new XMLSerializer(); - const svgXmlString = serializer.serializeToString(r); - if (type === 'svg') { - return svgXmlString; - } else { - const blob = new Blob([svgXmlString], { - type: 'image/svg+xml' + //this.getStylerStyleToLegend(type, [ + this.geostylerService + .getStylerStyleToLegend(type, [style1, style2, style3, style4]) + .subscribe((r) => { + console.log(r); + let layer = this.map.getLayerById('layerWithPoints') as VectorLayer; + if (!layer) { + layer = new VectorLayer({ + title: 'Layer de points créé afin de changer le style.', + isIgoInternalLayer: true, + id: `layerWithPoints`, + zIndex: 200, + source: new FeatureDataSource(), + igoStyle: undefined, + showInLayerList: true, + exportable: true, + browsable: false, + workspace: { enabled: true }, + legendOptions: { + collapsed: false, + display: true, + html: type === 'svg' ? r : undefined, + url: type !== 'svg' ? r : undefined + } }); - const urlCreator = window.URL; - return urlCreator.createObjectURL(blob); } - }) - ); - } - - transferLayersToLegend(styles: GeoStylerStyle[]) { - var stylesCopy = [...styles]; - const layerDescriptorsList: GeoStylerStyle[] = []; - for (var index in stylesCopy) { - var DescriptorLayerRulesAdapted = []; - let descriptorLayerName = stylesCopy[index].name; - stylesCopy[index].rules.forEach(function (styleRule) { - var styleRuleSymbolizersAdapted = []; - styleRule.symbolizers.forEach(function (styleRuleSymbolizer) { - switch (styleRuleSymbolizer.kind) { - case 'Mark': - (styleRuleSymbolizer as MarkSymbolizer).radius = 10; - break; - case 'Line': - (styleRuleSymbolizer as LineSymbolizer).width = 3; - break; - case 'Icon': - (styleRuleSymbolizer as IconSymbolizer).size = 15; - default: - break; - } - styleRuleSymbolizersAdapted.push(styleRuleSymbolizer); - }); - DescriptorLayerRulesAdapted.push({ - name: styleRule.name, - symbolizers: styleRuleSymbolizersAdapted - }); + this.map.addLayer(layer); }); - let styleNoRadius: any = { - name: descriptorLayerName, - rules: DescriptorLayerRulesAdapted - }; - layerDescriptorsList.push(styleNoRadius); - } - return layerDescriptorsList; } changeStyle() { From 58d4b0f77b58031d1ce5b6183b91659ceb4af149 Mon Sep 17 00:00:00 2001 From: Thierry Normand Date: Wed, 21 Feb 2024 20:36:50 -0500 Subject: [PATCH 20/20] Corrected syntax for loading the geoatylerStyles contexts --- src/contexts/_contexts.json | 2 +- src/contexts/_geostylerStyles.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/contexts/_contexts.json b/src/contexts/_contexts.json index c30dd4cc5..883435577 100644 --- a/src/contexts/_contexts.json +++ b/src/contexts/_contexts.json @@ -52,7 +52,7 @@ "title": "Geolocation" }, { - "uri": "geostylerStyles", + "uri": "_geostylerStyles", "title": "GeostylerStyles" }, { diff --git a/src/contexts/_geostylerStyles.json b/src/contexts/_geostylerStyles.json index 9d97a25a8..3968f9290 100644 --- a/src/contexts/_geostylerStyles.json +++ b/src/contexts/_geostylerStyles.json @@ -1,5 +1,5 @@ { - "uri": "geostylerStyles", + "uri": "_geostylerStyles", "base": "_base", "layers": [ {