[Qgis-developer] Topology editing in QGis

Sandro Santilli strk at keybit.net
Thu Nov 7 09:33:09 PST 2013


On Thu, Nov 07, 2013 at 04:48:44PM +0100, Radim Blazek wrote:
> On Wed, Nov 6, 2013 at 10:42 PM, Sandro Santilli <strk at keybit.net> wrote:
> > On Wed, Nov 06, 2013 at 10:50:32AM +0100, Radim Blazek wrote:

> > Note that this is the model used by the "TopoViewer" included with
> > the DBManager plugin. It creates a group and adds different vector layers
> > for the primitives. I suggest you both take a look at it if not done yet,
> > just to have a common reference.
> 
> I'll do once I find time. Please look on GRASS editing.

Good point. I'll do my best to find the time.

> > One level of editing is, imho, simply selecting which elements/primitives
> > takes part in the definition of the compound. This is an high-precision
> > editing level where it is ensured that no changes will occur in the
> > elements. For this kind of editing I envision a system that would
> > automatically add on the map one or more layers containing candidate
> > elements (one layer per element-type) to let user pick the one he wants.
> 
> Note, in GRASS, compounds (areas) are generated automatically, not
> manually selected.

Areas (faces) are generated automatically in PostGIS too, but those
are not considered "compounds". Rather they are considered "primitive"
(elements) at the same level of nodes and edges.

It is true that faces are defined by edges, but they are not intended
to be attached user attributes. The rationale is that you must be able
to cut any face by adding more edges w/out the user-feature changing
its shape (the same as you can cut any edge by adding more nodes w/out
the linear user-feature changing its shape).

I understand that in GRASS you attach attributes to faces (areas) instead.
Maybe GRASS could just not support this level of editing.

> > Another level is modifying the elements that compose a compound.
> > I still don't know what would work for this second level, when coming
> > from "editing of a compound layer", but it does sound like a short-cut
> > to open editing of the element layer.
> >
> > Yet another possibility is allowing arbitrary modification of the
> > shape of a compound and automatically add elements in the topology
> > to account for those changes. This is what I've implemented in QGIS
> > for editing of TopoGeometry (aka "compound") layers.
> 
> This can be a higher level editing, but elements editing is necessary.

Agreed. 

> >> Element layers will be displayed with topological meaning symbology
> >> above compound layers? I.e. for example polygons symbolized according
> >> to attributes + edges symbolized according to topology state?

[..]

> > We could eventually require a minimum set of attributes for these kind of
> > tables to unify symbology for them. Could you write down a list of the
> > states, to add to the terminology ?
> 
> It depends on model, for GRASS:
> - point
> - line
> - boundary (no area)
> - boundary (1 area)
> - boundary (2 areas)
> - centroid (in area)
> - centroid (outside area)
> - centroid (duplicate in area)
> - node (1 line/point)
> -node (2 and more lines/points)

Are those "topology states" ? I'm not sure I understand them.

Can "point" and "node*" be states of a "node" layer ?
Can "line" and "boundary" be states of an "edge" layer ?
Can "centroid*" be states of a "face"/"area" layer ?

> How do you say to compound layer that element changed? Also in GRASS,
> all elements are stored in single file, so element layer providers
> have to work with the same datasource.
> 
> > In that case each provider should take care of the required book-keeping
> > to maintain the link between layers related to the same topology.
> 
> Can you explain better what you mean?

What I mean is that signalling of changes to related layers should
not necessarely be provided by the generic API, but could be handled
internally by each provider. As a provider of a topological layer
you (the provider) must know how to dispatch information about changes
happening. Supposedly all "related" layers will be provided by you
(the provider) so you should have all it takes to take note about
how many layers you created that are related to a given topology,
and dispatch accordingly.

--strk; 

 ()  ASCII ribbon campaign        - against html e-mail
 /\  http://www.asciiribbon.org   - against proprietary attachments


More information about the Qgis-developer mailing list