IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Utilisation de la fonction ST_difference


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut Utilisation de la fonction ST_difference
    Bonjour à tous,

    J'aurai besoin de créer une couche 'c' qui est le résultat de la couche 'a' moins les intersections avec la couche 'b'. Pour cela, j'ai utilisé les fonctions st_difference (pour trouver les geometries sans intersection) et St_intersects (pour ne faire ma requête seulement la ou il n'y pas d'intersections entre les 2 couches via un WHERE NOT).

    J'ai testé ma requête sur PgAdmin et je dois être loin du compte car ma requête tourne à l'infini.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE c
    AS
      SELECT st_Difference(a.geom,b.geom) as geom
    FROM a,b
    WHERE NOT ST_Intersects(a.geom,b.geom)
    Est ce que quelqu'un peut m'expliquer comment réaliser ce traitement? Pour moi, les intersections ne sont pas compliqué à réaliser mais les differences me dépassent...

  2. #2
    Membre habitué
    Femme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut
    Je viens de comprendre que sans jointure, pgadmin risquait de mettre un peu de temps... J'ai donc modifié mon code, qui s’exécute correctement mais le résultat est tout simplement faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE c
    AS
      SELECT st_Difference(a.geom,b.the_geom) as geom
    FROM a left join b ON st_intersects(a.geom, b.geom)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 251
    Par défaut
    Je ne comprends pas ta jointure Delphine et désolé, je ne pense pas pouvoir t'apporter d'aide car je ne connais pas du tout postGIS

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Postez le DDL de vos tables et de plus amples explications.... Nos boules de cristal n'ont pas pu résoudre magiquement un problème non expliqué !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre habitué
    Femme Profil pro
    Ingénieur de déploiement réseaux
    Inscrit en
    Février 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur de déploiement réseaux

    Informations forums :
    Inscription : Février 2013
    Messages : 9
    Par défaut
    Merci pour vos réponses, je vais essayé d'être plus précise.

    La couche "dsp_ftth_zpm_v1" (a dans mon précédent message) correspond à un ensemble de polygones qui remplisse la totalité d'un département. Sa structure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    CREATE TABLE public.dsp_ftth_zpm_v1
    (
      id integer NOT NULL DEFAULT nextval('dsp_ftth_zpm_v1_id_seq'::regclass),
      geom geometry(MultiPolygon,2154),
      dept character varying(254),
      toponyme character varying(254),
      insee_comm character varying(254),
      cdc character varying(254),
      "type_donné" character varying(254),
      site_sfr character varying(254),
      za_code character varying(254),
      za_type character varying(254),
      za_capa character varying(254),
      za_ptam character varying(254),
      za_com character varying(254),
      za_comment character varying(254),
      za_creadat character varying(254),
      za_majdat character varying(254),
      zanro character varying(254),
      secteur character varying(254),
      lot_trait bigint,
      ent_ftte bigint,
      superficie numeric,
      moinsde200 character varying(254),
      o3_nbel character varying(254),
      "o3_année" character varying(254),
      o3_trimest character varying(254),
      CONSTRAINT dsp_ftth_zpm_v1_pkey PRIMARY KEY (id)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE public.dsp_ftth_zpm_v1
      OWNER TO siggio;
     
    -- Index: public.sidx_dsp_ftth_zpm_v1_geom
     
    -- DROP INDEX public.sidx_dsp_ftth_zpm_v1_geom;
     
    CREATE INDEX sidx_dsp_ftth_zpm_v1_geom
      ON public.dsp_ftth_zpm_v1
      USING gist
      (geom);
    La couche "dsp_ftth_psd" (b dans mon précédent message) correspond à un ensemble de polygones qui remplisse une partie du même département. Sa structure est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    CREATE TABLE public.dsp_ftth_psd
    (
      fid integer NOT NULL DEFAULT nextval('dsp_ftth_psd_fid_seq'::regclass),
      the_geom geometry(MultiPolygon,2154),
      id_metier character varying(10),
      trimestre integer,
      nbel integer,
      CONSTRAINT dsp_ftth_psd_pkey PRIMARY KEY (fid),
      CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
      CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOLYGON'::text OR the_geom IS NULL),
      CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE public.dsp_ftth_psd
      OWNER TO postgres;
     
    -- Index: public.spatial_dsp_ftth_psd_the_geom
     
    -- DROP INDEX public.spatial_dsp_ftth_psd_the_geom;
     
    CREATE INDEX spatial_dsp_ftth_psd_the_geom
      ON public.dsp_ftth_psd
      USING gist
      (the_geom);
    Aucun polygone n'est commun entre les 2 couches.
    Ce que j'aimerai faire, c'est soustraire de la couche "dsp_ftth_zpm_v1" l'emprise de la couche "dsp_ftth_psd"

    Ex : "dsp_ftth_zpm_v1" correspondrait à "A" et "dsp_ftth_psd" à "B" et je souhaiterai obtenir A'
    Nom : ST_Difference.png
Affichages : 1000
Taille : 47,9 Ko

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Il faut d'abord faire une agrégation spatiale suivie d'une différence... non ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [LG]Utilisation de la fonction time
    Par kmitz dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2005, 13h05
  2. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  3. [LG]Utilisation de la fonction Random
    Par chloe95 dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2005, 14h20
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo