[OpenLayers-Dev] Topology proposal

Björn Harrtell bjorn.harrtell at gmail.com
Sat May 30 09:48:25 EDT 2009

Since I got at least one (and hopefully more :) interested person(s)
in the details I'm posting this information about my initial
implementation of the below proposal using using events in this


Check out the example at
to see the implementation in effect.

The only change from the initial proposal is that
OpenLayers.Control.ModifyFeature essentially does not have to be
modified, which is made possible by basing the implementation on the
vertexmodified event - though I do have added and are using
delta-movement information to the vertexmodified event-message, which
required small changes in DragFeature and ModifyFeature controls to
fill in this information.

New classes are:

The implementation is dynamic which means that the topology rule is
evaluated at each change of the geometry which I think should be
optional since this can be costly with more complex geometry and can
cause wierd side-effects when using snapping for instance. I'd like to
add some kind of caching in the future that would require manual or
semi-manual update of the topology state.

The render intent stuff is not done yet.

Forgive me if I've forgot some detail in the above description :)


2009/4/22 Björn Harrtell <bjorn.harrtell at gmail.com>:
> Hi devs,
> I want to make an effort to implement a topology restriction in
> OpenLayers (specifically that polygons must share vertices). The ideal
> would be something that is reusable for other topology rules than the
> one I want to implement at first and my intent is to build it so that
> it can be contributed as a patch. I've discussed the matter with Tim
> briefly and here is my rough initial design proposal. Any feedback
> will of course be appreciated.
> I wanted to add this to the wiki at Proposal/Topology but seems I
> can't create new wikipages even when I'm logged in, or I'm missing
> something. So here is it:
> * Represent topology rules as classes in namespace
> OpenLayers.Topology.Rule with a base class OpenLayers.Topology.Rule (I
> don't really like using the same identifier as a namespace and class,
> but I think this is the convention in OpenLayers?). The base class
> should provide an interface for checking feature(s) for topology
> errors and optionally set the render intent and return the violating
> features.
> * Add a render intent for indicating topology violation
> * Add topologyRules property to OpenLayers.Layer.Vector as an optional
> array of topology classes to associate with the layer
> * Add topologyAutoCheck boolean property to OpenLayers.Layer.Vector to
> indicate if a vector layer automatically should update the topology
> render intent on feature changes (default false)
> * Add enforceTopology boolean property to
> OpenLayers.Control.ModifyFeature to restrict edits to follow the
> topology rule by either automatically snapping stuff (if possible) or
> disallowing the interaction.
> * The first rule to be implemented is that polygons must share
> vertices, suggested name is
> OpenLayers.Topology.Rules.PolygonsMustShareVertices
> Motivations:
> * Topology rules could be constant enums instead of classes, the
> reasons for suggesting classes are to make it more clear that the rule
> should contain as much of the implementation as possible and that one
> might want to make OL-builds containing only the rules that are
> relevant for the use case.
> Uncertainties:
> * Where to put the logic that restricts editing - I'm not sure if it's
> possible to separate it without creating a dependency mess between
> ModifyControl and the topology rule.
> With regards,
> Björn Harrtell

More information about the Dev mailing list