[postgis-users] ST_intersects : valeurs champs?

Rémi Cura remi.cura at gmail.com
Tue Dec 3 04:47:18 PST 2013


Bonjour,

(petite apparté : j'imagine que ce n'est pas ce que vous voulez entendre,
mais il est catastrophique de donner des noms génériques aux colonnes
(field1, field2), d'autant que vous suggérez qu'il y ait un ordre dans les
colonnes (pas le cas). Pourquoi ne pas les appeller X,Y,Z (ce que ça a
l'air d'être). De même votre field 3 ne devrait pas être un texte
(varchar), mais visblement un numeric ou un real.)

En fait la requête que vous faite n'est pas adaptée :
en théorie vous pourriez avoir des duplications des points (surtout si les
départements ont des zones de recouvrement, par exemple les frontières)
 Pour s'assurer de l'unicité, vous pouvez utiliser le mot "distinct", pour
être sur de ne pas avoir 2 points identiques dans le résultat.
Vous pouvez egalement utiliser une autre condition dans le WHERE pour
enlever les lignes ou "field_3" est vide :


CREATE TABLE example_intersections_a_v2 AS
SELECT DISTINCT ON (part2.geom) part_2.geom,field_1,field_2,
field_3
FROM fra_adm2 AS part_1,france_merge_pts1 AS part_2
WHERE ST_Intersects(part_1.geom, part_2.geom)=TRUE
AND field_3 IS NOT NULL;


Toutefois il y a une possibilité pour que vous vouliez dedupliqué en
gardant de préférence les lignes out field_3 n'est pas nul,
pour cela il faut rajouter un ordre dans le déduplication, ce qui donnerait
:

CREATE TABLE example_intersections_a_v2 AS
SELECT DISTINCT ON (part2.geom) part_2.geom,field_1,field_2,
field_3
FROM fra_adm2 AS part_1,france_merge_pts1 AS part_2
WHERE ST_Intersects(part_1.geom, part_2.geom)=TRUE
AND field_3 IS NOT NULL
ORDER BY part_2.geom ASC, field_3 ASC;






(Un petit exemple sur l'ordre dans la déduplication :
    SELECT DISTINCT ON (s1 ) s1,s2
        FROM (
            SELECT s AS s1, s AS s2
            FROM generate_series(1,10) AS  s
            UNION
            SELECT 2, NULL
        ) as foo
        ORDER BY s1 ASC, s2 ASC
)dans cet exemple, la ligne avec (2, NULL) qu'on a rajouté n'est pas prise
par rapport à la ligne avec (2,2) car 2 est avant NULL dans l'ordre (NULL
est a la fin par défaut)

Cordialement,
Rémi-C



Le 3 décembre 2013 12:53, laurent <lcelati at latitude-geosystems.com> a écrit
:

> Bonjour,
>
> Merci à vous pour vos conseils. Vous aviez raison. En utilisant le layer
> départements la requete fut bien plus rapide. J'ai donc écrit cette requete
> :
> -------------
> CREATE TABLE example_intersections_a_v2 AS
> SELECT  part_2.geom,field_1,field_2,field_3
> FROM fra_adm2 AS part_1,france_merge_pts1 AS part_2
> WHERE ST_Intersects(part_1.geom, part_2.geom)=TRUE;
> -------------
>
> A la ligne 2, j'ai simplement spécifié que je voulais dans ma nouvelle
> table
> non seulement les valeurs des champs geom mais également celles de 3 autres
> champs field1, field2, field3.
> La requete a bien fonctionné. Toutefois, je constate que la grande majorité
> des valeurs de mon champ field 3 n'ont pas été importées dans ma nouvelle
> table.
>
> Sauriez vous d'où peut venir ce problème? Ce field3 est un type de champ
> "character varying (254)". Les 2 autres champs ont pour type : 'numeric'.
>
> Voici ci dessous une SS de ma table montrant les valeurs manquantes :
>
> <http://postgis.17.x6.nabble.com/file/n5005042/SS_valeurs_champs.jpg>
>
>
>
>
>
>
> --
> View this message in context:
> http://postgis.17.x6.nabble.com/ST-intersects-error-message-tp5005029p5005042.html
> Sent from the PostGIS - User mailing list archive at Nabble.com.
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20131203/dc173cf0/attachment.html>


More information about the postgis-users mailing list