<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Bonjour, <br>
<br>
Merci, encore, pour votre intérêt pour notre problème.<br>
De mémoire j'avais utilisé st_isvalid et st_isvaliddetail. Dans le
doute, j'ai repassé la commande :<br>
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;<br>
Les géométrie semblent toutes être valides... <font color="#999999">geom_valide
= t | detail_valide = "(t,,)" | nombre = 292<br>
</font><br>
Pour la commande ST_translate, j'avais vu cette indication sur
internet. Seule, elle ne fonctionnais pas.<br>
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; ==><font color="#999999"> min_x =
520394.788999997 , min_y = 6301986.0903</font><br>
<br>
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;<br>
<font color="#999999">ERREUR: GEOSOffsetCurve: TopologyException:
assigned depths do not match at 11066.75663285854
35347.473570651164<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 11066.75663285854 35347.473570651164<br>
État SQL :XX000</font><br>
<br>
J'ai essayé de façon indépendante snaptogrid avec des coefficient
différent : <br>
- select ST_OffsetCurve(ST_SnapToGrid(shape, 0.1), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;<br>
<font color="#999999">ERREUR: GEOSOffsetCurve: TopologyException:
depth mismatch at at 534828.30239658395 6316145.6034858041<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
534828.30239658395 6316145.6034858041<br>
État SQL :XX000</font><br>
select ST_OffsetCurve(ST_SnapToGrid(shape, 1), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;<br>
<font color="#999999"> ERREUR: GEOSOffsetCurve: TopologyException:
assigned depths do not match at 589936.02229587745
6352438.5769232772<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 589936.02229587745 6352438.5769232772<br>
État SQL :XX000</font><br>
select ST_OffsetCurve(ST_SnapToGrid(shape, 10), 25, 'quad_segs=4
join=round') as offseted_linestring from web.trs_itineraire;<font
color="#999999"><br>
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
530970.00000000035 6337320<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: depth mismatch at at
530970.00000000035 6337320<br>
État SQL :XX000</font><br>
<br>
J'ai essayé un mix des 2 :<br>
<font color="#999999"><font color="#000000">select
ST_OffsetCurve(st_translate(ST_SnapToGrid(shape, 10), -520394,
-6301986), 25, 'quad_segs=4 join=round') as offseted_linestring
from web.trs_itineraire;</font><br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do
not match at 69544.468193216031 50450.347638143896<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 69544.468193216031 50450.347638143896<br>
État SQL :XX000</font><br>
select ST_OffsetCurve(ST_SnapToGrid(st_translate(shape, -520394,
-6301986), 10), 25, 'quad_segs=4 join=round') as offseted_linestring
from web.trs_itineraire;<br>
<font color="#999999">ERREUR: GEOSOffsetCurve: TopologyException:
assigned depths do not match at 73453.968270171856
50989.226202628888<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned depths do not
match at 73453.968270171856 50989.226202628888<br>
État SQL :XX000</font><br>
<br>
Je dépose les données (exporté en shape à partir d'Arcgis Desktop)
sur un espace personnel :
<a class="moz-txt-link-freetext" href="http://guigui182.free.fr/travail/export.zip">http://guigui182.free.fr/travail/export.zip</a><br>
<br>
Si besoin de tout autre chose, je me tiens à votre disposition.<br>
<br>
Merci encore pour votre aide.<br>
<br>
Guillaume ARNAUD<br>
<br>
<br>
<div class="moz-cite-prefix">Le 28/01/2015 18:39, Rémi Cura a
écrit :<br>
</div>
<blockquote
cite="mid:CAJvUf_sw+xJWJmgiC3iOrgS7GrwzvYvP-Xg=kjC-M9NcUxDahg@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>Ah,<br>
</div>
effectivement l'erreur n'est pas du tout la même<br>
<br>
Il s'agit peut être de géométrie non valide<br>
</div>
Vous pouvez le vérifier facilement avec les
fonctions<br>
<a moz-do-not-send="true"
href="http://postgis.net/docs/ST_IsValid.html">ST_IsValid</a>
, et <a moz-do-not-send="true"
href="http://postgis.net/docs/ST_IsValidDetail.html">ST_IsValidDetail</a>.<br>
</div>
<div>Si vous avez des géométries non valide, vous
pouvez les corriger avec <a
moz-do-not-send="true"
href="http://postgis.net/docs/ST_MakeValid.html">ST_MakeValid</a><br>
</div>
<div><br>
</div>
Si toutes les géométries sont valides les choses
vont se corser :<br>
- Arrondir les coordonnées des points des lignes
(fonction <a moz-do-not-send="true"
href="http://postgis.net/docs/ST_SnapToGrid.html">ST_SnapToGrid</a>
)<br>
</div>
- translater les données pour diminuer le nombre de
chiffre des coordonnées (<font color="#999999">547354.26116135239
6344318.7079305416 ---> 354,.... ; 318,...</font>)<br>
</div>
<br>
</div>
Si rien ne marche, pas de panique, il suffit d'extraire un
exemple minimal de ce qui ne marche pas <br>
</div>
(par exemple donner publiquement les quelques géométries qui
provoquent le problème),<br>
</div>
<div>ainsi que la requete associée.J<br>
<br>
e créerais ensuite un ticket pour demander aux developpeurs
de régler le bug.<br>
</div>
<br>
</div>
<div>Je n'aurais pas accès à internet avant Lundi, je vous
souhaite donc bon courage<br>
</div>
<div><br>
</div>
Salutations,<br>
Rémi-C<br>
<div>
<div>
<div>
<div>
<div> </div>
</div>
</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">Le 28 janvier 2015 16:56, Guillaume
ARNAUD <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:guillaume.arnaud@cg82.fr" target="_blank">guillaume.arnaud@cg82.fr</a>></span>
a écrit :<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"> (re) Bonjour,<br>
<br>
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 :<br>
"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<br>
Lors de mon tout premier essai, j'avais 3 multilinestring
que j'ai identifiées et reprise pour les transformer en
linestring.<br>
<br>
Elles ne sont pourtant pas "simple" :<br>
"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<br>
<br>
Je viens de relire mon mail et je vois que je n'ai jamais
écrit le message d'erreur :<br>
<font color="#999999"><br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned
depths do not match at 547354.26116135239
6344318.7079305416<br>
********** Erreur **********<br>
ERREUR: GEOSOffsetCurve: TopologyException: assigned
depths do not match at 547354.26116135239
6344318.7079305416<br>
État SQL :XX000</font><br>
<br>
J'ai ce message pour ma requête comme pour la votre (si je
l'ai bien adapté) :<br>
<br>
SELECT ST_OffsetCurve(theGeom, 25, 'quad_segs=4
join=round') AS theOffset<br>
FROM (<br>
SELECT (ST_Dump(shape)).geom AS theGeom<br>
FROM web.trs_itineraire<br>
where code = '06-20B'<br>
) AS subQuery;<br>
<br>
l'itineraire pris en exemple a ce dessin : <br>
<br>
<img src="cid:part6.08030305.08060205@cg82.fr" alt=""><br>
<br>
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.<br>
<br>
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)...<br>
<br>
Merci encore pour votre aide. En espérant que mon problème
est une solution.<br>
<br>
Guillaume.<br>
<br>
<br>
<div>Le 28/01/2015 16:02, Rémi Cura a écrit :<br>
</div>
<div>
<div class="h5">
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>/* For the list archive : problem is
probably using ST_OffsetCurve with
multilinestring instead of linestring.*/<br>
<br>
Bonjour,<br>
<br>
</div>
St_OffsetCurve ne fonctionne qu'avec des
géométries simples.<br>
Pour PostGIS (et le standard),<b> les
géométries simples sont des géométries qui
ne sont pas composées</b>.<br>
</div>
En clair, vous avez probablement des lignes de
type multilinestring (composition de plusieurs
polylignes).<br>
</div>
La solution est immédiate si vous souhaitez
simplement faire de la visualisation (non
testée):<br>
<br>
-------------------------------------<br>
SELECT objectid, nom, code<br>
, ST_OffsetCurve(dmp.geom, 25, 'quad_segs=4
join=round') as offseted_linestring<br>
FROM web.trs_itineraire , st_Dump(shape) as dmp<br>
WHERE code = '06-20B'<br>
-------------------------------------<br>
<br>
</div>
<div>Attention,<br>
</div>
<div>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).<br>
</div>
<div>On peut facilement éviter ce comportement si
vous le souhaitez en regroupant à nouveau les
polylignes qui ont été décalées :<br>
<br>
---------------------------------------<br>
SELECT objectid, nom, code,
ST_Collect(offseted_linestring) as
offseted_multilinestring<br>
FROM <br>
<div style="margin-left:40px">(SELECT objectid,
nom, code , dmp.path<br>
, ST_OffsetCurve(dmp.geom, 25,
'quad_segs=4 join=round') as
offseted_linestring<br>
FROM web.trs_itineraire , st_Dump(shape) as
dmp<br>
WHERE code = '06-20B'<br>
</div>
</div>
<div style="margin-left:40px">) as sub<br>
</div>
<div>GROUP BY objectid, nom, code <br>
ORDER BY dmp.path <br>
</div>
<div>-----------------------------------------<br>
</div>
<div><br>
</div>
<div>Enfin, je me permets un petit rappel puisque
vous êtes probablement dans un contexte web ; <br>
</div>
<div>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<br>
</div>
<div>(et surtout pas par concaténation de texte)<br>
</div>
<div>Code doit de plus avoir un index /* CREATE
INDEX ON web.trs_itineraire (code) */ pour que
cette requête soit efficace<br>
</div>
<div><br>
</div>
Salutations,<br>
Rémi-C<br>
<div><br>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">Le 28 janvier 2015 14:02,
Guillaume ARNAUD <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:guillaume.arnaud@cg82.fr"
target="_blank">guillaume.arnaud@cg82.fr</a>></span>
a écrit :<br>
<blockquote class="gmail_quote" style="margin:0
0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><span>
(re) Bonjour,<br>
<br>
Donc, en français... Nous avons une base
PosTGIS qui est attaqué par ArcGIS Server
and Desktop 10.2.<br>
<br>
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.<br>
<br>
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.<br>
<br>
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).<br>
<br>
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 :<br>
<br>
SELECT objectid, nom, code,
ST_OffsetCurve(shape, 25, 'quad_segs=4
join=round') from web.trs_itineraire where
code = '06-20B' ====> Ne fonctionne
pas.<br>
<br>
SELECT ST_issimple(shape) from
web.trs_itineraire where code =
'06-20B' ====> False<br>
<br>
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'<br>
<br>
SELECT
ST_issimple(st_simplifypreservetopology(shape,0.6))
from web.trs_itineraire where code =
'06-20B' ====> False<br>
<br>
Nos itinéraires peuvent faire des aller
retour sur des même axes de voirie et donc
partage des noeuds en communs.<br>
<br>
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.<br>
<br>
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.<br>
<br>
Merci de vos réponses et de votre intérêt
pour ma question.<br>
<br>
Guillaume ARNAUD<br>
<br>
<div>Le 28/01/2015 12:32, Rémi Cura a
écrit :<br>
</div>
</span>
<blockquote type="cite">
<div dir="ltr">
<div>
<div>
<div>Same,<br>
<br>
</div>
<div>
<div> On peut répondre à la
question en français,<br>
</div>
</div>
</div>
<div>
<div> il y en a quelques un sur la
mailing list...<br>
<br>
</div>
</div>
</div>
Rémi-C<br>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">
<div>
<div>2015-01-28 11:44 GMT+01:00
Nicolas Ribot <span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:nicolas.ribot@gmail.com"
target="_blank">nicolas.ribot@gmail.com</a>></span>:<br>
</div>
</div>
<blockquote class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div>
<div>
<div dir="ltr">Hi Guillaume,
<div><br>
</div>
<div>Not sure I understand
what you want to achieve.</div>
<div>Can you describe it,
maybe with an image. (or in
french)</div>
<div><br>
</div>
<div>Non-simple lines can be
cut at their intersection to
make them simple.</div>
<div><br>
</div>
<div>Nicolas</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<div class="gmail_quote">
<div>
<div>
<div>
<div>On 28 January 2015 at
09:16, Guillaume ARNAUD
<span dir="ltr"><<a
moz-do-not-send="true"
href="mailto:guillaume.arnaud@cg82.fr" target="_blank">guillaume.arnaud@cg82.fr</a>></span>
wrote:<br>
</div>
</div>
</div>
</div>
<blockquote class="gmail_quote"
style="margin:0 0 0
.8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div>
<div>
<div>
<div>
<div bgcolor="#FFFFFF"
text="#000000">
<div>
<p> Hello, </p>
<p> We use Postgre
/ Postgis
database with
ArcGIS Server
and Desktop
10.2. All our
data are
inserted with
keyword Postgis
into our
database. </p>
<p> 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 . </p>
<p> Thanks for
your work. </p>
<p> Greating. </p>
<p> ARNAUD
Guillaume </p>
<p> Sorry for my
poor english,
I'm french. </p>
<p> "PostgreSQL
9.2.2, compiled
by Visual C++
build 1600,
64-bit
POSTGIS="2.0.4"
GEOS="3.4.2-CAPI-1.8.2
<a
moz-do-not-send="true"
title="No
changeset 0 in
the
repository">r0</a>"
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)" </p>
<p> OS : Windows
Server Standard
SP 2 </p>
<span><font
color="#888888">
</font></span></div>
<span><font
color="#888888">
<div>-- <br>
Guillaume
ARNAUD<br>
Cellule SIGD<br>
Direction de
l'Informatique<br>
Conseil
Général de
Tarn-et-Garonne<br>
<br>
</div>
</font></span></div>
<br>
</div>
</div>
</div>
</div>
<span>
_______________________________________________<br>
postgis-users mailing list<br>
<a moz-do-not-send="true"
href="mailto:postgis-users@lists.osgeo.org"
target="_blank">postgis-users@lists.osgeo.org</a><br>
<a moz-do-not-send="true"
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users"
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br>
</span></blockquote>
</div>
<br>
</div>
<span> <br>
_______________________________________________<br>
postgis-users mailing list<br>
<a moz-do-not-send="true"
href="mailto:postgis-users@lists.osgeo.org"
target="_blank">postgis-users@lists.osgeo.org</a><br>
<a moz-do-not-send="true"
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users"
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br>
</span></blockquote>
</div>
<br>
</div>
</blockquote>
<span> <br>
<div>-- <br>
Guillaume ARNAUD<br>
Cellule SIGD<br>
Direction de l'Informatique<br>
Conseil Général de Tarn-et-Garonne<br>
<br>
</div>
</span></div>
<br>
_______________________________________________<br>
postgis-users mailing list<br>
<a moz-do-not-send="true"
href="mailto:postgis-users@lists.osgeo.org"
target="_blank">postgis-users@lists.osgeo.org</a><br>
<a moz-do-not-send="true"
href="http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users"
target="_blank">http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users</a><br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</div>
</div>
<div>
<div>
<div class="h5">-- <br>
Guillaume ARNAUD<br>
Cellule SIGD<br>
Direction de l'Informatique<br>
Conseil Général de Tarn-et-Garonne<br>
</div>
</div>
<span class=""><a moz-do-not-send="true"
href="tel:05-63-91-82-37" value="+33563918237"
target="_blank">05-63-91-82-37</a><br>
En interne, utilisez le Click To Call : <a
moz-do-not-send="true"
href="https://10.200.3.1:8443/webdialer/Webdialer?destination=8237"
target="_blank">8237</a> <br>
<br>
</span></div>
</div>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
<div class="moz-signature">-- <br>
Guillaume ARNAUD<br>
Cellule SIGD<br>
Direction de l'Informatique<br>
Conseil Général de Tarn-et-Garonne<br>
05-63-91-82-37<br>
En interne, utilisez le Click To Call : <a
href="https://10.200.3.1:8443/webdialer/Webdialer?destination=8237">8237</a>
<br>
<br>
<a href="http://www.carto.cg82.fr/"><img alt="test"
src="cid:part20.09090901.06090402@cg82.fr" <="" a=""></a></div>
</body>
</html>