Fonction ST_GeomUnionArg

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Fonction ST_GeomUnionArg

MaudC
Bonjour,

Je souhaite fusionner deux couches vecteurs, j'ai donc utiliser la fonction ST_GeomUnionArg.

CREATE TABLE ZonesProtegees AS SELECT ST_GeomUnionArg(a.the_geom,b.the_geom) AS the_geom,  a.ID_MNHN, a.ID_ORG, a.NOM, a.SUPERFICIE, a.date_ FROM pn2010 a, pnr2012 b;

Ma première couche contient 11 lignes, ma deuxième 45. Or ma nouvelle table en contient 495 ! Et certaines lignes sont identiques. Est ce que j'utilise mal la fonction ? Ou alors peut être est-ce dû aux zones où les deux couches intéragissent ?

En tout cas sur ma carte, la fonction a bien fonctionner. Mais je souhaitais effectuer cette requête pour une dizaine de couches pour n'en obtenir qu'une et je souhaite donc minimiser la base de donnée.

J'ai téléchargé les données des zones protégées en France sur le site suivant :
http://inpn.mnhn.fr/telechargement/cartes-et-information-geographique#

Cordialement,

Maud

Reply | Threaded
Open this post in threaded view
|

Re: Fonction ST_GeomUnionArg

Gwendall Petit
Administrator
Bonjour Maud,

Que souhaites-tu précisément faire ? Tu souhaites "compiler" différents objets présents dans différentes tables au sein d'une seule table, ou bien "fusionner" plusieurs objets de différentes tables en un seul objet présent dans une nouvelle table ?

Si tu souhaites faire la première option (compiler), il faut que tu utilises la fonction UNION, en veillant à ce que l'ordre, le nom et le type de champ soit bien identique entre les deux tables :
CREATE TABLE ZonesProtegees AS SELECT the_geom as the_geom, ID_MNHN, ID_ORG, NOM, SUPERFICIE, date_ FROM pn2010 UNION SELECT the_geom as the_geom, ID_MNHN, ID_ORG, NOM, SUPERFICIE, date_ FROM pnr2012;
Si tu souhaites faire la deuxième option (fusionner), alors, tu pourrais peut-être tenter quelque chose comme ça :
CREATE TABLE ZonesProtegees AS SELECT ST_Union(the_geom) as the_geom, SUM(SUPERFICIE) as SUPERFICIE FROM pn2010 UNION SELECT ST_Union(the_geom) as the_geom, SUM(SUPERFICIE) as SUPERFICIE FROM pnr2012;

CREATE TABLE ZonesProtegees_union AS SELECT ST_Union(the_geom) as the_geom, SUM(SUPERFICIE) as SUPERFICIE FROM ZonesProtegees
Dans ce cas, tu noteras que tu perds des informations (ici on ne peut conserver que la géométrie et la somme des superficie).

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Fonction ST_GeomUnionArg

MaudC
Bonjour,

Merci, je pense que c'est la 2ème solution que je veux. Le site où j'ai trouvé les données propose une dizaine de vecteurs pour différentes zones protégées, je souhaite toute les regrouper pour obtenir un vecteur avec l'ensemble des zones protégées en France et donc l'exclure des zones potentielles de culture de biocarburants !

J'ai essayé la 2ème solution, mais il faudra que j'essaye sur un autre ordinateur, celui ci me renvoie : "Erreur fatale lors du processus Ouvrir la source de données ZonesProtegees_union
java.lang.OutOfMemoryError: Java heap space"
Par contre quand je l'affiche dans le Toc ça marche... Je ne vois par contre aucune différence entre ZonesProtegees et ZonesProtegees_union ni avec la 1ère table que j'avais créée avec la fonction ST_GeomUnionArg.

Cordialement,

Maud


Reply | Threaded
Open this post in threaded view
|

Re: Fonction ST_GeomUnionArg

Gwendall Petit
Administrator
Bonjour Maud,

La différence entre ZonesProtegees et ZonesProtegees_union est assez simple :
  - Dans ZonesProtegees tu as deux objets (un pour chaque table)
  - Dans ZonesProtegees_union tu n'as qu'un seul objet (l'unification des deux précédent)

Par ailleurs, en fonction de ton jeu de données en entrée il est fort probable que le traitement soit gourmand en ressource mémoire. La fonction ST_Union est connue pour ça.

Il faudrait peut-être réfléchir à un moyen d'alléger tout ça si besoin (comme par exemple exploser la couche finale, afin simplifier l'affichage).

Cordialement,

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Fonction ST_GeomUnionArg

MaudC
En effet, c'est efficace, merci !

Bonne journée,

Maud