Pages: 1
- Sujet précédent - Lizmap : lizmap_search : recherche dans plusieurs couches - Sujet suivant
#1 Wed 08 November 2023 11:13
- Renaud_NM
- Participant actif
- Date d'inscription: 13 Sep 2019
- Messages: 84
Lizmap : lizmap_search : recherche dans plusieurs couches
Bonjour,
J'utilise actuellement la fonction "lizmap_search" (https://docs.lizmap.com/current/en/publ … sql-search) pour la recherche cadastrale.
Est-il possible de faire évoluer ce principe de recherche pour plusieurs couches ? cette solution est proposée dans la configuration lizmap client dans QGis, mais je ne trouve aucun exemple...
En vous remerciant par avance pour votre aide.
Hors ligne
#2 Fri 10 November 2023 14:08
- nworr
- Participant actif
- Date d'inscription: 10 Apr 2014
- Messages: 74
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
Oui , il est possible de faire des unions SQL entre plusieurs tables au sein d'une vue "lizmap_search" cf exemple dans la doc
https://docs.lizmap.com/current/fr/publ … le-or-view
Hors ligne
#3 Fri 10 November 2023 16:46
- Renaud_NM
- Participant actif
- Date d'inscription: 13 Sep 2019
- Messages: 84
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
Merci pour votre réponse.
je ne souhaite pas faire une union entre plusieurs tables mais faire une recherche sur une parcelle, un nom d'entreprise... qui non pas de relation entre eux.
Hors ligne
#4 Fri 10 November 2023 17:39
- Al3+
- Participant actif
- Lieu: Fécamp
- Date d'inscription: 5 Sep 2005
- Messages: 57
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
Bonjour Renaud_NM,
Le principe est d'aggréger dans une seule vue matérialisée "lizmap_search " toutes vos recherches prédéfinies.
C'est donc bien une union qu'il faut faire comm eindiqué dans la doc :
Code:
SELECT TABLE_1 UNION ALL SELECT TABLE_2 UNION ALL SELECT TABLE_N
J'ai fait la même chose pour la recherche de parcelles, d'indices de cavités, d'emplacements réservés et tout ça n'a pas de lien logique entre eux.
Hors ligne
#5 Mon 13 November 2023 11:42
- Renaud_NM
- Participant actif
- Date d'inscription: 13 Sep 2019
- Messages: 84
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
Bonjour
Merci pour votre explication, je comprends mieux.
Par contre mon code ne fonctionne pas complètement. Avec le code suivant, je trouve les communes et parcelles mais pas le reste.
j'ai ajouté "Lizmap_Cadastre_Edigeo", "Lizmap_Exploit_industries_assimiles" et public dans "profiles.ini.php" comme ceci :
search_path=public,Lizmap_Cadastre_Edigeo,Lizmap_Exploit_industries_assimiles
Code:
DROP MATERIALIZED VIEW IF EXISTS lizmap_search; CREATE MATERIALIZED VIEW public.lizmap_search TABLESPACE pg_default AS SELECT 'Communes'::text AS item_layer, concat(geo_commune.geo_commune, ' - ', geo_commune.tex2) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, geo_commune.geom FROM "Lizmap_Cadastre_Edigeo".geo_commune UNION ALL SELECT 'Parcelles'::text AS item_layer, concat(parcelle_info.idu, ' - ', parcelle_info.nomcommune) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, parcelle_info.geom FROM "Lizmap_Cadastre_Edigeo".parcelle_info UNION ALL SELECT 'SIRET'::integer AS item_layer, concat("SIRET", ' - ', "DENOMINATION", ' - ',"COMMUNE") AS item_label, NULL::text AS item_filter, NULL::text AS item_project, wkb_geometry FROM "Lizmap_Exploit_industries_assimiles"."Ets_CANM_092021" UNION ALL SELECT 'DENOMINATION'::text AS item_layer, concat("SIRET", ' - ', "DENOMINATION", ' - ',"COMMUNE") AS item_label, NULL::text AS item_filter, NULL::text AS item_project, wkb_geometry FROM "Lizmap_Exploit_industries_assimiles"."Ets_CANM_092021" UNION ALL SELECT 'idopera'::text AS item_layer, concat("idopera", ' - ', "titre") AS item_label, NULL::text AS item_filter, NULL::text AS item_project, wkb_geometry FROM "public"."zones_travaux" ; DROP INDEX IF EXISTS lizmap_search_idx; CREATE INDEX lizmap_search_idx ON public.lizmap_search USING gin (f_unaccent(item_label) gin_trgm_ops); REFRESH MATERIALIZED VIEW lizmap_search;
Merci pour votre aide.
Hors ligne
#6 Mon 13 November 2023 12:03
- Renaud_NM
- Participant actif
- Date d'inscription: 13 Sep 2019
- Messages: 84
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
j'ai essayé de remplacer "wkb_geometry" par :
ST_Force2D(ST_Envelope(wkb_geometry)) AS geom
puis dans un second temps par :
ST_Envelope(wkb_geometry) AS geom
et cela ne fonctionne pas mieux.
Hors ligne
#7 Mon 13 November 2023 12:50
- Al3+
- Participant actif
- Lieu: Fécamp
- Date d'inscription: 5 Sep 2005
- Messages: 57
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
Bonjour Renaud_NM,
En effet, j'ai moi aussi utilisé la fonction ST_FORCED sur toutes mes sous-requêtes :
Code:
SELECT 'Communes CAFCL'::text AS item_layer, concat(communes_agglo_fecamp.gid, ' - ', communes_agglo_fecamp.nom) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(communes_agglo_fecamp.geom) AS geom FROM urbanisme.communes_agglo_fecamp UNION ALL SELECT 'Adresses'::text AS item_layer, concat(adr.numero, ' ', adr.rep, ' ', adr.nom_1, ' ', adr.code_post, ' ', com.nom) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(adr.geom) AS geom FROM referentiel.adr_adresse adr JOIN referentiel.admin_commune com ON adr.code_insee::text = com.insee_com::text UNION ALL SELECT 'Propriétaires'::text AS item_layer, concat(parcelle_info.code, ' - ', parcelle_info.nomcommune, ' - ', parcelle_info.proprietaire) AS item_label, 'urbanisme'::text AS item_filter, NULL::text AS item_project, st_force2d(parcelle_info.geom) AS geom FROM cadastre.parcelle_info UNION ALL SELECT 'Propriétaires'::text AS item_layer, concat(parcelle_info.code, ' - ', parcelle_info.nomcommune, ' - ', parcelle_info.proprietaire) AS item_label, 'admins'::text AS item_filter, NULL::text AS item_project, st_force2d(parcelle_info.geom) AS geom FROM cadastre.parcelle_info UNION ALL SELECT 'Parcelles'::text AS item_layer, TRIM(BOTH FROM concat(TRIM(BOTH FROM parcelle_info.nomcommune), ' - ', TRIM(BOTH FROM parcelle_info.code))) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(parcelle_info.geom) AS geom FROM cadastre.parcelle_info UNION ALL SELECT 'Emplacements Réservés'::text AS item_layer, concat('ER N°', psc.txt, ' - ', psc.commune, ' - ', psc.objet) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(psc.geom) AS geom FROM urbanisme.v_plui_presc_surf_lien psc WHERE psc.typepsc::text = '05'::text AND psc.idurba IS NOT NULL UNION ALL SELECT 'Indices de cavités'::text AS item_layer, concat('ICS ', rp.ics, ' - ', com.nom) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(rp.geom) AS geom FROM urbanisme.rics_ponctuels rp JOIN referentiel.admin_commune com ON rp.insee::text = com.insee_com::text ORDER BY 2;
A noter également, si vous êtes hébergé chez Lizmap, qu'il faut paramétrer les bénéficiaires dans l'onglet sécurité en ajoutant l'utilisateur de votre instance avec tous les droits (voir l'image ci-jointe)
Hors ligne
#8 Mon 13 November 2023 13:52
- Renaud_NM
- Participant actif
- Date d'inscription: 13 Sep 2019
- Messages: 84
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
malgré la modification du code comme ci-dessous, cela ne fonctionne pas.
quand j'excute le SQL suivant : select distinct(item_layer) from lizmap_search
j'ai ce resultat :
item_layer|
----------+
Communes |
Parcelles |
Je ne devrais pas avoir : SIRET, DENOMINATION et idopera en plus ?
===============
Code:
DROP MATERIALIZED VIEW IF EXISTS lizmap_search; CREATE MATERIALIZED VIEW public.lizmap_search TABLESPACE pg_default AS SELECT 'Communes'::text AS item_layer, concat(geo_commune.geo_commune, ' - ', geo_commune.tex2) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(geo_commune.geom) as geom FROM "Lizmap_Cadastre_Edigeo".geo_commune UNION ALL SELECT 'Parcelles'::text AS item_layer, concat(parcelle_info.idu, ' - ', parcelle_info.nomcommune) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(parcelle_info.geom) as geom FROM "Lizmap_Cadastre_Edigeo".parcelle_info UNION ALL SELECT 'SIRET'::integer AS item_layer, concat(Ets_CANM_092021.SIRET, ' - ',Ets_CANM_092021.DENOMINATION, ' - ',Ets_CANM_092021.COMMUNE) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(wkb_geometry) AS geom FROM "Lizmap_Exploit_industries_assimiles".Ets_CANM_092021 UNION ALL SELECT 'DENOMINATION'::text AS item_layer, concat(Ets_CANM_092021.SIRET, ' - ', Ets_CANM_092021.DENOMINATION, ' - ',Ets_CANM_092021.COMMUNE) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(wkb_geometry) AS geom FROM "Lizmap_Exploit_industries_assimiles".Ets_CANM_092021 UNION ALL SELECT 'idopera'::text AS item_layer, concat(zones_travaux.idopera, ' - ', zones_travaux.titre) AS item_label, NULL::text AS item_filter, NULL::text AS item_project, st_force2d(wkb_geometry) AS geom FROM "public".zones_travaux ; DROP INDEX IF EXISTS lizmap_search_idx; CREATE INDEX lizmap_search_idx ON public.lizmap_search USING gin (f_unaccent(item_label) gin_trgm_ops); REFRESH MATERIALIZED VIEW lizmap_search;
Hors ligne
#9 Mon 13 November 2023 14:47
- Renaud_NM
- Participant actif
- Date d'inscription: 13 Sep 2019
- Messages: 84
Re: Lizmap : lizmap_search : recherche dans plusieurs couches
Apres avoir tout supprimé et réexecuté le code SQL cela fonctionne:
DROP MATERIALIZED VIEW IF EXISTS lizmap_search;
DROP INDEX IF EXISTS lizmap_search_idx;
Hors ligne
Pages: 1
- Sujet précédent - Lizmap : lizmap_search : recherche dans plusieurs couches - Sujet suivant