Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Thu 17 January 2013 14:40

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Bonjour à tous,
je bute depuis quelques jours maintenant sur une erreur signalée lorsque je lance une requête d'intersection.

La manip est la suivante : extraire au moyen de cette requête d'intersection les objets géographiques de la BDTOPO de l'IGN correspondant à l'emprise administrative d'une collectivité territoriale.

Les objets de type POINT, POLYGON, MULTIPOLYGON ne posent pas de difficultés, les données sont extraites et le résultat est enregistré dans un autre schéma.
Par contre lorsque j'essaie d'intersecter une couche MULTILINESTRING de type cours d'eau le message suivant apparaît :
ERREUR:  lwcollection_construct: mixed dimension geometries: 0/2.

Au fur et à mesure de mes recherches je pense que l'erreur est liée à l'intersection entre une couche de type MULTILINESTRING  dont  la dimension de la géométrie est la 4D et l'autre couche  de type MULTIPOLYGON dont la dimension de la géométrie est la 2D.

De mon côté la situation est bloquée, je n'ai plus d'idées... Avez-vous déjà été confrontés à ce type d'erreur ?

Merci,
Elodie


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#2 Thu 17 January 2013 15:04

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Bonjour,

Je vous propose une bizarrerie de plus pour aiguiser votre curiosité.

Je réalise à nouveau ma requête d'intersection entre  la couche 'zone de végétation' de type MULTIPOLYGON issue de la BDTOPO de l'IGN et ma couche limite administrative d'une collectivité territoriale.

Le résultat est la création d'une table intégrée dans le schéma regroupant l'ensemble des intersections des couches géographiques de l'IGN BDTOPO.

Lorsque je vérifie sous Qgis 1.8 l'affichage de cette nouvelle table, trois couches géographiques apparaissent de type POLYGON, POINT et LINESTRING, comme si le type était plutôt une collection d'où le message d'erreur initial...

Qu'en pensez vous,


merci

Elodie

Dernière modification par Elodie11 (Fri 18 January 2013 09:16)


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#3 Fri 18 January 2013 11:57

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Bonjour,
je vais essayer de vous aiguiller un peu plus.

Voici la requête exacte :

CREATE TABLE bdtopo_gn.z_veget AS

            SELECT DISTINCT  z_veget11.gid, z_veget11.id, z_veget11.prec_plani, nature,
            st_intersection(z_veget11.geometrie,gn_2013.geometrie) as the_geom
            FROM z_veget11,
           (Select gid,id,prec_plani,nom,code_insee,statut,canton,arrondisst,depart,region,popul,multican,geometrie
                        FROM dblink('host=192.168.3.13 dbname=administratif user=postgres password=password',
                        'SELECT * FROM gn_2013') as com (gid integer,
                                   id character varying(24),
                                   prec_plani double precision,
                                   nom character varying(45),
                                   code_insee character varying(5),
                                   statut character varying(20),
                                   canton character varying(45),
                                   arrondisst character varying(45),
                                   depart character varying(30),
                                   region character varying(30),
                                   popul integer,
                                  multican character varying(3),
                                  geometrie geometry(MultiPolygon,3943))) as gn_2013
            WHERE st_intersects(gn_2013.geometrie,z_veget11.geometrie);


J'ai essayé ensuite d'ajouter :

st_intersection(ST_Force_2D (z_veget11.geometrie  ),gn_2013.geometrie)


à la place de

st_intersection(z_veget11.geometrie,gn_2013.geometrie) as the_geom


toujours rien,

puis j'ai lancé cette nouvelle requête :

CREATE TABLE bdtopo_gn.z_veget AS

            SELECT DISTINCT  z_veget11.gid, z_veget11.id, z_veget11.prec_plani, nature, ST_Force_2D (z_veget11.geometrie) as z_veget_geom,
            st_intersection(ST_Force_2D (z_veget11.geometrie),gn_2013.geometrie) as geom_intersect
  FROM z_veget11,
            (Select gid,id,prec_plani,nom,code_insee,statut,canton,arrondisst,depart,region,popul,multican,geometrie
                        FROM dblink('host=192.168.3.13 dbname=administratif user=postgres password=password',
                        'SELECT * FROM gn_2013') as com (gid integer,
                        id character varying(24),
                        prec_plani double precision,
                        nom character varying(45),
                        code_insee character varying(5),
                        statut character varying(20),
                        canton character varying(45),
                        arrondisst character varying(45),
                        depart character varying(30),
                        region character varying(30),
                        popul integer,
                        multican character varying(3),
                        geometrie geometry(MultiPolygon,3943))) as gn_2013
            WHERE st_intersects(gn_2013.geometrie,z_veget11.geometrie);


