when an action (e.g. moving a way) caused multiple child elements
of the same parent to be changed, their parent was also loaded into
the tree multiple times during `tree.intersects()`.
this fixes#1978
The main problem with the existing logic was that it
did not update the extents of relations when previously incomplete members were loaded.
It was also overly stateful; the various queues and flags
are no longer required.
Fixes#1928.
Fixes#1540.
We can't rely on identity equality here due to how
restoring works, and don't want to anyway -- the summary
should ignore net-no-op tag changes.
Fixes#1915.
The nodes.sort() statement caused some trouble in older browsers
such as (FF 20, Chromium 25). Also, the straighten action should
conserve node order. Thus, the sorting made the test weaker than
it had to be.
This just removes the unnecessary sorting.
iD.geo.euclideanDistance should only be used for calculations of
projected coordinates or display (pixel) coordinates.
iD.geo.sphericalDistance calculates approximate geographical
distances, accounting for distortions at higher latitudes. This
can be used for determining the nearest node (operations.Delete,
actions.Circularize) or relative length comparisons (actions.Split).
if a way is closed, iD needs to choose a second node to
split the way at.
This algorithm looks for a node that is both far away from
the initial node in terms of way segment length and nearby
in terms of beeline-distance. This assures that areas get
split on the most "natural" points (independent of the number
of nodes).
For example: bone-shaped areas get split across their waist-
line, circles across the diameter.
Previously, adding a midpoint to an invalidly doubled-back
segment (aba) resulted in a self-intersection with an invalid
consecutive node (accba). Now a self-intersection is still
produced, but with only one c node (acba).
Refs #1296