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:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user