From d5910b881d6ee7eb720af45ff5dfa1d86f432a94 Mon Sep 17 00:00:00 2001 From: Manuel Frangi Date: Wed, 4 Dec 2024 09:59:56 +0100 Subject: [PATCH 1/2] =?UTF-8?q?feat(shared-reglementation)=20:=20affichage?= =?UTF-8?q?=20de=20la=20reglementation=20en=20fonction=20des=20couches=20/?= =?UTF-8?q?=20feat(shared-thematic)=20:=20s=C3=A9paration=20de=20'parcs=20?= =?UTF-8?q?nationaux'=20en=20deux=20couches=20'Coeurs=20de=20parcs=20natio?= =?UTF-8?q?naux'=20et=20'Zone=20d'adh=C3=A9sion'=20/=20supression=20de=20l?= =?UTF-8?q?a=20fonction=20'filterFeature'=20dans=20'fiche-info-feature-ser?= =?UTF-8?q?vice'=20car=20le=20filtrage=20est=20fait=20dans=20la=20requ?= =?UTF-8?q?=C3=AAte=20avec=20les=20cql=20filters?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../reglementation-view.component.html | 16 +- .../reglementation-view.component.ts | 3 +- .../models/reglementation-list.enum.ts | 200 +++++++++++++++++- .../layer-fiche-view.component.html | 5 +- .../thematic-list/thematic-list.component.ts | 9 +- .../thematic-tabs.component.html | 18 +- .../thematic-tabs/thematic-tabs.component.ts | 19 +- .../thematic-view/thematic-view.component.ts | 3 +- .../models/map-thematic-layers.enum.ts | 30 ++- .../models/thematic-list.enum.ts | 6 +- .../services/fiche-info-feature.service.ts | 29 ++- 11 files changed, 288 insertions(+), 50 deletions(-) diff --git a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html index b8e698d..a62edbb 100644 --- a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html +++ b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html @@ -2,12 +2,16 @@
-

- Accès référence réglementaire -

-

- Point de concat {{ reglementation.contact }}. -