et bien je me retrouve à l’affichage sous Qgis 1.8 toujours avec mes 3 couches géographiques liées à mon geom_intersect (POLYGON, POINT et LINESTRING) et une couche géographique supplémentaire liée à z_veget_geom en Multipolygon tenant compte de l’intersection.

Si je supprime via pgAdmin la colonne géométrie geom_intersect je solutionne le problème mais ce n’est pas très académique …

Qu'en pensez-vous ?

Merci

Elodie

Dernière modification par Elodie11 (Fri 18 January 2013 11:58)


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#4 Fri 18 January 2013 13:24

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Bonjour,

Quelle version de PG et PGis utilisez-vous ?

Effectivement, une intersection entre objet peut renvoyer tout type de geometrie: point, ligne, polygone, multi*, geometryCollection.
Tout stocker dans la meme colonne dépend du modèle que vous adopter et de ce que vous voulez faire.
Tres souvent, c'est assez limitant car bcp de fonctions de postgis marchent sur des types précis (st_length, st_area...).

Effectivement, si vous travaillez avec des objets de dimension differentes, c'est plus judicieux de forcer la 2D comme vous faites (peut etre meme sur les tables d'origine, si les dimensions M et Z ne vous servent pas.)

QGis, me semble-t-il, considere qu'une colonne geographique doit avoir un seul type: il a du mal avec les colonnes stockant des types de geometries différents. Une solution possible est de creer des vues sur votre table resultant de l'intersection, une vue par type:

create view z_veget_point as (
select ...
from z_veget
where geometryType('the_geom') = 'POINT'
);

et pareil pour les autres types.
Enregistrez ces vues dans geometry_columns et qgis devrait les voir et vous permettre de les exploiter.

Sinon, pouvez-vous trouver le plus petit jeu de données qui provoque l'erreur et l'envoyer sur le forum ?

Nicolas

Hors ligne

 

#5 Fri 18 January 2013 13:31

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

(autre point:
devez-vous vraiment avoir 2 bases de données et faire du dblink entre les deux ? c'est dangereux, peu performant et tres limitant (index par exemple).

Avec Postgresql, il est souvent judicieux d'organiser les données en schema, quitte a avoir bcp de schémas ou de données (des bases de plusieurs tera octets ne posent pas de probleme).

Ca permet de profiter de la puissance d'une base unique pour les requetes, tout en permettant d'organiser au mieux les données: schémas logiques, droits spécifiques pour interdire certains schémas, exports bcp plus faciles, etc.)

Nicolas

Hors ligne

 

#6 Fri 18 January 2013 14:20

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Merci Nicolas pour le temps accordé.

Nous travaillons sur PG 9.2 et Postgis 2.0

A l'origine, la couche géographique intersectée est uniquement de type Multipolygon (couche zone végétation de la BDTOPO de l'IGN). Il semblerait que le problème vienne plus de ma requête d'intersection qui génère une seule table censée être du Multipolygon et interprétée par Qgis 1.8 comme trois couches de type Polygon, Linestring et point.

Lorsque j'ai intégré les différentes couches géographiques de la BDTOPO certaines sont restées en 2D et d'autres ont été automatiquement fixées en 4D. C'est le cas pour les couches géographiques correspondant aux routes, chemins, cours d'eau...

Concernant dblink on a pour le moment opté pour une organisation thématique des bases de données type cadastre, hydrographie, bdtopo, puis métier type habitat, tri... la mise en place de notre serveur est assez récente ce qui explique certains choix qui peuvent sembler ne pas être judicieux, je prends note de vos conseils d'organisation de données en démultipliant le nombre de schémas dans une même base de données.

Vous voulez une extraction sous quel format? un backup d'une des tables qui pose problème ?

Elodie

Dernière modification par Elodie11 (Fri 18 January 2013 14:24)


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#7 Fri 18 January 2013 15:12

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Lors d'une intersection, meme entre polygones, tous les types d'objets peuvent etre retournés: points (intersection sur un sommet), lignes (intersection sur un bord commun), etc.

QGis se base sur les types des données dans la table: en voyant des données hétérogènes, il propose "3 tables", ou plutot 3 visions sur la meme table.

