banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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: 77

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: 59

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: 59

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)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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

 

Pied de page des forums

Powered by FluxBB