+ @if(reglementation.referenceUrl){ +

+ Accès référence réglementaire +

+ } + @if(reglementation.contact) { +

+ Point de contact : {{ reglementation.contact }}. +

+ } } @else {

Aucune reglementation ou recommandation.

} \ No newline at end of file diff --git a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts index 656d2f5..bee7d45 100644 --- a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts +++ b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts @@ -17,9 +17,8 @@ export class ReglementationViewComponent implements OnInit { ngOnInit() { if (!this.reglementation) { - this.reglementation = REGLEMENTATION_LIST[0]; + this.reglementation = REGLEMENTATION_LIST.filter(reglement => reglement.layerName === this.layerReference)[0]; } - // todo rechercher reglementation par reference } } diff --git a/src/app/shared-reglementation/models/reglementation-list.enum.ts b/src/app/shared-reglementation/models/reglementation-list.enum.ts index 1dc7bcc..bd11f9f 100644 --- a/src/app/shared-reglementation/models/reglementation-list.enum.ts +++ b/src/app/shared-reglementation/models/reglementation-list.enum.ts @@ -3,7 +3,7 @@ import { Reglementation } from './reglementation.model'; export const REGLEMENTATION_LIST = [ new Reglementation().deserialise({ thematicName: 'Biodiversité', - layerName: 'TODO', + layerName: 'Natura 2000 Habitats', title: 'Sites Natura 2000 au titre de la Directive Habitats', description: '

Espace désigné à l\'échelle européenne pour la rareté ou la fragilité des habitats et des espèces animales et végétales qu’il abrite.

', impactReglementaire: '

Les créations de voies forestières, de places de dépôt de bois et les premiers boisements sont susceptibles d\'être soumis à une évaluation des incidences.

Elle doit également être réalisée pour tous autres travaux (notamment les coupes), s\'ils sont soumis à une autorisation administrative.

', @@ -13,12 +13,202 @@ export const REGLEMENTATION_LIST = [ }), new Reglementation().deserialise({ thematicName: 'Biodiversité', - layerName: 'TODO', - title: 'Sites Natura 2000 au titre de la Directive Habitats', - description: '

Espace désigné à l\'échelle européenne pour la rareté ou la fragilité des habitats et des espèces animales et végétales qu’il abrite.

', - impactReglementaire: '

Les créations de voies forestières, de places de dépôt de bois et les premiers boisements sont susceptibles d\'être soumis à une évaluation des incidences.

Elle doit également être réalisée pour tous autres travaux (notamment les coupes), s\'ils sont soumis à une autorisation administrative.

', + layerName: 'Natura 2000 Oiseaux', + title: 'Sites Natura 2000 au titre de la Directive Oiseaux', + description: '

Espace désigné à l\'échelle européenne pour son intérêt dans la reproduction, de migration et d\'hivernage d\'espèces d\'oiseaux.

', + impactReglementaire: '

Les créations de voies forestières, de places de dépôt de bois et les premiers boisements d’une surface supérieure à 1 ha, doivent faire l\'objet d\'une une évaluation des incidences.

Elle doit également être réalisée pour tous autres travaux (notamment les coupes), s\'ils sont soumis à une autorisation administrative.

', impactProcedure: '

L\'évaluation des incidences a pour but de déterminer si le projet peut avoir un impact significatif sur les habitats, les espèces végétales et les espèces animales ayant justifié la désignation du site Natura 2000.

', referenceUrl: 'https://www.natura2000.fr/', contact: 'Direction départementale des territoires' }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Coeurs de parcs nationaux', + title: 'Coeurs de parcs nationaux', + description: '

Un parc national est un territoire reconnu comme exceptionnel par la richesse de sa biodiversité, la qualité de ses paysages et de son patrimoine culturel. Le cœur bénéficie d\'un statut de protection.

', + impactReglementaire: '

Une réglementation spécifique à chaque parc national, encadre la bonne pratique des activités humaines dans le cœur afin qu\'elles aient le moins d\'impacts possibles sur les milieux naturels et la biodiversité.

', + impactProcedure: '

La circulation, les travaux, l\'exploitation forestière sont généralement règlementés. Avant toute intervention, consulter l\'équipe du parc national.

', + referenceUrl: 'https://www.parcsnationaux.fr/fr/des-decouvertes/les-parcs-nationaux-de-france/reglementation-dans-les-parcs-nationaux-de-France', + contact: 'Parc national concerné' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Zones d\'adhésion de parcs nationaux', + title: 'Zones d\'adhésion de parcs nationaux', + description: '

Un parc national est un territoire reconnu comme exceptionnel par la richesse de sa biodiversité, la qualité de ses paysages et de son patrimoine culturel.

', + impactReglementaire: '

Sauf décision locale particulière, cette zone du Parc national n\'est pas soumise à une réglementation environnementale particulière.

', + impactProcedure: '

Ce zonage n\'implique pas de formalité particulière.

', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Arrêtés de protection de géotope', + title: 'Arrêtés de protection de géotope', + description: '

Les arrêtés de protection de géotope visent à protéger des sites géologiques.

', + impactReglementaire: '

Une règlementation spécifique à chaque espace est applicable.

', + impactProcedure: '

La gestion forestière courante n\'est généralement pas impactée si elle ne porte pas atteinte aux éléments géologiques.

', + referenceUrl: '', + contact: 'Direction départementale des territoires' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Arrêtés de protection d\'habitats naturels', + title: 'Arrêtés de protection d\'habitats naturels', + description: '

Les APHN sont des arrêtés visant à préserver des habitats naturels présentant un intérêt particulier à titre scientifique, de rôle essentiel dans l\'écosystème ou de la préservation du patrimoine naturel.

', + impactReglementaire: '

Une règlementation spécifique à chaque espace est applicable.

', + impactProcedure: '

Les activités forestières peuvent être règlementées. La présence d"habitats naturels patrimoniaux nécessite une grande prudence avant tous travaux ou exploitation.

', + referenceUrl: '', + contact: 'Direction départementale des territoires' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Biotopes d\'espèces protégées', + title: 'Arrêtés de protection de biotope', + description: '

Les arrêtés de protection de biotope visent à protéger les habitats nécessaires à l\'alimentation, à la reproduction, au repos ou à la survie d\'espèces protégées. Il concernent souvent des milieux très remarques, sur des surfaces limitées.

', + impactReglementaire: '

Une règlementation spécifique à chaque espace est applicable.

', + impactProcedure: '

Les activités forestières peuvent être règlementées. La présence probable d\'espèces protégées nécessite une grande prudence avant tous travaux ou exploitation.

', + referenceUrl: '', + contact: 'Direction départementale des territoires' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Réserves Naturelles de Corse', + title: 'Réserves naturelles de Corse', + description: '

Une réserve naturelle est un site naturel fragile protégé par une réglementation adaptée et une gestion locale planifiée et concertée.

', + impactReglementaire: '

Les travaux, la circulation et les activités forestières peuvent faire l\'objet d\'une règlementation, adaptée à chaque réserve.

', + impactProcedure: '', + referenceUrl: '', + contact: 'Le gestionnaire de la réserve' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Réserves naturelles nationales', + title: 'Réserves naturelles nationales', + description: '

Une réserve naturelle est un site naturel fragile protégé par une réglementation adaptée et une gestion locale planifiée et concertée.

', + impactReglementaire: '

Les travaux, la circulation et les activités forestières peuvent faire l\'objet d\'une règlementation, adaptée à chaque réserve.

', + impactProcedure: '', + referenceUrl: '', + contact: 'Le gestionnaire de la réserve' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Réserves naturelles régionales', + title: 'Réserves naturelles régionales', + description: '

Une réserve naturelle est un site naturel fragile protégé par une réglementation adaptée et une gestion locale planifiée et concertée.

', + impactReglementaire: '

Les travaux, la circulation et les activités forestières peuvent faire l\'objet d\'une règlementation, adaptée à chaque réserve.

', + impactProcedure: '', + referenceUrl: '', + contact: 'Le gestionnaire de la réserve' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Périmètres de protection de réserves naturelles', + title: 'Périmètres de protection de réserves naturelles', + description: '', + impactReglementaire: '', + impactProcedure: '', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Arrêtés listes de sites d\'intérêt géologique', + title: 'Arrêtés de listes de sites d\'intérêt géologique', + description: '', + impactReglementaire: '', + impactProcedure: '', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Réserves Biologiques', + title: 'Réserves biologiques', + description: '', + impactReglementaire: '', + impactProcedure: '', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Réserves nationales de chasse et de faune sauvage', + title: 'Réserves nationales de chasse et de faune sauvage', + description: '', + impactReglementaire: '', + impactProcedure: '', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Parcs naturels régionaux', + title: 'Parcs naturels régionaux', + description: '

Territoire créé pour protéger et mettre en valeur de grands espaces ruraux habités, notamment les richesses naturelles, culturelles et humaines (traditions populaires, savoir-faire techniques).

', + impactReglementaire: '

Le droit commun est le même dans le territoire du parc naturel régional qu\'ailleurs. Il n\'a pas d\'impact règlementaire spécifique pour les travaux forestiers.

', + impactProcedure: '

Ce zonage n\'implique pas de formalité particulière.

', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Conservatoire du littoral - sites sous responsabilité du conservatoire', + title: 'Conservatoire du littoral - sites sous responsabilité du conservatoire', + description: '', + impactReglementaire: '', + impactProcedure: '', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'Terrains des conservatoires d\'espaces naturels', + title: 'Conservatoires d\'espaces naturels', + description: '', + impactReglementaire: '', + impactProcedure: '', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'ZNIEFF1', + title: 'Zones naturelles d\'interet ecologique faunistique et floristique (ZNIEFF) type I', + description: '

Zone présentant une richesse biologique intéressante (faune et flore), reconnue d\'un grand intérêt pour le fonctionnement biologique local.

', + impactReglementaire: '

Inventaire informatif ne générant pas de contraintes règlementaires. Cependant ce zonage traduit la possible présence d\'espèces animales et végétales remarquables pouvant faire l\'objet d\'un dispositif de protection.

', + impactProcedure: '

A prendre en compte lors de la planification de la gestion ou en cas de réalisation de travaux, notamment si le terrain présente des milieux spécifiques comme des tourbières, des mares, des cours d\'eau etc.

', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Biodiversité', + layerName: 'ZNIEFF2', + title: 'Zones naturelles d\'interet ecologique faunistique et floristique (ZNIEFF) type II', + description: '

Zone présentant des ensembles naturels et paysagers avec une cohésion élevée et plus riches que les milieux alentours.

', + impactReglementaire: '

Inventaire informatif ne générant pas de contraintes règlementaires. Cependant ce zonage traduit la possible présence d\'espèces animales et végétales remarquables pouvant faire l\'objet d\'un dispositif de protection.

', + impactProcedure: '

A prendre en compte lors de la planification de la gestion ou en cas de réalisation de travaux, notamment si le terrain présente des milieux spécifiques comme des tourbières, des mares, des cours d\'eau etc.

', + referenceUrl: '', + contact: '' + }), + new Reglementation().deserialise({ + thematicName: 'Patrimoine', + layerName: 'Monuments historiques', + title: 'Protection des abords des monuments historiques ( Périmètre délimité des abords ou abords de 500m)', + description: '

Un monument historique classé est un immeuble protégé pour son intérêt notamment du point de vue artistique, historique, scientifique,légendaire ou pittoresque. Aux abords de ce monument, un périmètre de protecion est destiné à garantir le caractère paysager des abords.

', + impactReglementaire: '

Les travaux susceptibles de modifier le paysage aux abords des monuments historiques sont sous à autorisation. C\'est le cas notamment des coupes ou des créations de voiries forestière.

', + impactProcedure: '

Si les travaux se situent également en site classé ou nécessitent une autre autorisation (se rapprocher de la DDT), l\'architecte des bâtiments de France sera consulté par le service qui instruira l\'autorisation.

Sinon, une demande d\'autorisation est à déposer en mairie. Il ets recommandé de contacter auparant l\'UDAP pour avoir son avis.

', + referenceUrl: '', + contact: 'UDAP du département' + }), + new Reglementation().deserialise({ + thematicName: 'Patrimoine', + layerName: 'Espaces boisés classés', + title: 'Espaces boisés classés au PLU au titre du L.113-1 CU', + description: '

Les espaces boisés classés à conserver, à protéger ou à créer sont définis dans le plan local d\'urbanisme de la commune. Ils sont destinés à maintenir le paysage, réaliser des coulées vertes, protéger contre les risques naturels etc.

', + impactReglementaire: '

Les terrains ne peuvent changer d\'affectation : ils doivent rester forestier. Il ne peut donc y avoir de défrichement. Les coupes qui ne sont pas prévues dans un plan simple de gestion doivent faire l\'objet d\'une déclaration préalable.

', + impactProcedure: '

La déclaration de coupe est à envoyer en mairie du lieu de la coupe, à l\'aide du formulaire Cerfa n° 13404 en cochant "Coupe et abattage d\'arbres" en page 4.

', + referenceUrl: 'https://www.service-public.fr/particuliers/vosdroits/R11646', + contact: 'Mairie de la commune de situation' + }), ]; \ No newline at end of file diff --git a/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html b/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html index a0f2d6e..b06777d 100644 --- a/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html +++ b/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html @@ -2,6 +2,8 @@

{{ layer.title }}

+ + @if (displaySituationMap) { } @@ -18,7 +20,6 @@

{{ layer.title }}

} - - +
} \ No newline at end of file diff --git a/src/app/shared-thematic/components/thematic-list/thematic-list.component.ts b/src/app/shared-thematic/components/thematic-list/thematic-list.component.ts index e607757..f06701b 100644 --- a/src/app/shared-thematic/components/thematic-list/thematic-list.component.ts +++ b/src/app/shared-thematic/components/thematic-list/thematic-list.component.ts @@ -101,8 +101,13 @@ export class ThematicListComponent { const layer = features[i].layer; switch (layer) { case 'assiette_sup_s': - if (!this.mapContextService.getActiveThematicLayers().includes({ theme: 'monument_historique', name: "assiette_sup_s" })) { - this.mapContextService.getActiveThematicLayers().push({ theme: 'monument_historique', name: "assiette_sup_s" }); + if (!this.mapContextService.getActiveThematicLayers().includes({ theme: 'patrimoine', name: "assiette_sup_s" })) { + this.mapContextService.getActiveThematicLayers().push({ theme: 'patrimoine', name: "assiette_sup_s" }); + } + break; + case 'prescription_surf': + if (!this.mapContextService.getActiveThematicLayers().includes({ theme: 'patrimoine', name: "prescription_surf" })) { + this.mapContextService.getActiveThematicLayers().push({ theme: 'patrimoine', name: "prescription_surf" }); } break; default: diff --git a/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.html b/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.html index fa97028..3f8f029 100644 --- a/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.html +++ b/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.html @@ -1,17 +1,17 @@ @for (thematicTab of thematicTabs; track $index; let first = $first) { - @if (thematicTab.active) { - + @if (thematicTab.active) { + - @if (first) { - - } @else { - - } + @if (first) { + + } @else { + + } - - } + + } } diff --git a/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.ts b/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.ts index f2796e3..ca77b67 100644 --- a/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.ts +++ b/src/app/shared-thematic/components/thematic-tabs/thematic-tabs.component.ts @@ -92,7 +92,15 @@ export class ThematicTabsComponent implements OnInit { layer.flatview = false; layer.features = []; layer.features = this.responseFeatures.filter((feature) => { - return this.parseLayerFromTechnicalName(layer.technicalName) === feature.layer; + if(this.parseLayerFromTechnicalName(layer.technicalName) === feature.layer) { + if(layer.title === 'Coeurs de parcs nationaux' && feature.zone != 'Coeur') { + return false + } else if(layer.title === 'Zones d\'adhésion de parcs nationaux' && feature.zone != 'Adhesion') { + return false + } + return true + } + return false; }); return layer; } @@ -103,8 +111,13 @@ export class ThematicTabsComponent implements OnInit { const layer = features[i].layer; switch (layer) { case 'assiette_sup_s': - if (!this.mapContextService.getActiveThematicLayers().includes({ theme: 'monument_historique', name: "assiette_sup_s" })) { - this.mapContextService.getActiveThematicLayers().push({ theme: 'monument_historique', name: "assiette_sup_s" }); + if (!this.mapContextService.getActiveThematicLayers().includes({ theme: 'patrimoine', name: "assiette_sup_s" })) { + this.mapContextService.getActiveThematicLayers().push({ theme: 'patrimoine', name: "assiette_sup_s" }); + } + break; + case 'prescription_surf': + if (!this.mapContextService.getActiveThematicLayers().includes({ theme: 'patrimoine', name: "prescription_surf" })) { + this.mapContextService.getActiveThematicLayers().push({ theme: 'patrimoine', name: "prescription_surf" }); } break; default: diff --git a/src/app/shared-thematic/components/thematic-view/thematic-view.component.ts b/src/app/shared-thematic/components/thematic-view/thematic-view.component.ts index 1295909..0ce27e7 100644 --- a/src/app/shared-thematic/components/thematic-view/thematic-view.component.ts +++ b/src/app/shared-thematic/components/thematic-view/thematic-view.component.ts @@ -13,6 +13,7 @@ export class ThematicViewComponent implements OnInit { constructor() { } - ngOnInit(): void { } + ngOnInit(): void { + } } diff --git a/src/app/shared-thematic/models/map-thematic-layers.enum.ts b/src/app/shared-thematic/models/map-thematic-layers.enum.ts index 2178794..cca3fe2 100644 --- a/src/app/shared-thematic/models/map-thematic-layers.enum.ts +++ b/src/app/shared-thematic/models/map-thematic-layers.enum.ts @@ -55,7 +55,7 @@ export const MAP_BIODIVERISTE_LAYER_GROUP = new LayerGroup({ }) }), new TileLayer({ - properties: THEMATIC_LIST.find((g) => g.name === 'biodiversite')?.layers?.find((l) => l.technicalName === 'PROTECTEDAREAS.MNHN.CDL.PARCELS:cdl'), + properties: THEMATIC_LIST.find((g) => g.name === 'biodiversite')?.layers?.find((l) => l.technicalName === 'PROTECTEDAREAS.PNR:pnr'), extent: [ -20037508.342789244, -44927335.42709704, @@ -298,7 +298,7 @@ export const MAP_BIODIVERISTE_LAYER_GROUP = new LayerGroup({ }) }), new TileLayer({ - properties: THEMATIC_LIST.find((g) => g.name === 'biodiversite')?.layers?.find((l) => l.technicalName === 'PROTECTEDAREAS.PN:pn'), + properties: THEMATIC_LIST.find((g) => g.name === 'biodiversite')?.layers?.find((l) => l.technicalName === 'PROTECTEDAREAS.PN:pn' && l.title === 'Coeurs de parcs nationaux'), extent: [ -20037508.342789244, -44927335.42709704, @@ -315,7 +315,31 @@ export const MAP_BIODIVERISTE_LAYER_GROUP = new LayerGroup({ params: { 'LAYERS': 'PROTECTEDAREAS.PN', 'FORMAT': 'image/png', - 'VERSION': '1.3.0' + 'VERSION': '1.3.0', + 'cql_filter': "zone = 'Coeur'" + }, + }) + }), + new TileLayer({ + properties: THEMATIC_LIST.find((g) => g.name === 'biodiversite')?.layers?.find((l) => l.technicalName === 'PROTECTEDAREAS.PN:pn' && l.title === 'Zones d\'adhésion de parcs nationaux'), + extent: [ + -20037508.342789244, + -44927335.42709704, + 20037508.342789244, + 44927335.42709663 + ], + minResolution: 0, + maxResolution: 156543.03392804097, + source: new TileWMS({ + url: 'https://data.geopf.fr/wms-r/ows?', + projection: 'EPSG:3857', + attributions: [], + crossOrigin: 'anonymous', + params: { + 'LAYERS': 'PROTECTEDAREAS.PN', + 'FORMAT': 'image/png', + 'VERSION': '1.3.0', + 'cql_filter': "zone = 'Adhesion'" }, }) }), diff --git a/src/app/shared-thematic/models/thematic-list.enum.ts b/src/app/shared-thematic/models/thematic-list.enum.ts index b64bbc4..6e6a8f7 100644 --- a/src/app/shared-thematic/models/thematic-list.enum.ts +++ b/src/app/shared-thematic/models/thematic-list.enum.ts @@ -66,7 +66,11 @@ export const THEMATIC_LIST = [ group: 'biodiversite', technicalName: 'PROTECTEDAREAS.APG:apg' }, { - title: 'Parcs Nationaux', + title: 'Coeurs de parcs nationaux', + group: 'biodiversite', + technicalName: 'PROTECTEDAREAS.PN:pn' + }, { + title: 'Zones d\'adhésion de parcs nationaux', group: 'biodiversite', technicalName: 'PROTECTEDAREAS.PN:pn' }, { diff --git a/src/app/shared-thematic/services/fiche-info-feature.service.ts b/src/app/shared-thematic/services/fiche-info-feature.service.ts index 993aac9..d0e8101 100644 --- a/src/app/shared-thematic/services/fiche-info-feature.service.ts +++ b/src/app/shared-thematic/services/fiche-info-feature.service.ts @@ -48,8 +48,7 @@ export class ThematicFeatureService { return this.geoplateformeWfsService.getFeatures(request).pipe( map((response) => { const features = response.features || []; - return features.map((feature: any) => this.parseFeature(feature)) - .filter((feature: any) => this.filterFeature(feature)); + return features.map((feature: any) => this.parseFeature(feature)); }) ) }); @@ -77,6 +76,14 @@ export class ThematicFeatureService { request.filterByAttribute('typeass', 'Périmètre des abords'); } + if(layer.title === 'Coeurs de parcs nationaux') { + request.filterByAttribute('zone', 'Coeur'); + } + + if(layer.title === 'Zones d\'adhésion de parcs nationaux') { + request.filterByAttribute('zone', 'Adhesion'); + } + if(layer.title === 'Espaces boisés classés') { request.filterByAttribute('typepsc', '01'); request.filterByAttributeInValues('stypepsc', ['00', '01', '02', '03']); @@ -96,8 +103,9 @@ export class ThematicFeatureService { const layer = this.parseLayerFromId(id); const properties = feature.properties; let link; + let zone = properties['zone'] ||''; if (properties['partition'] && properties['gpu_doc_id'] && properties['fichier'] || properties['nomfic']) { - let fichier = properties['ficier']?properties['ficier']:properties['nomfic']; + let fichier = properties['fichier']?properties['fichier']:properties['nomfic']; link = `${environment.geoportailUrbanismeDocumentsUrl}/${properties['partition']}/${properties['gpu_doc_id']}/${fichier}`; } else { link = properties.url; @@ -107,23 +115,12 @@ export class ThematicFeatureService { id: id, layer: layer, name: name, - link: link + link: link, + zone: zone }); return newFeature; } - /** - * Cas particuliers selon les couches, pour les AC1 'Monuments historique' on ne garde que les abords - * @param feature - * @returns boolean - */ - private filterFeature(feature: any): boolean { - if (feature.suptype === 'ac1' && feature.typeass !== 'Périmètre des abords') { - return false; - } - return true; - } - private parseLayerFromId(id: string) { return id.split('.')[0]; From 073f85c30992b6d560c8952f35915092f3d102fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Bouch=C3=A9?= Date: Mon, 9 Dec 2024 13:47:06 +0000 Subject: [PATCH 2/2] feat(app): revue de code --- .../reglementation-view.component.html | 23 +++++++++++-------- .../reglementation-view.component.ts | 4 ++-- .../layer-fiche-view.component.html | 9 ++++++-- .../layer-fiche-view.component.ts | 5 ++++ 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html index a62edbb..8ce8bb6 100644 --- a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html +++ b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.html @@ -1,17 +1,20 @@ @if (reglementation) { +
- @if(reglementation.referenceUrl){ -

- Accès référence réglementaire -

- } - @if(reglementation.contact) { -

- Point de contact : {{ reglementation.contact }}. -

- } + +@if(reglementation.referenceUrl){ +

+ Consulter la référence réglementaire +

+} +@if(reglementation.contact) { +

+ Pour vos procédures vueillez contacter {{ reglementation.contact }}. +

+} + } @else {

Aucune reglementation ou recommandation.

} \ No newline at end of file diff --git a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts index bee7d45..03846fb 100644 --- a/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts +++ b/src/app/shared-reglementation/components/reglementation-view/reglementation-view.component.ts @@ -13,11 +13,11 @@ export class ReglementationViewComponent implements OnInit { @Input() reglementation?: Reglementation; - constructor() {} + constructor() { } ngOnInit() { if (!this.reglementation) { - this.reglementation = REGLEMENTATION_LIST.filter(reglement => reglement.layerName === this.layerReference)[0]; + this.reglementation = REGLEMENTATION_LIST.find(reglement => reglement.layerName === this.layerReference); } } diff --git a/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html b/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html index b06777d..dbee138 100644 --- a/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html +++ b/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.html @@ -5,7 +5,7 @@

{{ layer.title }}

@if (displaySituationMap) { - + } -
+ + } \ No newline at end of file diff --git a/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.ts b/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.ts index 558c4b9..3b9824d 100644 --- a/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.ts +++ b/src/app/shared-thematic/components/layer-fiche-view/layer-fiche-view.component.ts @@ -21,6 +21,11 @@ export class LayerInfoViewComponent implements OnChanges { this.prepareMap(); } + openTab(link: string) { + const windowReference: any = window; + windowReference.open(link, '_blank').focus(); + } + private prepareMap() { if (this.layer && this.displaySituationMap) { this.map = this.layer.technicalName;