<div dir="ltr"><div><div><div><div>Sandro, <br><br></div>tks very much for the answers. After week to parse and try to implement your sugestions I think we made good progress. Of of the 316k polygons, we get 308 polygons that were not included. </div><div>Bellow are some follow-up questions (in line bellow). <br></div><div><br></div></div></div><div><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
Message: 1<br>
Date: Sun, 17 Jan 2016 14:23:25 +0100<br>
From: Sandro Santilli <<a href="mailto:strk@keybit.net" target="_blank">strk@keybit.net</a>><br>
To: PostGIS Users Discussion <<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a>><br>
Subject: Re: [postgis-users] questions/issues when creating a topology<br>
Message-ID: <20160117132325.GA8245@localhost><br>
Content-Type: text/plain; charset=us-ascii<br>
<br>
On Thu, Jan 14, 2016 at 09:57:48AM -0200, Lucas Ferreira Mation wrote:<br>
<br>
> 1) What is the role of ST_Force2D() function in<br>
>  toTopoGeom(ST_Force2D(geom),...) ? The code fails if I omit this function.<br>
> However my data is already 2D.<br>
<br>
ST_Force2D should make no difference when the input is already 2D.<br>
If it does there's a bug hiding somewhere and you're welcome to<br>
file a ticket about it (with a way to reproduce).<br>
<br></blockquote><div><br></div><div>I actually managed to run most test cases without  the ST_Force2D() function. The only case it did make a difference was when creating a topology with the original SRID (4674 , SIRGAS 2000) and no tolerance parameter. With the  ST_Force2D() wrapipng the input polygons, the loop runs. Without it, there is a crash in the database (connection lost with database). </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
> 2) In most test I did, I got an error when uploading one or two polygons<br>
> (out of a 900 polygons in Acre state). How can I add these afterward?<br>
> Assume all the edges that define those error-polygons have already been<br>
> added. How do I define a new face  by those edges and attribute that to the<br>
> topogeom for these error-polygons?<br>
><br>
> Let's say polygon A can be defined by edges 1, 2, 3 and 4, which are<br>
> already in the topology when other polygons were inserted. How do I define<br>
> face A and attribute that to the topogeom?<br>
<br>
Faces are automatically defined. You associate attributes with<br>
TopoGeometry objects, which you can define in your case by specifying<br>
the faces making up the polygon.<br>
See <a href="http://postgis.net/docs/manual-dev/CreateTopoGeom.html" rel="noreferrer" target="_blank">http://postgis.net/docs/manual-dev/CreateTopoGeom.html</a><br>
<br></blockquote><div><br></div><div> Ok, got it to work. To document for others. Fist I used QGIS to know the original polygon - face pairs. This is done manually, by overlaying serveral layers (orginal polygons, topgeom, face bounding boxes). For example, from the atached image, I learnt that  I should associate the polygon cod_setor=290390405000036 with face_id=13314 of the corresponding topology. This, this fixes the "hole" in the topology for that polygon</div><div><br></div><div>UPDATE temp_geom_bahia2 SET tg_geom_dump_utm = '(28,1,13314,3)' WHERE cod_setor = '290390405000036'</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">You may also try to re-run toTopoGeom on the previously failed<br>
polygons. Sometimes the function works when finding a different<br>
starting state.<br></blockquote><div><br></div><div>This worked for 50 aditional cases of of the 358 errors (on the test with UTM reprojected polygons and with tolerance parameter of 1m).</div><div><br></div><div>I'll now try to increase the tolerance parameter (to say 2m, 5m, 10m) to see if the remaining polygons get added to the topology. </div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
> 3) Is there a way to manually edit topologies, in QGIS for instance? I'm<br>
> thinking of a workflow for repairing a map. After doing the automatic fixes<br>
> in Postgis and creating a topology, someone wants to manually correct some<br>
> feature. For instance, move an edge or a point, while maintaining the<br>
> topological properties. Is there a QGIS plugin  for that?<br>
<br>
<a href="https://plugins.qgis.org/plugins/pgtopoeditor/" rel="noreferrer" target="_blank">https://plugins.qgis.org/plugins/pgtopoeditor/</a><br>
<br></blockquote><div><br></div><div>I see cool options to remove find dangling edges, remove edges and points and find Orpaned topogeoms. But supose I wanto to change the shape of an edge, by mooving a few vertices among it's path in QGIS, while preserving the nodes where it intersects with other edges. Is it possible to do that (and preserve the topological properties)? What about moving nodes? Can pgtopoeditor manage that?</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
> 4) Is not including a tolerance parameter  in to... equivalent to a zero<br>
> tolerance?<br>
<br>
Yes. This is something that might be good to change in the future<br>
but for now it is the same.<br>
<br>
> 5) Does topology behaves differently depending on whether the SRID is in<br>
> decimal degrees or meters? Ideally, I would prefer to have the tolerance<br>
> parameter in meters, as it is a more intuitive unit and have a constant<br>
> amount of "snapping" across the areas. However that means choosing a<br>
> specific UTM zone for reprojecting each state. However states in Brasil are<br>
> quite large, spanning more then one UTM zone. Even Acre, the small state I<br>
> used for testing spans two UTM zones<br>
<br>
Topology makes no intepretation of projections.<br>
Coordinates are always considered to be cartesian.<br>
<br>
> 6) I tested creating topologies with the original Sirgas 2000 decimal<br>
> degree spatial reference (srid 4674, a decimal degree system, quite similar<br>
> to wgs84 but slightly more optimized for Brasil) and also with  a<br>
>  reprojection to a UTM zone (srid 32719), which is where most of the<br>
> polygons are located. The errors are not the same.<br>
<br>
When you pass no (or 0) tolerance, one is computed automatically based<br>
on the minimum drift detectable by a "double precision" number.<br>
Using lat/lon units usually means numbers closer to the 0 thus having<br>
a smaller minimum tolerance. This changes overall results.<br>
<br>
> 7) Has there been any progress on some sort of index for topogeometries, so<br>
> spatial queries can run faster? (I found this 2013 tread<br>
> <<a href="http://osgeo-org.1560.x6.nabble.com/spatial-index-for-topology-td5085935.html" rel="noreferrer" target="_blank">http://osgeo-org.1560.x6.nabble.com/spatial-index-for-topology-td5085935.html</a>>on<br>
> the topic, but nothing more recent). Of course one can always cast to<br>
> geometry (topogeom::geometry) and index that, but that is duplicating the<br>
> information somewhat.<br>
<br>
No progress. A TopoGeometry object is externally defined so cannot really<br>
be indexed on itself. The geometry cast is volatile for this reason,<br>
and cannot be used in an index.<br>
<br>
What you could do is change the select queries to filter on bounding<br>
box of components. It would be a pretty complex query as it'd have to<br>
step by the "relation" table and the "layer" table to finally get<br>
to the real data, which si already indexed.<br>
<br>
Or you could build a cache of bounding boxes, automatically updating<br>
it whenever the primitives in the topology are updated, and use that<br>
column as a filter.<br></blockquote><div><br></div><div>this is interesting idea. Any example on this?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
--strk;<br>
<br>
  ()   Free GIS & Flash consultant/developer<br>
  /\   <a href="http://strk.keybit.net/services.html" rel="noreferrer" target="_blank">http://strk.keybit.net/services.html</a><br>
<br>
<br>
------------------------------<br>
<br>
Subject: Digest Footer<br>
<br>
_______________________________________________<br>
postgis-users mailing list<br>
<a href="mailto:postgis-users@lists.osgeo.org" target="_blank">postgis-users@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/postgis-users" rel="noreferrer" target="_blank">http://lists.osgeo.org/mailman/listinfo/postgis-users</a><br>
<br>
------------------------------<br>
<br>
End of postgis-users Digest, Vol 167, Issue 10<br>
**********************************************<br>
</blockquote></div><br></div></div></div>