Message posté par : Nicolas Ribot
----------------------------------------
Bonjour,
L'union ou union all est obligatoire dans une CTE recursive, c'est comme ca qu'a chaque itération, le résultat précédent peut etre ajouté au résultat courant.
Plusieurs erreurs dans votre code:
• la cte déclare 3 champs alors que votre select en liste 5: les champs déclarés dans la cte doivent correspondre aux champs des select de la CTE (vous pouvez omettre la déclaration des champs dans la cte aussi)
• il manque une virgule avant le dernier champ du premier select (t.pollu_19).
• il manque une condition de stop je pense dans la partie UNION de la CTE: sans cela, la recursion ne s'arrete jamais.
La logique de ce type de CTE n'est pas facile a comprendre je trouve: essayez sur un exemple simple (peu de lignes dans la table de départ) pour vous familiariser avec ce concept de récursion. (la doc donne qq exemples, avec notamment la gestion des conditions de stop)
Nicolas
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=345961#p345961
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Lison94
----------------------------------------
Bonjour à tous,
J'ai crée une BD postgis que j'utilise sur qgis. J'y ai notamment importer des projets QGIS. Je souhaite que d'autres personnes aient accès à la lecture de ses données via postgis sur qgis.
Comment procéder ? En sachant que nous travaillions sur la même connexion. Faut-il modifier le fichier pg_hba.conf ? Ensuite faut-il modifier les roles et users dans pgadmin ?
Les information que j'ai pu trouver ne spécifient pas si il faut faire cette double modification.
Avez vous des idées ou ressources explicatives ?
Merci par avance.
Lison
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=340676#p340676
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Theos2000
----------------------------------------
Bonjour,
J'ai souhaité me replonger dans un travail effectué sur Pg_routing il y a 2 ans. Or aprés plusieurs sauvegardes et restaurations de cette base lorsque je lance mes requetes avec PG_routing ca me dit : "la fonction pgr_drivingdistance(unknown, integer, numeric, boolean, boolean) n'existe pas....."
Est ce que quelqu'un a déja vu ca ? j'ai vérifié que le shéma topology et que les couches n'avaient pas été modifié et que les couches mobilisés pour le calcul d'isochrone existaient bien, ce qui est le cas...
Du coup je comprend pas trop pourquoi un tel message....
Merci
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=334908#p334908
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : neskuik01
----------------------------------------
Bonjour,
J'ai une requête lourde (certains savent déjà laquelle ^^), ou j'additionne les valeurs au fil de l'eau. Sur un très faible volume de données (30 écritures) celle ci fonctionne, en revanche lorsque je passe sur un volume plus conséquent (11 000 enregistrements) j'ai systématiquement un échec d'écriture.
Je me suis rapproché du SI afin de voir les capacités allouées à la base et augmenter les ressources.
J'ai fait :
* vacuum analyse & index sur les données
* passé de 2 go à 8 go la RAM,
* modifié les paramètres de cache et mémoire de travail de postgres.
et rebelotte message d'erreur. J'ai du coup rapatrier les données sur ma base local (j'ai plus d'espace disque disponible), re-éxécuter la requête, et la ca tourne beaucoup plus longtemps mais vient un moment ou l'intégralité de l'espace disque est saturé et j'en arrive au même point.
Je suis entrain de faire un test en faisant sur un échantillon plus gros en ajoutant une limite => "select * from (with recursive ...) as tab limit 10;" mais pareil ca mouline dans le vide ..
La question que je me pose, est-ce-qu'augmenter encore plus la ram sur le serveur serait utile ? y'aurait-il un bridage interne à la base qui fait que la requête ne passe pas ?
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=346492#p346492
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : image95
----------------------------------------
Bonjour,
Avec Postgis, j'ai une couche de polygones trames bleue A à couverture nationale.
Je souhaite simplement la limiter selon l'emprise d'une autre table de polygones B.
Je souhaite qu'en sortie toutes les geometries de A qui touchent B soient conservées dans leur intégralité, au delà du périmètre commun aux deux tables A et B. Je ne veux donc pas d' un découpage.
Pourriez vous me dire comment faire ?
J'avais fait celà mais cette requete me decoupe les geometries :
CREATE table trame_bleue_AOI_usefull_only_s as (
SELECT n_srce_cours_eau_s_000.*,
st_intersection(n_srce_cours_eau_s_000.geom, masque_temp.geom) AS geom_intersect
FROM inpn.n_srce_cours_eau_s_000,
inpn.masque_temp
WHERE st_intersects(n_srce_cours_eau_s_000.geom, masque_temp.geom));
Merci.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=346478#p346478
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : preliator
----------------------------------------
Bonjour,
Disposant d'une couche multilinestring représentant les routes d'un département, je souhaiterais couper cette couche en lignes de 500m.
Voici un aperçu de ma couche de routes : https://zupimages.net/viewer.php?id=20/16/eh9e.png
Après quelques recherche sur internet, je suis parti sur cette démarche :
- Regrouper ma couche de route en un seul bloc (j'ai trouvé cela cohérent car la couche de base est constitués de plusieurs lignes de tailles variables)
- Transformer ce bloc en linestring pour la requête suivante
- Créer des points tous les 500m le long de ma linestring avec st_lineinterpolatepoints (pas possible de créer les points sur ma couche regroupée, car cette fonction n'accepte que du linestring)
- Couper la couche regroupée sur cette couche de points.
-----------------
Code :
-- REGROUPER MA COUCHE DE ROUTE EN UN SEUL BLOC MULTILINESTRING
drop table if exists ligne_regroup;
create table ligne_regroup as
select St_linemerge(ST_Union(geom)) as geom
from public.route_echantillon;
-- TRANSFORMER LE BLOC EN LINESTRING
drop table if exists ligne_regroup_linestring;
CREATE TABLE ligne_regroup_linestring AS
SELECT (ST_Dump(ligne_regroup.geom)).geom::Geometry(LineString,2154) AS geom
FROM ligne_regroup;
-- CREER UN IDENTIFIANT UNIQUE SUR LA LINESTRING
alter table ligne_regroup_linestring add column id serial;
-- CREER LES POINT TOUS LES 500 METRES
drop table if exists point_500;
create table point_500 as
with tmp as(
select *
from ligne_regroup_linestring
where st_length(ligne_regroup_linestring.geom) > 500)
SELECT id, st_lineinterpolatepoints((tmp.geom),500/st_length(tmp.geom)) as geom
from tmp;
-- ON COUPE LA ROUTE REGROUPEE SUR LES POINTS
drop table if exists route_cut_500_metres;
create table route_cut_500_metres as
select ST_SNAP((ST_DUMP(st_difference(ligne_regroup.geom,point))).geom,all_point,0.1) as geom
from
(select ST_Multi(ST_Union(st_expand(point_500.geom, 0.05))) as point from point_500 ) as t1,
ligne_regroup,(select ST_MULTI(ST_COLLECT(point_500.geom))as all_point from point_500) as t2;
-----------------
Malheureusement, j'obtiens des résultats aberrants. Les lignes semblent bien se découper, mais il manque de nombreuses lignes.
Comme on peut voir sur l'exemple suivant : https://zupimages.net/viewer.php?id=20/16/oaem.png
En vert : ma couche de route regroupée (ligne_regroup)
En rouge : le résultat de "route_cut_500_metres"
Les points : Résultat de la requête qui me crée des points tous les 500 mètres.
Merci.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=332169#p332169
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : preliator
----------------------------------------
Bonjour,
Je dispose d'une couche de lignes de 3 entités qui s'intersectent.
https://zupimages.net/viewer.php?id=21/37/67j7.jpg
Je souhaiterais extraire les parties de lignes qui s'intersectent, et renseigner cette information d'auto-intersection dans une colonne (1 si le troncon intersecte d'autres lignes, 0 sinon par exemple).
L'objectif, c'est de transférer par la suite cette couche sur QGis et appliquer un décallage dans le style des couches extraites pour voir les zones où plusieurs lignes se croisent. Voici un exemple que j'avais réalisé sur des lignes très simples.
https://zupimages.net/viewer.php?id=21/37/yimr.jpg
Est-il possible de faire cela sur PostGis ? Je pose en pièce jointe l'exemple des lignes.
Merci.
----------------------------------------
Ce message est accompagné de fichiers, pour les télécharger, suivre le lien ci-dessous.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=346378#p346378
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : Marie10634
----------------------------------------
Bonjour à tous,
J'ai pas mal épluché les forums, mais je vous avoue ne pas arriver à transposer ce que j'ai pu lire à ma problématique .
Je travaille sous postgres 12.
J'ai trois tables:
table des zones t_zone
id_zone nom_zone
1 nom_zone1
2 nom_zone2
table des données date1 t_donnee1
id_donnee1 nom_zone valeur_donnee1 employe
1 nom_zone1 1 A
2 nom_zone1 2 B
3 nom_zone2 1 B
4 nom_zone2 2 A
table des données date2 t_donnee2
id_donnee2 nom_zone valeur_donnee2 employe
1 nom_zone1 1 B
2 nom_zone1 2 A
3 nom_zone2 1 A
4 nom_zone2 2 B
Je souhaiterai comme résultat
id_zone nom_zone v_donnee1 = 1 e_donne1 = 1 v_donne1 = 2 e_donne1 = 2 v_donnee2 = 1 e_donne2 = 1 v_donne2 = 2 e_donne2 = 2
1 nom_zone1 1 A 2 B 1 B 2 A
2 nom_zone2 1 B 2 A 1 A 2 B
J'ai essayé ce type de requêtes:
me multiplie autant de ligne que de valeurs possibles entre t_zone, t_donnee1 et t_donne2 (dans cet exemple 2^3)
-----------------
Code :
SELECT
t_zone.id_zone,
t_zone.nom_zone,
t_donne1.valeur_donne1,
t_donne1.employe,
t_donne2.valeur_donne2,
t_donne2.employe
FROM t_zone
LEFT JOIN t_donne1 ON t_zone.nom_zone = t_donne1.nom_zone
LEFT JOIN t_donne2 ON t_zone.nom_zone = t_donne2.nom_zone
-----------------
-----------------
Code :
SELECT
t_zone.id_zone,
t_zone.nom_zone,
t_donne1.valeur_donne1,
t_donne1.employe,
t_donne2.valeur_donne2,
t_donne2.employe
FROM t_zone
LEFT JOIN
(SELECT DISTINCT t_donne1.valeur_donne1, t_donne1.employe
FROM t_donne1
GROUP BY t_donne1.valeur_donne1, t_donne1.employe) t_donne1
ON t_zone.nom_zone = t_donne1.nom_zone
LEFT JOIN
(SELECT DISTINCT t_donne2.valeur_donne2, t_donne2.employe
FROM t_donne2
GROUP BY t_donne2.valeur_donne2, t_donne2.employe) t_donne2
ON t_zone.nom_zone = t_donne2.nom_zone
-----------------
me met un code erreur 21000 plus d'une ligne renvoyée par une sous-requête
-----------------
Code :
select
t_zone.id_zone,
t_zone.nom_zone,
(select t_donne1.valeur_donne1
from t_donne1
where t_zone.nom_zone = t_donne1.nom_zone) t_donne1_valeur_donne1,
(select t_donne1.employe
from t_donne1
where t_zone.nom_zone = t_donne1.nom_zone) t_donne1_employe,
(select t_donne2.valeur_donne2
from t_donne2
where t_zone.nom_zone = t_donne2.nom_zone) t_donne2_valeur_donne2,
(select t_donne2.employe
from t_donne2
where t_zone.nom_zone = t_donne2.nom_zone) t_donne2_employe
from t_zone
-----------------
Je tourne un peu (beaucoup) en rond et un peu d'aide m'éclairerait graaaaandement !
D'avance merci pour votre retour!
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=346371#p346371
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net
Message posté par : neskuik01
----------------------------------------
Bonjour,
Je cherche à déterminer si mes buffers s'intersectent et si oui, si la valeur du champs "année" est inférieure d'un an ou supérieur d'un an.
-----------------
Code :
UPDATE anthro.tmp_buf_500m
SET recurrence = case when St_intersects(ST_Buffer(geom, 50), (select geom from anthro.tmp_buf_500m limit 1 ))
AND (select an_obs from anthro.tmp_act_orp_buf_500m limit 1) BETWEEN an_obs-1 AND an_obs+1 THEN 1 ELSE 0 end;
-----------------
Mais le résultat n'est pas cohérent.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=346289#p346289
Pour y répondre : geobd(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net