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é ?

#1 Fri 17 September 2010 11:04

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 611

[POSTGIS] GEOS LineMerge() threw an error!

Bonjour,

Pour raccorder des points sur un réseau de routes, j'utilise les fonctions suivantes:

Code:

....
line_interpolate_point(
ST_LineMerge(b.the_geom),
line_locate_point(ST_LineMerge(b.the_geom),a.the_geom))
 as geom_corr
 FROM
     point_gps as a
 JOIN
    reso as b
....

J'ai près de 2 millions de points à raccrocher.

La requête fonctionne sur un échantillon de 10000 points mais ne fonctionne pas sur l'ensemble des points.
J'ai effectivement le message d'erreur suivant :

Code:

GEOS LineMerge() threw an error!

J'ai vérifié au préalable que tous mes points sont bien des POINT et que tous mes tronçons sont MULTILINESTRING, qu'il n'y a pas de géométries NULL et qu'aucun de mes tronçons ont une longueur égale à zero.

Je m'attendais plutôt à avoir un problème de mémoire du genre "mémoire épuisée" mais c'est un problème avec GEOS.

Auriez-vous des suggestions? Merci d'avance


Pascal PLUVINET

Hors ligne

 

#2 Fri 17 September 2010 13:38

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

Re: [POSTGIS] GEOS LineMerge() threw an error!

ppluvinet a écrit:

Bonjour,

Pour raccorder des points sur un réseau de routes, j'utilise les fonctions suivantes:

Code:

....
line_interpolate_point(
ST_LineMerge(b.the_geom),
line_locate_point(ST_LineMerge(b.the_geom),a.the_geom))
 as geom_corr
 FROM
     point_gps as a
 JOIN
    reso as b
....

J'ai près de 2 millions de points à raccrocher.

La requête fonctionne sur un échantillon de 10000 points mais ne fonctionne pas sur l'ensemble des points.
J'ai effectivement le message d'erreur suivant :

Code:

GEOS LineMerge() threw an error!

J'ai vérifié au préalable que tous mes points sont bien des POINT et que tous mes tronçons sont MULTILINESTRING, qu'il n'y a pas de géométries NULL et qu'aucun de mes tronçons ont une longueur égale à zero.

Je m'attendais plutôt à avoir un problème de mémoire du genre "mémoire épuisée" mais c'est un problème avec GEOS.

Auriez-vous des suggestions? Merci d'avance


Bonjour,

Les linestring sont elles valides (st_isValid) (je sais pas si une linestring peut etre invalide, d'ailleurs wink)?
Sinon, les nettoyer avant de lancer la commande.

Quelle version de PG/PGis ? La 1.5 permet de demander la raison de l'invalidité (st_isValidReason).

Normalement, GEOS donne la raison de l'erreur, et souvent aussi la localisation de l'erreur en terme de coordonnées.

Nicolas

Hors ligne

 

#3 Fri 17 September 2010 14:06

ppluvinet
Participant assidu
Lieu: VALENCE
Date d'inscription: 6 Aug 2007
Messages: 611

Re: [POSTGIS] GEOS LineMerge() threw an error!

J'avais effectivement fait un st_valid ne sachant pas non plus quels pouvaient être les raisons d'invalidité sur des lignes ou des points. Or, mes deux tables sont valides.
Ici GEOS ne m'a pas indiqué d'autres info comme ca peut être le cas pour une self-intersection.
Ma version de Postgis est la 1.4, je n'est pas encore changé vers la 1.5. Est-ce que le changement de version pourrait permettre de régler cette erreur?


Pascal PLUVINET

Hors ligne

 

#4 Fri 17 September 2010 17:33

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

Re: [POSTGIS] GEOS LineMerge() threw an error!

ppluvinet a écrit:

J'avais effectivement fait un st_valid ne sachant pas non plus quels pouvaient être les raisons d'invalidité sur des lignes ou des points. Or, mes deux tables sont valides.
Ici GEOS ne m'a pas indiqué d'autres info comme ca peut être le cas pour une self-intersection.
Ma version de Postgis est la 1.4, je n'est pas encore changé vers la 1.5. Est-ce que le changement de version pourrait permettre de régler cette erreur?


Je ne sais pas, mais en tout cas, la nouvelle version de geos fournie avec 1.5 est bcp plus robuste, et plus verbeuse en cas d'erreur.

Nico

Hors ligne

 

Pied de page des forums

Powered by FluxBB