<div dir="ltr"><div>Pre-Note: This message follows up from a tread with several questions about how to create a topology from a set of adminsitrative polygons. Strk kindly helped me solve 6/7 of my original questions (tks!). However I am still having trhouble with item "2)" of my original question. So I'll ask again as a follow up on this tread (for future reference) </div><div><br></div><div><br></div><div>Original question (rephrased): </div><div><div style="font-size:12.8px"><span style="font-size:12.8px">2) In most test I did, I got an error when uploading one or two polygons (out of a 900 polygons in Acre state). How can I add these afterward? Assume all neighbor polygons have been added to the topogeometry. Thus the topology already includes a face that would be the equivalente of one of the error polygons. </span><span style="font-size:12.8px">Let's that I see in QGIS that </span><span style="font-size:12.8px">polygon A correspond to face 13 of the topogeometry. Can I insert this by "brute force", by editing the text the corresponding cell of the topogeometry column?</span></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">So I found out sector code <span style="color:rgb(80,0,80);font-size:12.8px">'290390405000036' (in the original dataset ids) corresponds to face </span><span style="color:rgb(80,0,80);font-size:12.8px">13314 of the topogeometry. And I tried to insert this by "brute" force:</span></div></div><div></div></div><div dir="ltr"><div><span style="font-size:12.8px"><div>UPDATE temp_geom_bahia2 SET tg_geom_dump_utm = '(28,1,13314,3)' WHERE cod_setor = '290390405000036'<br></div><div><br></div></span><div style="font-size:12.8px">The desired cell in column tg_geom_dump_utm  of table  temp_geom_bahia2 is filled. </div><div style="font-size:12.8px"><br></div></div></div><div dir="ltr"><div><div style="font-size:12.8px">But when I visualise the topogeom in QGIS it is still empty at the are where sector <span style="color:rgb(80,0,80);font-size:12.8px">'290390405000036' would be. </span></div></div></div><div dir="ltr"><div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"> the topogeom still displays a hole for that area when I see it in Qgis (even after updating). <br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">Any ideas on how to insert that?</div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px"><br></div><div style="font-size:12.8px">regard</div></div></div><div dir="ltr"><div><span style="font-size:12.8px">From: Sandro Santilli <</span><a href="mailto:strk@keybit.net" style="font-size:12.8px" target="_blank">strk@keybit.net</a><span style="font-size:12.8px">></span><br style="font-size:12.8px"><span style="font-size:12.8px">To: PostGIS Users Discussion <</span><a href="mailto:postgis-users@lists.osgeo.org" style="font-size:12.8px" target="_blank">postgis-users@lists.osgeo.org</a><span style="font-size:12.8px">></span><br style="font-size:12.8px"></div></div><div dir="ltr"><div><span style="font-size:12.8px">Subject: </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">Re</span><span style="font-size:12.8px">: [postgis-users] Topology: error creating aggregated</span><br style="font-size:12.8px"><span style="font-size:12.8px">        topogeom (at city level) from a neighborhoods topogeom</span><br style="font-size:12.8px"><span style="font-size:12.8px">Message-ID: <20160201150444.GB20829@</span><span style="font-size:12.8px">localhost></span><br style="font-size:12.8px"><span style="font-size:12.8px">Content-Type: text/plain; charset=us-ascii</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">On Mon, Feb 01, 2016 at 11:03:14AM -0200, Lucas Ferreira Mation wrote:</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">> >Here </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">you</span><span style="font-size:12.8px">'</span><span style="font-size:12.8px;background-color:rgb(255,255,255)">re</span><span style="font-size:12.8px"> trying to pass a "layer_id" as the "type" of component for a non-hierarchical layer, thus the error</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">> *TopoElementArray_Agg(ARRAY[(</span><span style="font-size:12.8px">tg_geom_dump_utm).id,(tg_geom_</span><span style="font-size:12.8px">dump_utm).layer_id])*</span><br style="font-size:12.8px"><span style="font-size:12.8px">> works.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px;background-color:rgb(255,255,255)">Yes</span><span style="font-size:12.8px">, </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">that</span><span style="font-size:12.8px">'s how </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">you</span><span style="font-size:12.8px">'</span><span style="font-size:12.8px;background-color:rgb(255,255,255)">re</span><span style="font-size:12.8px"> </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">supposed</span><span style="font-size:12.8px"> to </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">use</span><span style="font-size:12.8px"> it.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">> What is not very clear from the syntax is if the syntax of</span><br style="font-size:12.8px"><span style="font-size:12.8px">> *TopoElementArray_Agg</span><br style="font-size:12.8px"><span style="font-size:12.8px">> should follow the child or the parent topogeom "class" (hierarquical or not)</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">It's TopoElement </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">that</span><span style="font-size:12.8px"> matters, TopoElementArray_Agg is just an</span><br style="font-size:12.8px"><span style="font-size:12.8px">aggregate to collect a set of TopoElement objects.</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">TopoElement is documented here:</span><br style="font-size:12.8px"><a href="http://postgis.net/docs/manual-2.2/topoelement.html" rel="noreferrer" style="font-size:12.8px" target="_blank">http://postgis.net/docs/manual-2.2/topoelement.html</a><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">"second element represents layer identifier of the child TopoGeometry"</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">> To recap, this is the code </span><span style="font-size:12.8px;background-color:rgb(255,255,255)">that</span><span style="font-size:12.8px"> works:</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">Consider adding it to the PostGIS Wiki !</span><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">This may be a good starting point:</span><br style="font-size:12.8px"><a href="http://trac.osgeo.org/postgis/wiki/UsersWikiCreatingTopoGeometryObjects" rel="noreferrer" style="font-size:12.8px" target="_blank">http://trac.osgeo.org/postgis/wiki/UsersWikiCreatingTopoGeometryObjects</a><br style="font-size:12.8px"><br style="font-size:12.8px"><span style="font-size:12.8px">--strk;</span><br></div></div><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2016-01-25 14:10 GMT-02:00 Lucas Ferreira Mation <span dir="ltr"><<a href="mailto:lucasmation@gmail.com" target="_blank">lucasmation@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr"><div>2) update. Apparently my "manual" brute force insertion does not work. </div><span><div><br></div><div>UPDATE temp_geom_bahia2 SET tg_geom_dump_utm = '(28,1,13314,3)' WHERE cod_setor = '290390405000036'<br></div><div><br></div></span><div>The desired cell in column tg_geom_dump_utm  of table  temp_geom_bahia2 is filled. But the topogeom still displays a hole for that area when I see it in Qgis (even after updating). <br></div><div><br></div><div>Any ideas on how to insert that?</div><div><br></div><div><br></div><div>regards</div><span><font color="#888888"><div>Lucas</div></font></span><div><div><div><br></div><div><br></div><div><br></div><br><div class="gmail_extra"><br><div class="gmail_quote">2016-01-25 13:26 GMT-02:00 Lucas Ferreira Mation <span dir="ltr"><<a href="mailto:lucasmation@gmail.com" target="_blank">lucasmation@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><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<span><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></span>
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"><span>
> 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></span>
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"><span>
<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>
</span><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"><span>
> 4) Is not including a tolerance parameter  in to... equivalent to a zero<br>
> tolerance?<br>
<br></span>
Yes. This is something that might be good to change in the future<br>
but for now it is the same.<span><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></span>
Topology makes no intepretation of projections.<br>
Coordinates are always considered to be cartesian.<span><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></span>
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.<span><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></span>
> <<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<span><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></span>
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>
</blockquote></div><br></div></div></div></div>
</blockquote></div><br></div></div>