[postgis-users] Topology & Attributes

Nicolas Ribot nicolas.ribot at gmail.com
Tue Feb 10 01:07:28 PST 2015


Hi Ofer,

Some precisions regarding the query I sent:

A topoGeometry objects stores the following information (
http://postgis.net/docs/manual-2.1/topogeometry.html):

• topopology_id: id of the topology, as stored in the Topology metadata
• layer_id : the id of the layer in the topology
• id: the id of the topogeometry object
• type: the geometry type (point, line...)

When joining between the Polygon table containing the TopoGeometryObject, I
used a notation seen on this list to compare 2 values:
(a, b) = (c, d), equivalent to a = b and c = d.
The "1" in the first part (pe.parcelle p1 on (1, (p1.topo).id)) is the
hard-coded (not very smart: I copied a test query I used) identifier of the
Topology layer in the topology.layer metadata table.

I obtained this value by running:
select layer_id from topology.layer where schema_name = 'pe' and table_name
= 'parcelle;

So, in your case, check the layer_id of the department table and use this
value.

Nicolas


On 9 February 2015 at 21:18, Ofer Zilberstein <zilberstein.ofer at gmail.com>
wrote:

> Hi,
>
> 1. I advanced ...and I used the  topology.toTopoGeom() and now
> the relation is populated.
>
> 2. I try to understand the following join
>
> *pe.parcelle** p1 on (1, (p1.topo).id) *= (r1.layer_id, r1.topogeo_id)
>
> the second part of the join is clear -- comes from the relation table
> however the first part - is not so clear
>
> according to you - "parcelle is the polygon table with a topo column
> containing the TopoGeometry object corresponding to the polygon" (you have
> used here pe.parcelle - is it the table name ? )
>
> so if in my case I have table 'department' with column 'topogeom' it would
> look like
>
> department d1 on (1,(d1.topogeom).id) = (r1.layer_id, r1.topogeo_id) ?
>
>
> Ofer
>
>
>
>
>
> On Mon, Feb 9, 2015 at 3:52 PM, Ofer Zilberstein <
> zilberstein.ofer at gmail.com> wrote:
>
>> Hi Nicolas,
>>
>> 1. I used  ST_CreateTopoGeo()  to build the topology (not the topology.toTopoGeom()
>> as you mentioned )
>>
>> When I look at the relation table its empty ? should I use  topology.toTopoGeom()
>> instead, and it will populate it ?
>>
>> 2. can you explain what the parentheses (special the 1, ...) part mean...
>>
>> join pe.parcelle p1 on *(1, (p1.topo).id)* = (r1.layer_id, r1.topogeo_id)
>>
>> Thanks in advanced ...
>>
>> Ofer
>>
>> On Mon, Feb 9, 2015 at 11:05 AM, Nicolas Ribot <nicolas.ribot at gmail.com>
>> wrote:
>>
>>> Hi,
>>>
>>> As usual with SQL, there must be several other ways to perform the same
>>> query.
>>>
>>> As the edge view stores 2 faces id per row (left and right), I
>>> duplicated the joins to join both left_face and right face against the
>>> original polygon table (p1 and p2 aliases)
>>>
>>> Nicolas
>>>
>>> On 8 February 2015 at 21:57, Ofer Zilberstein <
>>> zilberstein.ofer at gmail.com> wrote:
>>>
>>>> Much Thanks,
>>>>
>>>> First I will try to understand the join that you did and then try to
>>>> implement it...
>>>>
>>>> Ofer
>>>>
>>>> On Sun, Feb 8, 2015 at 12:44 PM, Nicolas Ribot <nicolas.ribot at gmail.com
>>>> > wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> When you build the topology, for instance with topology.toTopoGeom(),
>>>>> you get back a TopoGeometry object for each polygon added to the topology.
>>>>> This TopoGeometry is used to keep a link between your polygon object
>>>>> and all the topological elements composing it.
>>>>> The "relation" table inside the topo schema holding the topology
>>>>> contains the identifier of the topoGeometry object and the identifiers of
>>>>> topo elements composing the polygon.
>>>>>
>>>>> To get the right and left original polygons from the topology, you
>>>>> make a join between edge, relation and pg table:
>>>>> (topo_grass is the topo schema, parcelle is the polygon table with a
>>>>> topo column containing the TopoGeometry object corresponding to the
>>>>> polygon):
>>>>>
>>>>> select e.edge_id, e.left_face, e.right_face,
>>>>>   p1.id as left_id, p2.id as right_id
>>>>> from topo_grass.edge e
>>>>>   join topo_grass.relation r1 on r1.element_id = e.left_face
>>>>>   join pe.parcelle p1 on (1, (p1.topo).id) = (r1.layer_id, r1.topogeo_id)
>>>>>   join topo_grass.relation r2 on r2.element_id = e.right_face
>>>>>   join pe.parcelle p2 on (1, (p2.topo).id) = (r2.layer_id, r2.topogeo_id);
>>>>>
>>>>> Nicolas
>>>>>
>>>>>
>>>>>
>>>>> On 8 February 2015 at 10:29, Ofer Zilberstein <
>>>>> zilberstein.ofer at gmail.com> wrote:
>>>>>
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> When you build topology from set of connected polygons, the original
>>>>>> polygon attributes are not part of the topology model. The model creates
>>>>>> MBR face for each original polygon.
>>>>>>
>>>>>> The edges hold the left & right faces.
>>>>>>
>>>>>> How or what is the right way to add to the edges the right and left
>>>>>> original polygons ?
>>>>>>
>>>>>> --
>>>>>>
>>>>>> *Ofer Zilberstein*
>>>>>>
>>>>>>     Mobile: 972-544886873
>>>>>>
>>>>>>     Skype: ofer.zilberstein
>>>>>>
>>>>>>     Mail: zilberstein.ofer at gmail.com
>>>>>>
>>>>>> _______________________________________________
>>>>>> postgis-users mailing list
>>>>>> 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
>>>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> *Ofer Zilberstein*
>>>>
>>>>     Mobile: 972-544886873
>>>>
>>>>     Skype: ofer.zilberstein
>>>>
>>>>     Mail: zilberstein.ofer at gmail.com
>>>>
>>>> _______________________________________________
>>>> postgis-users mailing list
>>>> 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
>>> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>>>
>>
>>
>>
>> --
>>
>> *Ofer Zilberstein*
>>
>>     Mobile: 972-544886873
>>
>>     Skype: ofer.zilberstein
>>
>>     Mail: zilberstein.ofer at gmail.com
>>
>
>
>
> --
>
> *Ofer Zilberstein*
>
>     Mobile: 972-544886873
>
>     Skype: ofer.zilberstein
>
>     Mail: zilberstein.ofer at gmail.com
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/cgi-bin/mailman/listinfo/postgis-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20150210/87374947/attachment.html>


More information about the postgis-users mailing list