[postgis-users] ST_intersects : error message

Rémi Cura remi.cura at gmail.com
Mon Dec 2 10:33:37 PST 2013


Salut Laurent,
on peut imaginer plusieurs approches pour ton problème, en fonction de la
taille de tes données, de la précision voulue, etc.

En résumé tu as un fichier de polygons (combien?) qui représentent un
maillage de la France (département, IRIS, région?).
Et un fichier de point Lidar (2 millions) répartis sur toute la France et
en dehors.

Tu as 4 options :
_améliorer ta requete
_réduire le nombre de polygon
_ réduire le nombre de points.
_augmenter la puissance de calcul

1.)améliorer la requete :
C'est assez simple : en fait tu veux les points qui sont dans les
polygones, tu n'as donc pas besoin de calculer une intersection mais juste
un intersect.

CREATE TABLE example_intersections_a AS
SELECT  part_2.geom
FROM fra_adm0 AS part_1,france_merge_pts1 AS part_2
WHERE ST_Intersects(part_1.geom, part_2.geom)=TRUE;

2.) réduire le nombre de polygones
fusionne les polygones régulièrement en te basant sur leur centroides:
Par exemple, tu regroupes les polygones dont les centroids sont à 10 km les
uns des autres :

CREATE TABLE m_pol AS
WITH centroid AS (
SELECT ST_Centroid(geom), geom
FROM fra_adm0
)
SELECT row_number() over() AS r_id, ST_Multi(geom) AS geom
FROM centroid
GROUP BY round(ST_X(centroid)/10000.0)  , round(ST_Y(centroid)/10000.0)

variante de la meme requete :
WITH centroid AS (
SELECT ST_Centroid(geom), geom
FROM fra_adm0
)
SELECT row_number() over() AS r_id,  ST_Multi(geom) AS geom
FROM centroid
GROUP BY ST_SnapToGrid(centroid, 10000.0)

Tu crées un index sur la colonne unioned_polygon et tu utilises cette table
plutôt que l'autre dans ta requête d'intersection entre les points et les
polygones
CREATE INDEX ...

CREATE TABLE example_intersections_a AS
SELECT  part_2.geom
FROM m_pol AS part_1,france_merge_pts1 AS part_2
WHERE ST_Intersects(part_1.geom, part_2.geom)=TRUE;


3.) Réduire le nombre de points,
C'est le même principe, on va réunir les points qui sont assez proches pour
en diminuer le nombre.
A la place des points on aura donc des multipoints.
Note qu'après certains multipoints contiendront des points en trop, il
faudra donc faire un passage avec st_intersection sur le resultat,mais on
ne fera se passe que sur les multipoints qui sont sur les frontières.

CREATE TABLE g_point AS
SELECT row_number() over() AS r_id,  ST_Multi(geom) AS geom
FROM france_merge_pts1
GROUP BY ST_SnapToGrid(geom, 10000.0)

créer l'index sur la colonne geom
utiliser ces multipoints dans ta requête

fair est_intersection sur les multipoints qui sont sur les frontières de la
France.

Bon courage,

Rémi-C




2013/12/2 laurent <lcelati at latitude-geosystems.com>

> I imported my 2 layers into db thanks to postgis tools. An spatial index
> has
> been created after the loading automatically.
> Indeed, via my qgis DB manager, i can confirm the spatial index creation
> for
> my two tables...
>
>
>
>
>
>
>
> --
> View this message in context:
> http://postgis.17.x6.nabble.com/ST-intersects-error-message-tp5005029p5005033.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/20131202/536828fe/attachment.html>


More information about the postgis-users mailing list