#1 Fri 17 September 2010 11:04
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
[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: 1554
Re: [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
Bonjour,
Les linestring sont elles valides (st_isValid) (je sais pas si une linestring peut etre invalide, d'ailleurs )?
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: 617
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: 1554
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?
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