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) {
|
if (nodes.length > 0) {
|
||||||
nodes.sort(sortByDistance);
|
nodes.sort(sortByDistance);
|
||||||
var node = nodes[0];
|
var node = nodes[0];
|
||||||
var segment = node.segment; // the closest segment
|
var closestSegment = node.segment;
|
||||||
var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate, segment));
|
var vertex = (ol.coordinate.closestOnSegment(pixelCoordinate,
|
||||||
|
closestSegment));
|
||||||
var vertexPixel = map.getPixelFromCoordinate(vertex);
|
var vertexPixel = map.getPixelFromCoordinate(vertex);
|
||||||
if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <=
|
if (Math.sqrt(ol.coordinate.squaredDistance(pixel, vertexPixel)) <=
|
||||||
this.pixelTolerance_) {
|
this.pixelTolerance_) {
|
||||||
var pixel1 = map.getPixelFromCoordinate(segment[0]);
|
var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
|
||||||
var pixel2 = map.getPixelFromCoordinate(segment[1]);
|
var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
|
||||||
var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
|
var squaredDist1 = ol.coordinate.squaredDistance(vertexPixel, pixel1);
|
||||||
var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
|
var squaredDist2 = ol.coordinate.squaredDistance(vertexPixel, pixel2);
|
||||||
var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
|
var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
|
||||||
if (dist <= 10) {
|
if (dist <= 10) {
|
||||||
vertex = squaredDist1 > squaredDist2 ? segment[1] : segment[0];
|
vertex = squaredDist1 > squaredDist2 ?
|
||||||
|
closestSegment[1] : closestSegment[0];
|
||||||
}
|
}
|
||||||
this.createOrUpdateVertexFeature_(vertex);
|
this.createOrUpdateVertexFeature_(vertex);
|
||||||
var vertexSegments = {};
|
var vertexSegments = {};
|
||||||
vertexSegments[goog.getUid(segment)] = true;
|
vertexSegments[goog.getUid(closestSegment)] = true;
|
||||||
|
var segment;
|
||||||
for (var i = 1, ii = nodes.length; i < ii; ++i) {
|
for (var i = 1, ii = nodes.length; i < ii; ++i) {
|
||||||
segment = nodes[i].segment;
|
segment = nodes[i].segment;
|
||||||
if (ol.coordinate.equals(vertex,
|
if ((ol.coordinate.equals(closestSegment[0], segment[0]) &&
|
||||||
ol.coordinate.closestOnSegment(pixelCoordinate, segment))) {
|
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;
|
vertexSegments[goog.getUid(segment)] = true;
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user