Limit shared segment editing

To avoid surprises, we enable shared segment editing only on
segments that have the same vertex coordinates.
This commit is contained in:
ahocevar
2014-03-06 17:51:07 +01:00
parent 97f8fdbd15
commit bc79b89c5e

View File

@@ -510,26 +510,31 @@ ol.interaction.Modify.prototype.handleMouseAtPixel_ = function(pixel, map) {
if (nodes.length > 0) {
nodes.sort(sortByDistance);
var node = nodes[0];
var segment = node.segment; // the closest segment
var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, segment));
var closestSegment = node.segment;
var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,
closestSegment));
var vertexPixel = map.getPixelFromCoordinate(vertex);
if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <=
this.pixelTolerance_) {
var pixel1 = map.getPixelFromCoordinate(segment[0]);
var pixel2 = map.getPixelFromCoordinate(segment[1]);
var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
if (dist <= 10) {
vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0];
vertex = squaredDist1 > squaredDist2 ?
closestSegment[1] : closestSegment[0];
}
this.createOrUpdateVertexFeature_(vertex);
var vertexSegments = {};
vertexSegments[goog.getUid(segment)] = true;
vertexSegments[goog.getUid(closestSegment)] = true;
var segment;
for (var i = 1, ii = nodes.length; i < ii; ++i) {
segment = nodes[i].segment;
if (ol.coordinate.equals(vertex,
ol.coordinate.closestOnSegment(pixelCoordinate, segment))) {
if ((ol.coordinate.equals(closestSegment[0], segment[0]) &&
ol.coordinate.equals(closestSegment[1], segment[1]) ||
(ol.coordinate.equals(closestSegment[0], segment[1]) &&
ol.coordinate.equals(closestSegment[1], segment[0])))) {
vertexSegments[goog.getUid(segment)] = true;
} else {
break;