Apres votre operation d'intersection, il me parait nécessaire de regarder le detail des types d'objets produits et eventuellement de supprimer de la table (ou mettre dans d'autres tables) les objets qui ne sont pas de types polygone.

Encore une fois, tres peu de SIG peuvent gérer une colonne géographique contenant des objets hétérogènes (OpenJump sait faire ca, si jamais...)

Concernant les multidimensions, je vous invite a convertir les données pour qu'elles soient coherentes entre elles.

Concernant l'organisation des données, je vous invite effectivement a fusionner vos "bases métier" (organisation logique) en une seule base de données (notion physique) et en schémas.

Oui un backup peut le faire, ou eventuellement un dump en shapefile de la table en question.

Nicolas

Hors ligne

 

#8 Fri 18 January 2013 15:28

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Nicolas,
concernant :

Apres votre operation d'intersection, il me parait nécessaire de regarder le detail des types d'objets produits et eventuellement de supprimer de la table (ou mettre dans d'autres tables) les objets qui ne sont pas de types polygone.


Le détail des objets produits et cette distinction de types se voit uniquement sous Qgis. Si je lance un st_GeometryType dans PgAdmin il me renvoie Multipolygon sur toutes les lignes.

Concernant les multidimensions, je vous invite a convertir les données pour qu'elles soient cohérentes entre elles.


j'avais pensé à cela mais je n'ai pas trouvé la fonction qui permet de le faire

Le backup et/ou le shp sont un peu lourd... je peux peut-être vous les envoyer par mail ?

Elodie


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#9 Fri 18 January 2013 15:33

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

j'ai parlé un peu trop vite...
j'ai relancé la requête suivante sur la table créée à l'issue de cette requête d'intersection :

select distinct st_geometrytype(geom_intersect)
from bdtopo_gn.z_veget


et il me renvoie :
- GEOMETRYCOLLECTION
- MULTILINESTRING
- MULTIPOLYGON
- POINT
- POLYGON

Elodie


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#10 Fri 18 January 2013 15:48

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

si je lance la même requête sur le fichier source il me renvoie MULTIPOLYGON.

select distinct geometrytype(geometrie)
from z_veget11


J'ai bien compris que

lors d'une intersection, meme entre polygones, tous les types d'objets peuvent etre retournés: points (intersection sur un sommet), lignes (intersection sur un bord commun), etc.


mais n'y a-t-il pas une fonction de "restriction" en quelque sorte qui permettrait de renvoyer uniquement le type MULTIPOLYGON ?

Elodie


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#11 Fri 18 January 2013 15:51

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Oui vous pouvez par mail (20 Mo je crois sur gmail: nicolas.ribot < at > gmail . com).

La fonction de conversion en 2D est celle que vous utilisez dans votre requete: st_force2D.
A utiliser dans un update:

update matable set the_geom = st_force2D(the_geom);

Pour la table d'intersection, je mettrais les données autre que MPolygon dans une table:
create table acontroler as (
   select * from tableintersection where geometryType(the_geom) != 'MULTIPOLYGON'
);

Puis je nettoierais la table d'intersection:

delete from tableintersection where geometryType(the_geom) != 'MULTIPOLYGON';

Vous auriez ainsi une table des intersections qui ont donné des multipolygones, et une autre table avec tous les autres types.

Au fait, une question: vous voulez vraimdent *decouper* les objets par rapport a une emprise, ou juste prendre tous les objets intersectant cette emprise ?
Dans le deuxieme cas, vous etes garantie que tous les objets seront du type de la table d'entrée.

Nicolas

Hors ligne

 

#12 Fri 18 January 2013 16:04

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

effectivement je n'avais pas pensé à un UPDATE...

Concernant cette précision :

Au fait, une question: vous voulez vraimdent *decouper* les objets par rapport a une emprise, ou juste prendre tous les objets intersectant cette emprise ?
Dans le deuxieme cas, vous etes garantie que tous les objets seront du type de la table d'entrée.


Nous avons fait le choix d'une "découpe" stricte des objets dans le cadre d'une convention de mise à disposition de données d'une étude où la continuité géographique n'est pas vraiment un enjeu. Obtenir uniquement les objets intersectant cette emprise m'aurait effectivement simplifié la vie...

Je vous envoie ma table à problème en backup.

Encore merci beaucoup Nicolas

Elodie


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#13 Fri 18 January 2013 17:27

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Elodie11 a écrit:

si je lance la même requête sur le fichier source il me renvoie MULTIPOLYGON.

select distinct geometrytype(geometrie)
from z_veget11


J'ai bien compris que

lors d'une intersection, meme entre polygones, tous les types d'objets peuvent etre retournés: points (intersection sur un sommet), lignes (intersection sur un bord commun), etc.


mais n'y a-t-il pas une fonction de "restriction" en quelque sorte qui permettrait de renvoyer uniquement le type MULTIPOLYGON ?

Elodie


Si, dans le select que vous faites, vous pouvez tester le type des geometries retournées par st_intersection et ne garder que des polygones:

Code:

SELECT DISTINCT  z_veget11.gid, z_veget11.id, z_veget11.prec_plani, nature, 
    st_intersection(z_veget11.geometrie,gn_2013.geometrie) as the_geom
FROM z_veget11,gn_2013
WHERE st_intersects(gn_2013.geometrie,z_veget11.geometrie)
and geometryType(st_intersects(gn_2013.geometrie,z_veget11.geometrie)) = 'MULTIPOLYGON';

(requete a optimiser pour eviter de calculer deux fois l'intersection, par exemple avec une sous requete).


Je regarde vos données...

Nicolas

Hors ligne

 

#14 Fri 18 January 2013 17:59

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

Voici ce que j'ai vu, si j'ai bien compris la problematique:

La table cst_lin11 contient les lignes a croiser avec la colonne the_geom de la table z_veget.

La requete d'intersection que j'ai lancée:

Code:

create table res as (
    select z.gid as zgid, c.gid as cgid, st_multi(st_intersection(z.the_geom, c.geometrie)) as geom
    from z_veget z join cst_lin11 c on (st_intersects(c.geometrie, z.the_geom))
);

Cette table contient des MULTILINESTRINGS et des MULTIPOINTS (j'utilise st_multi pour forcer la generation de multi objets dans tous les cas: ca genere moins de types d'objets différents)

ensuite:

Code:

delete from res where geometryType(geom) = 'MULTIPOINT';

(5 lignes uniquement)

La table res contient bien des objets homogènes que QGIs peut afficher.

je n'ai pas eu le message d'erreur: ERREUR:  lwcollection_construct: mixed dimension geometries: 0/2 lors de ce croisement, me laissant penser que la partie DBLink peut causer cette erreur: les deux serveurs ont-ils les memes versions de PG et PGIS ?

Sinon, pour corriger le probleme, en partant du principe que les dimensions Z et M ne vous interessent pas:

Code:

alter TABLE cst_lin11 ALTER COLUMN geometrie TYPE geometry(MultiLineString,3943) using st_force_2d(geometrie);

Les geometries de la table cst_lin11 sont alors en 2D.

Idem avec l'autre table:

Code:

alter TABLE z_veget ALTER COLUMN the_geom TYPE geometry(MultiPolygon,3943) using st_force_2d(the_geom);

Puis la requete finale ne gardant que des geometries du type que vous voulez:

Code:

with inter as (
    select z.gid as zgid, c.gid as cgid, st_multi(st_intersection(z.the_geom, c.geometrie)) as geom
    from z_veget z join cst_lin11 c on (st_intersects(c.geometrie, z.the_geom))
) select * from inter where geometryType(geom) = <le type a filtrer>

Nicolas

Hors ligne

 

#15 Fri 18 January 2013 18:08

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

en fait c'est la table ci-jointe que je croise avec l'ensemble des couches géographiques de la BD topo de l'IGN.

cst_lin11 fait partie des tables que je n'arrive pas à intersecter avec gn_2013.

Désolée, vous êtes vraiment rapide !

Dernière modification par Elodie11 (Fri 18 January 2013 18:10)


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

#16 Fri 18 January 2013 18:18

Elodie11
Participant actif
Lieu: IN'ESS Le Grand Narbonne
Date d'inscription: 15 Feb 2008
Messages: 54
Site web

Re: Postgis 2.0 Intersection : ERREUR mixed dimension geometries: 0/2

je vous ai également envoyé par mail le backup de la table gn_2013.

Je vais lancer la chaine de traitement que vous me proposez (en l'adaptant à gn_2013), en attendant vos remarques avec cette fois ci le croisement des envois précédents avec la table gn_2013.

merci encore pour votre motivation !

Elodie


Elodie SOLÉ
Responsable Direction Géomatique
Grand Narbonne Communauté d'Agglomération

Hors ligne

 

Pied de page des forums

Powered by FluxBB