Message posté par : hadri45
----------------------------------------
Bonjour,
Je dois réaliser des croisements de couches forestières afin d'enrichir la base de données des Forêts officielle. Pour cette opération, le mieux est d'utiliser la fonction Union d'ArcGIS mais j'ai l'obligation de réaliser cela sous Postgres/PostGIS. Pour se faire, j'ai donc vu qu'il fallait réaliser cela en 2 étapes avec d'abord l'intersection pour les deux couches qui s'intersectent puis avec INSERT INTO, récupérer celle qui ne s'intersecte pas avec le ST_DIFFERENCE.
Voici le code où je dois réaliser deux croisements tout en gardant les attributs (code_psg,code_onf et tfv) pour des analyses complémentaires.
Ce code me donne le bon résultat mais vu que je dois réaliser ce traitement pour la France entière il me faut l'optimiser le plus possible sachant que sur un département cela prend plus de 2h30 alors que sur ArcGIS le traitement prend 4 minutes.
-----------------
Code :
-- TABLE DU CROISEMENT PRO / PSG
DROP TABLE IF EXISTS surface_unitaire_01.propsg_01;
-- 1. Intersection
CREATE TABLE surface_unitaire_01.propsg_01 AS
SELECT o.code_onf, p.code AS code_psg, ST_SetSRID((ST_Dump(ST_Intersection(o.geom, p.geom))).geom, 932006) AS geom
FROM surface_unitaire_01.pro_2018_simple_01 o
INNER JOIN surface_unitaire_01.psg_2018_simple_01 p ON (o.geom && p.geom AND ST_Intersects(o.geom, p.geom));
-- Nettoyage des géométries invalides
DELETE FROM surface_unitaire_01.propsg_01 WHERE ST_GeometryType(geom) != 'ST_Polygon';
CREATE INDEX sp_idx_propsg_01_geom ON surface_unitaire_01.propsg_01 USING GIST (geom);
ANALYZE surface_unitaire_01.propsg_01;
-- 2. Différences PRO - PSG et PSG - PRO
CREATE TEMP TABLE pro_union AS
SELECT code_onf, ST_Union(geom) AS geom
FROM surface_unitaire_01.propsg_01
GROUP BY code_onf;
CREATE INDEX sp_idx_pro_union_geom ON pro_union USING GIST (geom);
ANALYZE pro_union;
CREATE TEMP TABLE psg_union AS
SELECT code_psg, ST_Union(geom) AS geom
FROM surface_unitaire_01.propsg_01
GROUP BY code_psg;
CREATE INDEX sp_idx_psg_union_geom ON psg_union USING GIST (geom);
ANALYZE psg_union;
DROP INDEX surface_unitaire_01.sp_idx_propsg_01_geom;
INSERT INTO surface_unitaire_01.propsg_01
SELECT o.code_onf, NULL::VARCHAR(3) AS code_psg, (ST_Dump(ST_Difference(o.geom, ST_SetSRID(COALESCE(t1.geom, 'GEOMETRYCOLLECTION EMPTY'::GEOMETRY), 932006)))).geom AS geom
FROM surface_unitaire_01.pro_2018_simple_01 o
LEFT JOIN pro_union t1 ON o.code_onf = t1.code_onf
UNION
SELECT NULL::VARCHAR(3) AS code_onf, p.code AS code_psg, (ST_Dump(ST_Difference(p.geom, ST_SetSRID(COALESCE(t2.geom, 'GEOMETRYCOLLECTION EMPTY'::GEOMETRY), 932006)))).geom AS geom
FROM surface_unitaire_01.psg_2018_simple_01 p
LEFT JOIN psg_union t2 ON p.code = t2.code_psg;
-- Nettoyage des géométries invalides
SELECT DISTINCT ST_GeometryType(geom) FROM surface_unitaire_01.propsg_01;
SELECT DISTINCT ST_SRID(geom) FROM surface_unitaire_01.propsg_01;
SELECT COUNT(*) FROM surface_unitaire_01.propsg_01 WHERE NOT ST_IsValid(geom);
DELETE FROM surface_unitaire_01.propsg_01 WHERE ST_GeometryType(geom) != 'ST_Polygon';
CREATE INDEX sp_idx_propsg_01_geom ON surface_unitaire_01.propsg_01 USING GIST (geom);
ANALYZE surface_unitaire_01.propsg_01;
DROP TABLE pro_union;
DROP TABLE psg_union;
-- contrôles de surfaces
SELECT 'couche onf' AS origine, code_onf, SUM(ST_Area(geom)) AS surface_total
FROM surface_unitaire_01.pro_2018_simple_01
GROUP BY origine, code_onf
UNION
SELECT 'croisement' AS origine, code_onf, SUM(ST_Area(geom)) AS surface_total
FROM surface_unitaire_01.propsg_01
GROUP BY origine, code_onf
ORDER BY code_onf, origine;
SELECT 'couche psg' AS origine, code AS code_psg, SUM(ST_Area(geom)) AS surface_total
FROM surface_unitaire_01.psg_2018_simple_01
GROUP BY origine, code_psg
UNION
SELECT 'croisement' AS origine, code_psg, SUM(ST_Area(geom)) AS surface_total
FROM surface_unitaire_01.propsg_01
GROUP BY origine, code_psg
ORDER BY code_psg, origine;
SELECT DISTINCT st_geometrytype(geom)
FROM surface_unitaire_01.bd_foret_01_simple
SELECT id_foret, ST_NPoints(geom), ST_MemSize(geom)
FROM surface_unitaire_01.bd_foret_01_simple
ORDER BY ST_NPoints DESC;
SELECT COUNT(*), COUNT(*) FILTER (WHERE ST_MemSize(geom) > 8192)
FROM surface_unitaire_01.bd_foret_01_simple;
CREATE TABLE surface_unitaire_01.bd_foret_01_simple_sub AS
SELECT id_foret, tfv, ST_SubDivide(geom) AS geom
FROM surface_unitaire_01.bd_foret_01_simple;
CREATE INDEX idx_foret_geom_sub_01 ON surface_unitaire_01.bd_foret_01_simple_sub USING GIST (geom);
CREATE TABLE surface_unitaire_01.propsg_01_sub
AS SELECT ST_SUBDIVIDE(geom) as geom, code_onf,code_psg
FROM surface_unitaire_01.propsg_01
-- TABLE DU CROISEMENT BD_FORET / PRO_PSG
DROP TABLE IF EXISTS surface_unitaire_01.final_cedric_01;
-- 1. Intersection
CREATE TABLE surface_unitaire_01.final_cedric_01 AS
SELECT p.code_onf, p.code_psg, b.tfv, ST_SetSRID((ST_Dump(ST_Intersection(ST_Buffer(p.geom, 0.0000001), b.geom))).geom, 932006) AS geom
FROM surface_unitaire_01.propsg_01 p
INNER JOIN surface_unitaire_01.bd_foret_01_simple_sub b ON (p.geom && b.geom AND ST_Intersects(p.geom, b.geom));
-- Nettoyage des géométries invalides
SELECT DISTINCT ST_GeometryType(geom) FROM surface_unitaire_01.final_cedric_01;
DELETE FROM surface_unitaire_01.final_cedric_01 WHERE ST_GeometryType(geom) != 'ST_Polygon';
CREATE INDEX sp_idx_final_cedric_01_geom ON surface_unitaire_01.final_cedric_01 USING GIST (geom);
ANALYZE surface_unitaire_01.final_cedric_01;
-- 2. Différences BD_FORET - PRO_PSG et PRO_PSG - BD_FORET
DROP TABLE IF EXISTS pro_psg;
CREATE TEMP TABLE pro_psg AS
SELECT code_onf, code_psg,geom
FROM surface_unitaire_01.final_cedric_01;
CREATE INDEX sp_idx_pro_psg_geom ON pro_psg USING GIST (geom);
ANALYZE pro_psg;
DROP TABLE IF EXISTS tfv;
CREATE TEMP TABLE tfv AS
SELECT tfv, geom
FROM surface_unitaire_01.final_cedric_01;
CREATE INDEX sp_idx_tfv_geom ON tfv USING GIST (geom);
ANALYZE tfv;
DROP INDEX surface_unitaire_01.sp_idx_final_cedric_01_geom;
INSERT INTO surface_unitaire_01.final_cedric_01
SELECT p.code_onf, p.code_psg, NULL::VARCHAR(10) AS tfv, (ST_Dump(ST_Difference(p.geom, ST_SetSRID(COALESCE(t1.geom, 'GEOMETRYCOLLECTION EMPTY'::GEOMETRY), 932006)))).geom AS geom
FROM surface_unitaire_01.propsg_01_sub p
LEFT JOIN pro_psg as t1 ON p.code_onf = t1.code_onf AND p.code_psg = t1.code_psg
UNION
SELECT NULL::VARCHAR(3) AS code_onf, NULL::VARCHAR(3) AS code_psg, t.tfv, (ST_Dump(ST_Difference(t.geom, ST_SetSRID(COALESCE(t2.geom, 'GEOMETRYCOLLECTION EMPTY'::GEOMETRY), 932006)))).geom AS geom
FROM surface_unitaire_01.bd_foret_01_simple_sub t
LEFT JOIN tfv t2 ON t.tfv = t2.tfv;
CREATE INDEX sp_idx_final_cedric_01_geom ON surface_unitaire_01.final_cedric_01 USING GIST (geom);
ANALYZE surface_unitaire_01.propsg_01;
DROP TABLE pro_psg_union;
DROP TABLE IF EXISTS tfv_union;
DROP TABLE tfv;
-----------------
J'ai donc essayé de subdiviser ce qui accélère les temps de traitements mais le plus gros problème reste le dernier ST_DIFFERENCE entre la bd_foret et pro_psg qui est toujours aussi long malgré cette subdivision et ne permet pas de valider le code. J'ai également essayé de transformer les géométries en tuile (MapVector Tile) avec ST_ASMVTGeom mais cela est encore plus long. J'ai également essayé de faire sans le ST_UNION ou ST_COLLECT mais cela ne change pas beaucoup le temps de traitement.
Ma couche principale est de l'ordre de plus de 25000 entités et les autres couches à croiser sont autour de 2000.
Pour la configuration, je suis sous PostgreSQL 12 et PostGIS 3.0.
Auriez-vous donc une idée afin d'optimiser le traitement ?
Merci,
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=335210#p335210
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 : Nicolas Ribot
----------------------------------------
Bonsoir,
PG en tant que tel n'est pas outillé pour accéder à des URL, des API.
Mais il supporte de nombreux langages qui permettent ces accès, à travers des fonctions écrites dans ces langages.
Une solution classique est de développer un serveur d'application (java, javascript, python, php, ...) qui fait les accès à l'API et le lien vers PG/Pgis pour stocker ou manipuler les données.
Je préfère souvent une solution intégrée à PG, soit à travers une fonction qui réalise les accès, soit à travers un FDW (foreign data wrapper). Je vous laisse regarder le FDW Unicorn, par ex, qui permet en python de développer une interface entre le service et PG, permettant d'accèder à l'API à travers du sql (select * from foreign_table_qui_appelle_lapi).
Ca se met en place assez facilement et convient bien si ces appels à l'API doivent etre nombreux et/ou fréquents.
Il existe aussi des FDW génériques qui savent "taper" sur une API ou un web service avec un peu de conf.
Avec une fonction, c'est encore plus simple: vous développez la fonction (par ex en python, langage vraiment pratique pour manipuler les données et disposant de nombreuses API) qui appelle l'API et traite les données.
Voici un exemple de fonction permettant de géocoder des adresses dans PG. Elle se base sur le geocodeur en ligne BANO, prend une requete SQL formatée avec certaines colonnes (rue, num, ville, cp, ...), transmet ces données à l'API du geocodeur, récupère les données (format CSV), les convertit en JSON et les renvoie à PG.
La concision du code Python pour faire tout cela (ca doit pouvoir etre bien plus concis: je suis nul en python...) est remarquable je trouve.
(le code execute la requête passée en param, formate le tout en CSV (en mémoire), puis envoie ce CSV sur l'URL du geocodeur.
Le résultat (CSV) est converti en JSON et renvoyé par la fonction: on peut alors convertir les info JSON en geométries postgis.)
-----------------
Code :
create or replace function geocode_add(query text)
RETURNS setof jsonb as
$$
import csv
import io
from collections import OrderedDict
import requests
import json
with io.BytesIO(b"") as stream:
writer = csv.writer(stream, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
writer.writerow(["ids", "voie", "ville", "cp"])
for row in plpy.cursor(query):
# writes row in csv to csv stream
# Write CSV Header, If you dont need that, remove this line
writer.writerow([row['ids'], row['voie'], row['ville'], row['cp']])
requests_session = requests.Session()
kwargs = {
'data': OrderedDict([
('columns', ['voie', 'ville', 'cp']),
('postcode', 'cp')
]),
'method': 'post',
'files': OrderedDict([
('data', ('addpg.csv',stream.getvalue()))
]),
'stream': True,
'url': 'https://api-adresse.data.gouv.fr/search/csv/'
}
response = requests_session.request(**kwargs)
for row in csv.DictReader(response.text.encode('utf-8').splitlines()):
yield json.dumps(row)
$$ language plpythonu VOLATILE;
-----------------
Elle s'utilise comme cela:
-----------------
Code :
select * from geocode_add('select array_agg(s.id) as ids, voie, ville, cp from table_adresse');
-----------------
Nicolas
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=337775#p337775
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 : Ricola62
----------------------------------------
Bonjour,
est ce que vous savez comment résoudre le problème de plusieurs paramètres dan st_buffer de Postgis?
st_buffer(geom, 100, 'side=right endcap=square') cela ne fonction pas et renvoit juste un buffer coté droit.
Merci d'avance
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=338314#p338314
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 : Pascal PLUVINET
----------------------------------------
Bonjour,
J'ai créé et importé des données dans une base de données PostGIS via l'utilitaire "Gestionnaire de base de données" de QGIS.
J'ai fait ceci en utilisant une connexion Postgis avec le user postgres qui aurait tous les droits sur le schema.
Or une fois importées, les tables (avec ce même user) sont en "read-only".
Cela se voit bien dans PgAdmin4, lorsqu'on fait "View/Edit data", il y a un petit cadena à côté de chaque nom de colonne.
J'ai fait quelque chose de similaire en important des tables depuis des scripts R utilisant la fonction dbWriteTable du package RPostgreSQL". Et c'est la même chose. Le contenu de ces tables n'est pas éditable.
J'ai tenté des requêtes du type :
-----------------
Code :
grant all on monschema.matable to postgres;
-----------------
et ca n'a aucun effet.
Je n'arrive pas à trouver quelle est la contrainte de sécurité qui bloque l'édition.
Merci d'avance pour vos suggestions,
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=338267#p338267
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 : Nicolas Ribot
----------------------------------------
Voici un exemple d'appel de la fonction::
-----------------
Code :
select jsonb_pretty(t)
from geocode_add($$select '{1}'::text[] as ids, '6, place du parlement' as voie, 'TOulouse' as ville, '31000' as cp$$) as t;
{
"cp": "31000",
"ids": "['1']",
"voie": "6, place du parlement",
"ville": "TOulouse",
"latitude": "43.593901",
"longitude": "1.44386",
"result_id": "31555_6544_00006",
"result_city": "Toulouse",
"result_name": "Place du Parlement",
"result_type": "housenumber",
"result_label": "6 Place du Parlement 31000 Toulouse",
"result_score": "0.91",
"result_street": "",
"result_context": "31, Haute-Garonne, Occitanie",
"result_oldcity": "",
"result_citycode": "31555",
"result_district": "",
"result_postcode": "31000",
"result_housenumber": "6",
"result_oldcitycode": ""
}
-- et pour en faire une geom postgis en 2154 par ex:
select st_astext(
st_transform(
st_setSRID(
st_makePoint((t->>'longitude')::float, (t->>'latitude')::float), 4326),
2154)
) as geom
from geocode_add($$select '{1}'::text[] as ids, '6, place du parlement' as voie, 'TOulouse' as ville, '31000' as cp$$) as t;
geom
POINT(574306.714913341 6278443.54202644)
-----------------
(dommage, l'API est privée: on ne peut pas tester)
Nico
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=337777#p337777
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 : Vincent-SIABS
----------------------------------------
Bonjour,
débutant avec les triggers j'ai beaucoup progressé grâce à l'aide des membres du forum que je remercie. cf post https://georezo.net/forum/viewtopic.php?id=121987 & https://georezo.net/forum/viewtopic.php?id=121953
Mais je suis encore confronté à un petit soucis qui je pense vient plus de l'organisation de la base de donnée voir de l'ordre de déclenchement des triggers plutôt que d'une erreur dans les triggers en soit. VOilà mon soucis :
J'ai 2 trigger.
Le TRIGGER 1 : remonte dans une table ligne une info "data" contenue dans une table point.
Le TRIGGER 2 : remonte dans la table ligne cette même info "data" pour toutes nouvelles lignes dont le point de départ correspond au point d'arrivée d'une ligne déjà existante.
L'idée derrière cela est de faire "suivre" l'info "data" de façon automatique lors du traçage de mes réseaux.
Quand je n'ai qu'un seul trigger "d'activé" ça fonctionne. Quand "j'active" les 2 triggers seul le TRIGGER 2 fonctionne, le TRIGGER 1 ne fonctionne plus.
TRIGGER 1
-----------------
Code :
CREATE OR REPLACE FUNCTION TRIGGER 1 ()
RETURNS "trigger" AS $$
BEGIN
new.data= (SELECT p.data
FROM table_point as p
WHERE st_dwithin(st_startpoint(new.geom),(p.geom),0.001)
);
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql'VOLATILE;
CREATE TRIGGER TRIGGER 1
BEFORE INSERT OR UPDATE ON table_ligne
FOR EACH ROW EXECUTE PROCEDURE TRIGGER 1 ();
-----------------
TRIGGER 2
-----------------
Code :
CREATE OR REPLACE FUNCTION TRIGGER2 ()
RETURNS "trigger" AS $$
BEGIN
NEW.data=m.data
FROM table_ligne
WHERE st_dwithin(ST_startpoint(new.geom),st_endPoint(m.geom),0.001);
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql'VOLATILE;
CREATE TRIGGER TRIGGER2
BEFORE INSERT OR UPDATE ON table_ligne
FOR EACH ROW EXECUTE PROCEDURE TRIGGER2 ();
-----------------
Existe t'il un moyen de les hiérarchiser ? ou de faire en sorte qu'ils ne se marchent pas sur les pieds ?
Merci de votre aide.
Vincent
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=338150#p338150
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 : 1pichet
----------------------------------------
Bonjour à tous,
Je sui confronté à un problème d'intersection ou de différence entre deux multi-polygone.
Dans le cadre de mon travail j'avais besoin de faire la différence d'une couche de multi-polygones (A) par une autre couches de polygones (B). Pour se faire j'ai commencé par créer une couche (C) union des polygones de la couche B qui intersectent les polygones de la couche A.
Ensuite j'ai réalisé une différence entre les polygones de la couche A avec ceux de la couche C. J'avais fait un lien avec la clé primaire de la table A.
En regardant de plus près le résultat, je me suis aperçu que la différence réalisée sur certains polygones était incomplète. En gros si j'ai un multi-polygone C qui est composé de deux polygones B1 et B2 qui intersectaient bien un multi-polygone A, lorsque je fais St_Difference(A,C) j'obtiens le même résultat que St_difference(A,B1).
Il en va de même pour St_Intersection. La partie B2 du multi-polygone C semble ne pas être vue alors qu’elle chevauche bien le polygone A.
J'ai vérifié la validité des polygones ainsi que le SRID, et les surfaces mais rien à redire.
Lorsque je réalise l'opération suivante St_Difference(A, St_buffer(C,0.01)), là j'obtiens bien le bon résultat.
Je n'ai pas réussi à trouver d'information sur ce problème, et du coup j'aimerais savoir s'il y a un moyen de le contourner sans passer par des buffer.
Merci d'avance pour vos réponses.
PostgreSQL 9.5.24
Postgis 2.2.1
(impossible de demander des versions plus récentes...)
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=337902#p337902
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 : Vincent-SIABS
----------------------------------------
Bonjour,
Petite question sur une sélection via st_startpoint et st_endpoint.
J'ai une couche de ligne type linestring dans ma base.
Je souhaite remplir automatiquement un attribut de la nouvelle ligne crée en me basant sur un attribut de la ligne déjà existante à laquelle se "rattache" la nouvelle.
En gros je trace ma ligne B avec son champs DATA "vide". Cette ligne B se rattache à la ligne A déjà existante avec son chmps DATA remplit par la valeur A_text.
J'ai dans ma tête la requête suivante :
Si point de départ de ligne_B = point de fin de ligne_A alors met à jour le champ DATA de ligne_B avec la valeur de DATA ligne_A
J'arrive à faire sortir les valeurs de st_startpoint et st_endpoint dans ma table mais après je "but" sur le "=" je pense à un ST_within mais je n'arrive pas à imbriquer le tout comme il faut.
S jamais quelqu'un à une piste ou une idée je suis preneur !
Merci à vous et bonne journée.
Vincent
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=337911#p337911
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 : Vincent-SIABS
----------------------------------------
Bonjour,
Je travail à la mise en place d'un trigger permettant de "remonter" un info dans une table en se basant sur un foonction spatial et une "clause" attributaire.
Je m'explique : j'ai 2 tables :
- Table poste_source qui contient le nom du poste source
- Table Rsx_hta qui contient les réseaux partant du poste source.
Je souhaite faire remonter de façon automatique dans la table Rsx_hta le nom du poste_source d'où part le réseau. Avec comme critère les règles suivantes :
1 - il faut que le point et la ligne aient leurs deux géométries se touchent en leur contours extérieurs. Utilsation de la fonction ST_touches
2 - il faut que le champs nom_poste dans la table Rsx_hta soit vide ou null . Utilisation du SELECT WHERE / AND / OR
J'ai donc écrit le code suivant :
-----------------
Code :
CREATE OR REPLACE FUNCTION remonte_poste_source ()
RETURNS "trigger" AS $$
BEGIN
NEW.nom_poste= (SELECT nom
FROM public.rsx_hta, public.postes_source
WHERE
(st_touches( public.rsx_hta.geom,public.postes_source.geom) AND nom_poste = '' )
OR
(st_touches( public.rsx_hta.geom,public.postes_source.geom) AND nom_poste IS NULL )) ;
RETURN NEW;
END;
$$
LANGUAGE 'plpgsql'VOLATILE;
CREATE TRIGGER remonte_poste_source
BEFORE INSERT OR UPDATE ON public.rsx_hta
FOR EACH ROW EXECUTE PROCEDURE remonte_poste_source ();
-----------------
Le soucis est que si je commence à tracer du Rsx qui part du poste_1 et que je passe ensuite à du réseau qui part du poste_2 le trigger me remonte toujours la valeur "poste_1" même si le réseau par du poste_2. cf photo en pièce jointe. J'ai tracé dans l'ordre chronologique en commençant par la 6. 6 et 7 sont "justes" par contre 8 remonte poste_1 alors qu'il n'a aucune geométrie commune avec... La bonen valeur serait poste_2.
Je n'arrive pas à isoler mon erreur
Merci de votre aide.
Bonne journée.
Vincent
----------------------------------------
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=337820#p337820
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 : Alex-GIS-51 (alexandre.ecuvillon(a)civc.fr)
----------------------------------------
Bonjour chers amis usagers de PostGIS,
J'ai un soucis que j'ai du mal à résoudre. Toute aide serait très appréciée :-)
Voilà, je cherche à migrer une ancienne base de données postgreSQL 9.3.5 / postGIS v2 vers un nouvel environnement postgreSQL 13.0 / postGIS v3.
A l'issue de l'export-import de données, je retrouve bien mes tables avec des polygones, par contre je n'arrive pas à faire quoi que ce soit des anciennes tables raster.
J'ai peut-être zappé un truc, ou je me plante complètement dans la façon de m'y prendre.
Voilà en détail comment je procède :
1) export de l'ancienne BDD via PgAdmin 4 (Backup. Format : personnalisé, Codage = UTF-8) => j'obtiens un fichier sql
2) création sur le postgreSQL cible d'une nouvelle base de données, avec le même nom, extensions + legacy
cd C:Program FilesPostgreSQL13bin
createdb -U postgres myDB
psql -U postgres -d myDB -c "CREATE EXTENSION postgis;"
psql -U postgres -d myDB -f "C:Program FilesPostgreSQL13sharecontribpostgis-3.0legacy.sql"
psql -U postgres -d myDB -c "CREATE EXTENSION postgis_topology;"
psql -U postgres -d myDB -c "CREATE EXTENSION postgis_raster;"
psql -U postgres -d myDB -c "CREATE EXTENSION postgis_sfcgal;"
psql -U postgres -d myDB -c "CREATE EXTENSION address_standardizer;"
psql -U postgres -d myDB -c "CREATE EXTENSION postgis_tiger_geocoder CASCADE;"
3) trasnformation du backup via restore.pl
cd C:Program FilesPostgreSQL13bin
"C:Program FilesPostgreSQL13utilspostgis_restore.pl" -v "C:BACKUP.sql" > "C:restore.sql"
psql -U postgres -d myDB -f "C:restore.sql"
4) exécution de restore.sql (quelques erreurs à la fin)
Toute aide serait très gentille :-) Merci par avance !
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=336827#p336827
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