Message posté par : Nicolas Ribot
----------------------------------------
Bonjour,
Vous auriez un exemple avec des données ?
Je ne suis pas sur de comprendre le problème.
Avec les fonctions de référencement linéaire, vous pouvez découper une linestring tous les x mètres sans trop de problèmes.
Nicolas
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=333858#p333858
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 : 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 : 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 : Alicemartin
----------------------------------------
Bonjour,
J'ai PostgreSQL 9.5 installé en local sur un ordinateur sous Windows 10. J'y ai installé l'extension ogr_fdw afin de pouvoir importer dans ma base des couches issues de flux WFS en suivant ce tutoriel --> https://mybl0gn0tes.wordpress.com/2017/06/13/utiliser-des-flux-wfs-dans-pos…).
Mon soucis est que, quand je crée un serveur distant avec des URL en https (ex : https://wxs-gpu.mongeoportail.ign.fr/externe/39wtxmgtn23okfbbs1al2lz3/wfs), j'ai un message d'erreur indiquant "SSL certificate problem: unable to get local issuer".
J'ai passé la journée à essayer de régler le problème mais sans succès. Quelqu'un saurait-il quoi faire ?
Je vous remercie d'avance pour votre aide et vous souhaite une belle soirée.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=333657#p333657
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 : 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 : Tonio456 (antoine.prevors(a)gmail.com)
----------------------------------------
Bonsoir à tous,
Je cherche à lancer une requête via postgis pour découper des polygones d'une même couche qui se superposent et donc créer de nouvelles géométries tout en récupérant la valeur de mon champ "nombre" pour en faire la moyenne.
Ma table ressemble à cela, j'ai a peu 500 cercles
https://ibb.co/kc19b4j
Si je prends cet exemple
https://ibb.co/MhTvTtr
J'ai 3 cercles avec un champ nombre de valeurs 1,2 et3
et je cherche à obtenir comme résultat
https://ibb.co/Vpm7H9W
c'est à dire 7 polygones qui reprennent la moyenne des attributs des polygones avec lesquels ils se superposent
J'espère etre assez clair dans mon explication
J'etais parti sur une requete du genre
-----------------
Code :
SELECT a.label,b.label,st_intersection(a.geom,b.geom),
avg (matable.nombre) as moyenne
FROM matable as a, matable as b
WHERE st_intersects(a.geom,b.geom)
AND a.idb.id
-----------------
mais je pense m'égarer complètement...
si quelqu'un a une piste je suis preneur !:)
Je vous remercie d'avance
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=335620#p335620
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 : Francis YAMEOGO
----------------------------------------
Bonjour à tous.
J'ai élaboré un projet Webmapping a partie de Lizmap qui est une solution qui permet de générer des cartes interactive identique a votre projet QGIS.
A présent je compte utiliser PostgreSQL comme Base de donnée de mon projet. A ce niveau je suis bloqué. Dans la documentation Lizmap , il est dit de créer un lien dans le fichier localConfig.uni.PHP en enregistrant les username, password, hôte de la base de donnée PostgreSQL. Chose faite mais j'arrive toujours pas a créer ce lien. Quelqu'un aurait une expérience en la matière. Bien vouloir me faire savoir. Merci
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=335433#p335433
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 : staubli
----------------------------------------
Salut tout le monde
J'ai trois tables differentes que je voudrais combiner au travers d'un VIEW. Mais j'ai beau tout essayer je n'y arrive pas.
J'ai une table Avec mes objets (Points) qui contient leur ID, leur geom et une Denomination Sous forme de Code.
Une table Avec toutes les denominations de tous mes objets (tel Code correspond a telle Denomination pour tel objet, exemple SY12=poteau electrique).
Une 3e table qui indique des poins kilometriques sur une route.
Je veux donc pour chaque objet lui associer sa denomination et son kilometrage (son plus proche voisin).
Je suis arrivé d'un coté à associer un objet à son nom et d'un autre coté à associer un objet à son kilometrage mais je n'arrive donc pas à combiner les deux.
J'imagine que ca doit etre tout bete mais je n'y arrive pas. Je commence juste à migrer les données vers Postgre et je n'ai pas fait beaucoup de SQL, ce qui explique mes difficultés.
Requete associer une Denomination à un Code
-----------------
Code :
SELECT p."ID",
p.geom,
p.name,
p.angle,
p.linie,
i.bezeichnung
FROM infra_visu._prellbockdist p
JOIN infra_visu._symbolindex_bahnplan i ON p.name::text = i.symbolnr::text;
-----------------
Requete associer un Point kilometrique
-----------------
Code :
SELECT DISTINCT ON (_prellbockdist."ID")
_prellbockdist."ID",
_prellbockdist.name,
_prellbockdist.angle,
_prellbockdist.linie,
_kilometrierung.linie,
_kilometrierung.km
FROM
infra_visu._prellbockdist,
infra_visu._kilometrierung
WHERE ST_DWithin(_kilometrierung.geom , _prellbockdist.geom, 100)
Order by _prellbockdist."ID", ST_Distance (_kilometrierung.geom , _prellbockdist.geom)
-----------------
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=335393#p335393
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 m'initie depuis peu sur Pgrouting, notamment grâce à la document en ligne. Disposant d'une couche de route (source : OSM), je souhaite calculer le chemin le plus court entre deux points. J'utilise Windows 10, ainsi que postgreSQL et pgAdmin (dernière version).
La requête finale fonctionne, mais est malheureusement vide. Voici ma démarche :
-----------------
Code :
-- Sur QGis, conversion de la couche route de Multilinestring à linestring avec l'outil "De morceaux multiples à morceaux uniques"
-- Importation de la couche route (nommée "route_049") dans PostgreSQL
-- Création des colonnes Source et Target
ALTER TABLE route_049 ADD COLUMN "source" integer;
ALTER TABLE route_049 ADD COLUMN "target" integer;
--Création que de la topologie (fonctionne bien, et me renvoie "OK")
SELECT pgr_createtopology('route_049', 0.001, 'geom', 'id', 'source', 'target');
--Tentative de création d'un trajet le plus court entre deux points (https://zupimages.net/viewer.php?id=20/37/2piv.png --> Les points proviennent de "route_049_vertices_pgr")
SELECT *
FROM pgr_dijkstra('select id, source, target, st_length(geom) as cost, st_length(geom) as cost FROM route_049', 30, 4, false)
--0 ligne retournée
-----------------
J'ai du adapter mon code, car les formules que j'entrais n'était pas compatibles avec la doc. Aurais-je loupé quelque chose ?
Merci.
----------------------------------------
Le message est situé https://georezo.net/forum/viewtopic.php?pid=335270#p335270
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