Message posté par : neskuik01
----------------------------------------
Bonjour
je cherche à mettre à jour une colonne "an_obs" de la table t1 qui a pour type integer [] avec des valeurs provenant d'un champ "année" de la table t2 également en integer [] . Je ne souhaite mettre à jour que si il y'a un intersection entre t1 et t2 ET pour les cas ou "an_obs" n'a pas de valeur et je ne veux pas avoir de doublons.
j'ai cette requête :
-----------------
Code :
Update test.table1 t1
set an_obs = (select array_agg(a order by a) from (select distinct unnest(t1.an_obs || t2.annee))as a)
FROM test.table2 t2
where
st_intersects(t1.geom, t2.geom) and t1.surf15 >0 and t1.an_obs is null
or
st_intersects(t1.geom, t2.geom) and t1.surf20 >0 and t1.an_obs is null
;
-----------------
qui me retourne une erreur :
-----------------
Citation :
la colonne « an_obs » est de type integer[] mais l'expression est de type record[]
-----------------
Et impossible de caster en integer[]
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=350023#p350023
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 : Hippo (jerome.hippolyte(a)yahoo.fr)
----------------------------------------
Bonjour,
Je dispose de 2 couches de données, l'une contenant les centroides des communes françaises et l'autre des polygones répartis sur le territoire français.
Je souhaite créer un buffer autour du centroide d'une des communes que j'aurai sélectionnée et intersecter ce buffer avec mes polygones pour renvoyer lesquels sont dans le périmètre.
Lorsque je lance ma requête dans PgAdmin, pas de problème.
Pour autant, lorsque mon dev créé la requête en DQL dans Doctrine (Symfony), la requête retourne les polygones présents dans le buffer contenu dans les limites de la commune sélectionnée. Hors, si je veux créer un buffer de 15km, celui ci doit pouvoir s'étendre au delà des limites communales.
J'ai l'impression que dans le DQL du coup, c'est le "andWhere" qui pose alors problème.
Ma requête en SQL :
-----------------
Code :
SELECT a.lon,a.lat,a.code_insee, b.geometry
FROM public.commune a, public.polygones b
WHERE ST_Intersects(ST_Transform(ST_SetSRID(b.geometry, 4326), 2154),
ST_BUFFER(ST_Transform(ST_SetSRID(ST_Point( a.lon, a.lat), 4326), 2154),15000))
AND a.code_insee = '21231'
-----------------
La requête en DQL :
-----------------
Code :
->where('ST_Intersects(ST_Transform(ST_SetSRID(b.geometry, 4326), 2154),
ST_Buffer(ST_Transform(ST_SetSRID(ST_Point(a.lon, a.lat), 4326), 2154), :perimetre)) = true')
->andWhere('a.codeInsee = :codeInsee')
-----------------
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=349915#p349915
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 : jlavaure
----------------------------------------
Bonjour à tous,
J'ai une table sur Postgres/Postgis avec des polygones en Lambert93 (2154), je souhaiterais obtenir la longitude et la latitude du centroid de chaque polygone en WGS84 (4326).
Avez-vous des idées de requêtes ?
J'arrive d'un côté à transformer le référentiel :
-----------------
Code :
SELECT st_transform(geom,4326) from ma_table;
-----------------
De l'autre côté j'arrive à obtenir les coordonnées du centroid de chaque polygone :
-----------------
Code :
SELECT ST_X(ST_centroid(geom)), ST_Y(ST_centroid(geom)) from ma_table;
-----------------
Mais je n'arrive pas à "combiner" ces deux requêtes pour obtenir le résultat voulu.
Merci d'avance pour votre aide.
J
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=346375#p346375
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 : LAFONT40
----------------------------------------
Bonjour,
Je galère sur l'écriture d'un trigger.
J'ai des triggers dans ma base PostgreSQL/Postgis qui me permettent de mettre à jour un certain nombre de champs.
Pour ce faire j'ai 2 procédures dans le trigger :
1 fonction sur "INSERT", 1 fonction sur modification géométrique, et je souhaiterais une fonction me permettant de jouer le trigger que si le champ "nom" est modifié.
Pouvez vous m'aider ??
merci d'avance
BEGIN
--- Mise à jour par Trigger sur INSERT---
IF TG_OP = 'INSERT' THEN
UPDATE batim_batimentlocalise
SET (communeinsee,commune,groupement,departement,dernieremodifdate,dernieremodifheure) = (SELECT communeinsee,commune,groupement,departement,CURRENT_DATE,CURRENT_TIME FROM terri_commune WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), terri_commune.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (plandeploiement) = (SELECT nom FROM terri_secteurops WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie),terri_secteurops.geometrie)LIMIT 1) WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlaszoom) = (SELECT nom FROM Carroyage_200m_landes WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_200m_landes.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlascoordonnees) = (SELECT nom FROM Carroyage_foret_dptal WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_foret_dptal.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
RETURN NEW;
END IF;
--- Mise à jour par Trigger sur modification géographique---
IF ST_EQUALS(NEW.geometrie, OLD.geometrie) IS FALSE THEN
UPDATE batim_batimentlocalise
SET (communeinsee,commune,groupement,departement,dernieremodifdate,dernieremodifheure,modificateur) = (SELECT communeinsee,commune,groupement,departement,CURRENT_DATE,CURRENT_TIME,CURRENT_USER FROM terri_commune WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), terri_commune.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (plandeploiement) = (SELECT nom FROM terri_secteurops WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie),terri_secteurops.geometrie)LIMIT 1) WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlaszoom) = (SELECT nom FROM Carroyage_200m_landes WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_200m_landes.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
UPDATE batim_batimentlocalise
SET (pageatlascoordonnees) = (SELECT nom FROM Carroyage_foret_dptal WHERE ST_Within(ST_Centroid(batim_batimentlocalise.geometrie), Carroyage_foret_dptal.geometrie)LIMIT 1)WHERE fksdis40=NEW.fksdis40;
RETURN NEW;
END IF;
RETURN NEW;
END;
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=349714#p349714
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 : Solène.Cottet (so.cottet(a)live.fr)
----------------------------------------
Bonjour,
J'essaie de créer mon premier trigger sur l'interface PGAdmin.
Ma BDD possède 2 couches de polygones, observation et site. Les observations sont incluses dans des sites.
Je cherche à réaliser un trigger qui, lorsqu'une observation est ajoutée, ajoute automatiquement le nom du site dans laquelle elle se trouve, à une colonne déjà existante (nom_site, jointe précédemment).
Je tâtonne un peu car je n'ai jamais réalisé ce genre de fonction.
Voici le code que j'ai écris :
-----------------
Code :
CREATE TRIGGER update_observation BEFORE INSERT OR UPDATE ON observation
FOR EACH ROW EXECUTE PROCEDURE update_nom_site_observation()
CREATE OR REPLACE FUNCTION update_nom_site_observation()
RETURNS TRIGGER AS
BEGIN
SELECT nom_site FROM site ;
ON ST_Overlaps(observation.geom, site.geom) ;
UPDATE observation(nom_site);
END;
-----------------
Je n'arrive pas à déceler où se trouve mon erreur, qui doit être une erreur de syntaxe.
L'execution me renvoit l'erreur suivante :
ERROR: ERREUR: erreur de syntaxe sur ou près de « CREATE »
LINE 4: CREATE OR REPLACE FUNCTION update_observation()
Merci d'avance pour votre aide
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=334974#p334974
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 : Stéphane ROGER
----------------------------------------
Bonjour,
De mon côté, j'ai résolu le problème en installant la version 32bits au lieu de 64bits. J'utilise le Postgis 10.19.
Stéphane Paul
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=349366#p349366
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 : croy (cdrcroy(a)gmail.com)
----------------------------------------
Bonjour à tous,
J'essaie d'intégrer des données dans une base postgresql via un formulaire php.
J'arrive bien à intégrer des données dans UNE SEULE table via une requete INSERT INTO mais je n'arrive pas à insérer des données dans plusieurs tables reliées avec des clés étrangères via un seul formulaire :
exemple du code ci-dessous : je remplis la table geolive.prestation puis je récupère l''id_prestation pour remplir la table geolive.diagnostic. Ca fonctionne bien sous pgadmin mais ca ne fonctionne pas en php.
voici le php :
-----------------
Code :
$date_prestation = $_POST["date_prestation"];
$obs_prestation = $_POST["obs_prestation"];
$obs_conseil = $_POST["obs_conseil"];
$poids_recolte_tritu = $_POST["poids_recolte_tritu"];
$nb_litres = $_POST["nb_litres"];
$id_agent = $_POST["id_agent"];
$id_prop = $_POST["id_prop"];
$id_olivier = $_POST["id_olivier"];
$etat_sanitaire = $_POST["etat_sanitaire"];
$obs_diagnostic = $_POST["obs_diagnostic"];
$img_diag = $_POST["img_diag"];
$query = pg_query($connexion, "WITH ins1 AS
(INSERT INTO geolive.prestation (date_prestation,obs_prestation,obs_conseil,poids_recolte_tritu,nb_litres,id_agent,id_prop)
VALUES ('$date_prestation','$obs_prestation','$obs_conseil','poids_recolte_tritu','nb_litres','$id_agent','$id_prop') RETURNING id_prestation) INSERT INTO geolive.diagnostic (id_prestation, id_olivier, etat_sanitaire, obs_diagnostic, img_diag) SELECT id_prestation,'$id_olivier','$obs_diagnostic','$etat_sanitaire', '$obs_diagnostic', '$img_diag' FROM ins1;");
if ( $query ) {
echo(" La nouvelle prestation a bien été ajoutée !");
}
-----------------
Une erreur pourrait provenir du SELECT, il n'arriverait pas à aller chercher dans le formulaire pour remplir la table?
Si vous avez des pistes, je vous en remercie d'avance,
Cédric
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=348778#p348778
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 : Sylvain M.
----------------------------------------
Salut à tous :)
Je fais mes premiers pas avec Python et je tente de manipuler des données dans une base Spatialite.
Pas de souci avec la librairie sqlite3 pour gérer les données en SQL non spatial (SQLite).
Mais j'aimerais maintenant manipuler des données spatiales.
Des exemples que j'ai trouvés (ici par exemple (https://gis.stackexchange.com/questions/184850/how-to-use-spatialite-functi…) ), il faudrait charger l'extension comme ceci :
-----------------
Code :
connR = sqlite3.connect(':memory:')
connR.enable_load_extension(True)
#now we can load the extension
# depending on your OS and sqlite/spatialite version you might need to add
# '.so' (Linux) or '.dll' (Windows) to the extension name
#mod_spatialite (recommended)
connR.execute('SELECT load_extension("mod_spatialite")')
connR.execute('SELECT InitSpatialMetaData(1);')
# libspatialite
connR.execute('SELECT load_extension("libspatialite")')
connR.execute('SELECT InitSpatialMetaData();')
-----------------
Mais j'obtiens ce message d'erreur :
-----------------
Code :
connR.execute('SELECT load_extension("mod_spatialite")')
sqlite3.OperationalError: Le module spécifié est introuvable.
-----------------
(que ce soit avec #mod_spatialite ou # libspatialite )
J'ai bien vu cet échange (https://stackoverflow.com/questions/33619896/using-spatialite-with-64-bit-p…) qui semble relatif au problème, mais j'ai beau avoir téléchargé les dernières DLL dans les répertoires*, j'ai toujours les messages d'erreur liés au module introuvable.
Est-ce que quelqu'un serait à l'aise sur cette thématique, et pourrait m'aider ?
Merci à lui/elle !
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=348582#p348582
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 : Hippo (jerome.hippolyte(a)yahoo.fr)
----------------------------------------
Bonjour,
J'ai 2 tables.
Une des table avec les communes de France, et l'autre avec les équipements sportifs.
Je souhaiterais calculer combien j'ai de salles de sport par commune.
J'arrive évidemment à calculer ce nombre dans les communes qui ont une ou plusieurs salles de sport en utilisant ST_DWithin sur les géométries, mais comment renvoyer zéro dans les communes qui n'en ont pas ? Je pensais utiliser ST_DISJOINT mais je ne suis pas sûr que ce soit approprié ...
Voilà ma requête actuelle toute simple :
SELECT count(equip.id),
equip.nom_sdp,
equip.geom,
com.code_insee,
com.nom_comm,
FROM equipements AS equip,
communes AS com
WHERE ST_DWithin(equip.geom, com.geom,0)
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=348690#p348690
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 : cyprien987 (cyprien.peterano(a)gmail.com)
----------------------------------------
Bonjour,
Je voudrais savoir s'il était possible d'importer une vue matérialisée de Postgis vers QGIS avec un même style prédéfini.
Ie, à chaque fois que je voudrais importer ma vm dans QGIS, celle-ci aura le même style de représentation.
Merci pour votre éclairage !!!
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=348354#p348354
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