[postgis-users] Get parallel some route.
Guillaume ARNAUD
guillaume.arnaud at cg82.fr
Thu Jan 29 03:47:10 PST 2015
Bonjour,
Merci, encore, pour votre intérêt pour notre problème.
De mémoire j'avais utilisé st_isvalid et st_isvaliddetail. Dans le
doute, j'ai repassé la commande :
SELECT ST_IsValid(shape) as Geom_valide, ST_IsValidDetail(shape) as
detail_valide, count(*) nombre FROM web.trs_itineraire GROUP BY
Geom_valide, detail_valide;
Les géométrie semblent toutes être valides... geom_valide = t |
detail_valide = "(t,,)" | nombre = 292
Pour la commande ST_translate, j'avais vu cette indication sur internet.
Seule, elle ne fonctionnais pas.
J'avais cherché le point "minimum" de la couche : select
min(st_xmin(shape)) min_x,min(st_ymin(shape)) min_y from
web.trs_itineraire; ==>min_x = 520394.788999997 , min_y = 6301986.0903
De ces coordonnées, j'avais fait la requête suivante : select
ST_OffsetCurve(st_translate(shape, -520394, -6301986), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 11066.75663285854 35347.473570651164
********** Erreur **********
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not match
at 11066.75663285854 35347.473570651164
État SQL :XX000
J'ai essayé de façon indépendante snaptogrid avec des coefficient
différent :
- select ST_OffsetCurve(ST_SnapToGrid(shape, 0.1), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
534828.30239658395 6316145.6034858041
********** Erreur **********
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
534828.30239658395 6316145.6034858041
État SQL :XX000
select ST_OffsetCurve(ST_SnapToGrid(shape, 1), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 589936.02229587745 6352438.5769232772
********** Erreur **********
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not match
at 589936.02229587745 6352438.5769232772
État SQL :XX000
select ST_OffsetCurve(ST_SnapToGrid(shape, 10), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
530970.00000000035 6337320
********** Erreur **********
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
530970.00000000035 6337320
État SQL :XX000
J'ai essayé un mix des 2 :
select ST_OffsetCurve(st_translate(ST_SnapToGrid(shape, 10), -520394,
-6301986), 25, 'quad_segs=4 join=round') as offseted_linestring from
web.trs_itineraire;
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 69544.468193216031 50450.347638143896
********** Erreur **********
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not match
at 69544.468193216031 50450.347638143896
État SQL :XX000
select ST_OffsetCurve(ST_SnapToGrid(st_translate(shape, -520394,
-6301986), 10), 25, 'quad_segs=4 join=round') as offseted_linestring
from web.trs_itineraire;
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 73453.968270171856 50989.226202628888
********** Erreur **********
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not match
at 73453.968270171856 50989.226202628888
État SQL :XX000
Je dépose les données (exporté en shape à partir d'Arcgis Desktop) sur
un espace personnel : http://guigui182.free.fr/travail/export.zip
Si besoin de tout autre chose, je me tiens à votre disposition.
Merci encore pour votre aide.
Guillaume ARNAUD
Le 28/01/2015 18:39, Rémi Cura a écrit :
> Ah,
> effectivement l'erreur n'est pas du tout la même
>
> Il s'agit peut être de géométrie non valide
> Vous pouvez le vérifier facilement avec les fonctions
> ST_IsValid <http://postgis.net/docs/ST_IsValid.html> , et
> ST_IsValidDetail <http://postgis.net/docs/ST_IsValidDetail.html>.
> Si vous avez des géométries non valide, vous pouvez les corriger avec
> ST_MakeValid <http://postgis.net/docs/ST_MakeValid.html>
>
> Si toutes les géométries sont valides les choses vont se corser :
> - Arrondir les coordonnées des points des lignes (fonction
> ST_SnapToGrid <http://postgis.net/docs/ST_SnapToGrid.html> )
> - translater les données pour diminuer le nombre de chiffre des
> coordonnées (547354.26116135239 6344318.7079305416 ---> 354,.... ;
> 318,...)
>
> Si rien ne marche, pas de panique, il suffit d'extraire un exemple
> minimal de ce qui ne marche pas
> (par exemple donner publiquement les quelques géométries qui
> provoquent le problème),
> ainsi que la requete associée.J
>
> e créerais ensuite un ticket pour demander aux developpeurs de régler
> le bug.
>
> Je n'aurais pas accès à internet avant Lundi, je vous souhaite donc
> bon courage
>
> Salutations,
> Rémi-C
>
> Le 28 janvier 2015 16:56, Guillaume ARNAUD <guillaume.arnaud at cg82.fr
> <mailto:guillaume.arnaud at cg82.fr>> a écrit :
>
> (re) Bonjour,
>
> Merci pour votre retour rapide, mais, comme je l'indiquais dans le
> mail précédent, j'ai bien vérifié que mes lignes soient bien des
> linestring en utilisant la requête suivante :
> "select st_geometrytype(shape) type_geom, count (*) from
> web.trs_itineraire group by type_geom" ==== > Réponse : 1 ligne
> : type geom = "ST_LineString", count = 292
> Lors de mon tout premier essai, j'avais 3 multilinestring que j'ai
> identifiées et reprise pour les transformer en linestring.
>
> Elles ne sont pourtant pas "simple" :
> "select st_issimple(shape) geom_simple, count (*) from
> web.trs_itineraire group by geom_simple ==== > Réponse : 2 ligne :
> geom_simple : "f", count 244 /// geom_simple : "t", count : 48
>
> Je viens de relire mon mail et je vois que je n'ai jamais écrit le
> message d'erreur :
>
> ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do
> not match at 547354.26116135239 6344318.7079305416
> ********** Erreur **********
> ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
> match at 547354.26116135239 6344318.7079305416
> État SQL :XX000
>
> J'ai ce message pour ma requête comme pour la votre (si je l'ai
> bien adapté) :
>
> SELECT ST_OffsetCurve(theGeom, 25, 'quad_segs=4 join=round') AS
> theOffset
> FROM (
> SELECT (ST_Dump(shape)).geom AS theGeom
> FROM web.trs_itineraire
> where code = '06-20B'
> ) AS subQuery;
>
> l'itineraire pris en exemple a ce dessin :
>
>
>
> Il y a donc 3 aller retour sur les excroissance que l'on peut voir
> et donc autant de point utilisé plusieurs fois que ces branche en
> comporte.
>
> Pour ce qui est des index, il y en a bien sur code, code + nom et
> nom. Pour ce qui est des injections SQL , nous essayons de
> respecter les préconisation en la matière (bien qu'on ne soit
> jamais à l'abris)...
>
> Merci encore pour votre aide. En espérant que mon problème est une
> solution.
>
> Guillaume.
>
>
> Le 28/01/2015 16:02, Rémi Cura a écrit :
>> /* For the list archive : problem is probably using
>> ST_OffsetCurve with multilinestring instead of linestring.*/
>>
>> Bonjour,
>>
>> St_OffsetCurve ne fonctionne qu'avec des géométries simples.
>> Pour PostGIS (et le standard),*les géométries simples sont des
>> géométries qui ne sont pas composées*.
>> En clair, vous avez probablement des lignes de type
>> multilinestring (composition de plusieurs polylignes).
>> La solution est immédiate si vous souhaitez simplement faire de
>> la visualisation (non testée):
>>
>> -------------------------------------
>> SELECT objectid, nom, code
>> , ST_OffsetCurve(dmp.geom, 25, 'quad_segs=4 join=round') as
>> offseted_linestring
>> FROM web.trs_itineraire , st_Dump(shape) as dmp
>> WHERE code = '06-20B'
>> -------------------------------------
>>
>> Attention,
>> cette requête duplique les lignes (si votre multi-polyligne
>> comporte par exemple 3 polylignes, dans le résultat final vous
>> allez avoir 3 rows, identiques si ce n'est la géométrie qui change).
>> On peut facilement éviter ce comportement si vous le souhaitez en
>> regroupant à nouveau les polylignes qui ont été décalées :
>>
>> ---------------------------------------
>> SELECT objectid, nom, code, ST_Collect(offseted_linestring) as
>> offseted_multilinestring
>> FROM
>> (SELECT objectid, nom, code , dmp.path
>> , ST_OffsetCurve(dmp.geom, 25, 'quad_segs=4 join=round') as
>> offseted_linestring
>> FROM web.trs_itineraire , st_Dump(shape) as dmp
>> WHERE code = '06-20B'
>> ) as sub
>> GROUP BY objectid, nom, code
>> ORDER BY dmp.path
>> -----------------------------------------
>>
>> Enfin, je me permets un petit rappel puisque vous êtes
>> probablement dans un contexte web ;
>> vous insérer probablement le code " '06-20B'" , il est imperatif
>> de le faire à l'aide de fonctions sécurisée pour éviter les
>> injections SQL
>> (et surtout pas par concaténation de texte)
>> Code doit de plus avoir un index /* CREATE INDEX ON
>> web.trs_itineraire (code) */ pour que cette requête soit efficace
>>
>> Salutations,
>> Rémi-C
>>
>>
>> Le 28 janvier 2015 14:02, Guillaume ARNAUD
>> <guillaume.arnaud at cg82.fr <mailto:guillaume.arnaud at cg82.fr>> a
>> écrit :
>>
>> (re) Bonjour,
>>
>> Donc, en français... Nous avons une base PosTGIS qui est
>> attaqué par ArcGIS Server and Desktop 10.2.
>>
>> Nous souhaitons gérer, à travers une interface web, les
>> décalages de plusieurs itinéraires de transport scolaire
>> sélectionné et conserver ce décalage en vue d'une
>> réutilisation de cette sélection ultérieurement. Ceci est
>> uniquement dans un but de représentation des itinéraires
>> quand ils se trouvent superposés dans la sélection.
>>
>> Pour cela, je pensais utiliser la fonction
>> ST_OffsetCurve(shape, decalage, 'quad_segs=4 join=round'). Où
>> le decalage prend la valeur -2, -1, 0, 1 ou 2 que multiplie
>> un facteur d'échelle.
>>
>> Toute notre base de données d'itinéraire est de type
>> linestring (quand on fait st_geometrytype(shape)) par contre,
>> 250 des 300 itinéraire ne sont pas simple (st_issimple(shape)
>> = f).
>>
>> Après quelques recherche, j'ai vu que le problème devais
>> venir de là. J'ai essayé, sans trop comprendre d'utiliser
>> "st_simplifypreservetopology" mais le problème reste le même
>> (dans la majorité des cas) et quand ça marche sur un
>> itinéraire ça ne change pas pour autant le st _issimple :
>>
>> SELECT objectid, nom, code, ST_OffsetCurve(shape, 25,
>> 'quad_segs=4 join=round') from web.trs_itineraire where code
>> = '06-20B' ====> Ne fonctionne pas.
>>
>> SELECT ST_issimple(shape) from web.trs_itineraire where code
>> = '06-20B' ====> False
>>
>> SELECT objectid, nom, code,
>> ST_OffsetCurve(st_simplifypreservetopology(shape,0.6), 25,
>> 'quad_segs=4 join=round') from web.trs_itineraire where code
>> = '06-20B'
>>
>> SELECT ST_issimple(st_simplifypreservetopology(shape,0.6))
>> from web.trs_itineraire where code = '06-20B' ====> False
>>
>> Nos itinéraires peuvent faire des aller retour sur des même
>> axes de voirie et donc partage des noeuds en communs.
>>
>> Le but est simplement de le voir. J'ai aussi envisagé comme
>> solution un demi buffer mais l'exemple trouvé sur internet ne
>> me parle pas.
>>
>> Un autre solution serait d'eclater l'itineraire en plusieurs
>> partie "simple" et de décaler toutes ces partie mais je n'ai
>> pas trouver comment faire pour éclater cet itineraire.
>>
>> Merci de vos réponses et de votre intérêt pour ma question.
>>
>> Guillaume ARNAUD
>>
>> Le 28/01/2015 12:32, Rémi Cura a écrit :
>>> Same,
>>>
>>> On peut répondre à la question en français,
>>> il y en a quelques un sur la mailing list...
>>>
>>> Rémi-C
>>>
>>> 2015-01-28 11:44 GMT+01:00 Nicolas Ribot
>>> <nicolas.ribot at gmail.com <mailto:nicolas.ribot at gmail.com>>:
>>>
>>> Hi Guillaume,
>>>
>>> Not sure I understand what you want to achieve.
>>> Can you describe it, maybe with an image. (or in french)
>>>
>>> Non-simple lines can be cut at their intersection to
>>> make them simple.
>>>
>>> Nicolas
>>>
>>> On 28 January 2015 at 09:16, Guillaume ARNAUD
>>> <guillaume.arnaud at cg82.fr
>>> <mailto:guillaume.arnaud at cg82.fr>> wrote:
>>>
>>> Hello,
>>>
>>> We use Postgre / Postgis database with ArcGIS Server
>>> and Desktop 10.2. All our data are inserted with
>>> keyword Postgis into our database.
>>>
>>> The table that has the trouble is a route table with
>>> 292 linestring. I need these routes is not bunk. I
>>> try to use ST_OffsetCurve function to do this. I
>>> found on the help and on a ticket that we must have
>>> geometry which is simple. More than 250 isn't. Is
>>> there any solution to fix the problem or to bypass
>>> the problem .
>>>
>>> Thanks for your work.
>>>
>>> Greating.
>>>
>>> ARNAUD Guillaume
>>>
>>> Sorry for my poor english, I'm french.
>>>
>>> "PostgreSQL 9.2.2, compiled by Visual C++ build
>>> 1600, 64-bit POSTGIS="2.0.4" GEOS="3.4.2-CAPI-1.8.2
>>> r0" PROJ="Rel. 4.8.0, 6 March 2012" GDAL="GDAL
>>> 1.10.0, released 2013/04/24" LIBXML="2.7.8"
>>> LIBJSON="UNKNOWN" (core procs from "2.0.4" need
>>> upgrade) RASTER (raster procs from "2.0.4" need
>>> upgrade)"
>>>
>>> OS : Windows Server Standard SP 2
>>>
>>> --
>>> Guillaume ARNAUD
>>> Cellule SIGD
>>> Direction de l'Informatique
>>> Conseil Général de Tarn-et-Garonne
>>>
>>>
>>> _______________________________________________
>>> postgis-users mailing list
>>> postgis-users at lists.osgeo.org
>>> <mailto:postgis-users at lists.osgeo.org>
>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>
>>>
>>>
>>> _______________________________________________
>>> postgis-users mailing list
>>> postgis-users at lists.osgeo.org
>>> <mailto:postgis-users at lists.osgeo.org>
>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>
>>>
>>
>> --
>> Guillaume ARNAUD
>> Cellule SIGD
>> Direction de l'Informatique
>> Conseil Général de Tarn-et-Garonne
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org
>> <mailto:postgis-users at lists.osgeo.org>
>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>
>>
>
> --
> Guillaume ARNAUD
> Cellule SIGD
> Direction de l'Informatique
> Conseil Général de Tarn-et-Garonne
> 05-63-91-82-37 <tel:05-63-91-82-37>
> En interne, utilisez le Click To Call : 8237
> <https://10.200.3.1:8443/webdialer/Webdialer?destination=8237>
>
>
--
Guillaume ARNAUD
Cellule SIGD
Direction de l'Informatique
Conseil Général de Tarn-et-Garonne
05-63-91-82-37
En interne, utilisez le Click To Call : 8237
<https://10.200.3.1:8443/webdialer/Webdialer?destination=8237>
test <http://www.carto.cg82.fr/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20150129/750b6337/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 833 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20150129/750b6337/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: logo-sigd.jpg
Type: image/jpeg
Size: 58419 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20150129/750b6337/attachment.jpg>
More information about the postgis-users
mailing list