From f50e80d0b5fcc70e2381d7eb89f48c84cca2d404 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Tue, 11 Oct 2016 23:09:27 -0400 Subject: [PATCH] Refactor Intersection, Multipolygon from `geo` to `osm` --- modules/actions/add_member.js | 4 +- modules/actions/join.js | 7 ++-- modules/actions/merge_polygon.js | 6 +-- modules/actions/restrict_turn.js | 12 ++++-- modules/actions/split.js | 6 +-- modules/geo/index.js | 12 ------ modules/osm/index.js | 12 ++++++ modules/{geo => osm}/intersection.js | 16 ++++---- modules/{geo => osm}/multipolygon.js | 10 ++--- modules/osm/relation.js | 6 +-- modules/svg/areas.js | 5 +-- modules/svg/lines.js | 5 +-- modules/ui/fields/restrictions.js | 21 +++++----- test/index.html | 4 +- test/spec/osm/entity.js | 2 +- test/spec/{geo => osm}/intersection.js | 56 +++++++++++++------------- test/spec/{geo => osm}/multipolygon.js | 27 +++++++------ test/spec/osm/node.js | 2 +- test/spec/osm/relation.js | 2 +- test/spec/osm/way.js | 2 +- 20 files changed, 111 insertions(+), 106 deletions(-) rename modules/{geo => osm}/intersection.js (95%) rename modules/{geo => osm}/multipolygon.js (94%) rename test/spec/{geo => osm}/intersection.js (92%) rename test/spec/{geo => osm}/multipolygon.js (81%) diff --git a/modules/actions/add_member.js b/modules/actions/add_member.js index 0fa740858..be90d8493 100644 --- a/modules/actions/add_member.js +++ b/modules/actions/add_member.js @@ -1,4 +1,4 @@ -import { geoJoinWays } from '../geo/index'; +import { osmJoinWays } from '../osm/index'; export function actionAddMember(relationId, member, memberIndex) { @@ -9,7 +9,7 @@ export function actionAddMember(relationId, member, memberIndex) { var members = relation.indexedMembers(); members.push(member); - var joined = geoJoinWays(members, graph); + var joined = osmJoinWays(members, graph); for (var i = 0; i < joined.length; i++) { var segment = joined[i]; for (var j = 0; j < segment.length && segment.length >= 2; j++) { diff --git a/modules/actions/join.js b/modules/actions/join.js index 0b2f36def..cf2912d4f 100644 --- a/modules/actions/join.js +++ b/modules/actions/join.js @@ -1,7 +1,6 @@ import _ from 'lodash'; import { actionDeleteWay } from './delete_way'; -import { osmIsInterestingTag } from '../osm/index'; -import { geoJoinWays } from '../geo/index'; +import { osmIsInterestingTag, osmJoinWays } from '../osm/index'; // Join ways at the end node they share. @@ -32,7 +31,7 @@ export function actionJoin(ids) { } } - var joined = geoJoinWays(ways, graph)[0]; + var joined = osmJoinWays(ways, graph)[0]; survivor = survivor.update({nodes: _.map(joined.nodes, 'id')}); graph = graph.replace(survivor); @@ -60,7 +59,7 @@ export function actionJoin(ids) { if (ids.length < 2 || ids.length !== geometries.line.length) return 'not_eligible'; - var joined = geoJoinWays(ids.map(graph.entity, graph), graph); + var joined = osmJoinWays(ids.map(graph.entity, graph), graph); if (joined.length > 1) return 'not_adjacent'; diff --git a/modules/actions/merge_polygon.js b/modules/actions/merge_polygon.js index a4e6f2d6d..9b613f24a 100644 --- a/modules/actions/merge_polygon.js +++ b/modules/actions/merge_polygon.js @@ -1,6 +1,6 @@ import _ from 'lodash'; -import { geoJoinWays, geoPolygonContainsPolygon } from '../geo/index'; -import { osmRelation } from '../osm/index'; +import { geoPolygonContainsPolygon } from '../geo/index'; +import { osmJoinWays, osmRelation } from '../osm/index'; export function actionMergePolygon(ids, newRelationId) { @@ -31,7 +31,7 @@ export function actionMergePolygon(ids, newRelationId) { // Each element is itself an array of objects with an id property, and has a // locs property which is an array of the locations forming the polygon. var polygons = entities.multipolygon.reduce(function(polygons, m) { - return polygons.concat(geoJoinWays(m.members, graph)); + return polygons.concat(osmJoinWays(m.members, graph)); }, []).concat(entities.closedWay.map(function(d) { var member = [{id: d.id}]; member.nodes = graph.childNodes(d); diff --git a/modules/actions/restrict_turn.js b/modules/actions/restrict_turn.js index 32c308d8f..b98065d10 100644 --- a/modules/actions/restrict_turn.js +++ b/modules/actions/restrict_turn.js @@ -1,6 +1,10 @@ import { actionSplit } from './split'; -import { geoInferRestriction } from '../geo/index'; -import { osmRelation, osmWay } from '../osm/index'; + +import { + osmInferRestriction, + osmRelation, + osmWay +} from '../osm/index'; // Create a restriction relation for `turn`, which must have the following structure: @@ -17,7 +21,7 @@ import { osmRelation, osmWay } from '../osm/index'; // (The action does not check that these entities form a valid intersection.) // // If `restriction` is not provided, it is automatically determined by -// geoInferRestriction. +// osmInferRestriction. // // If necessary, the `from` and `to` ways are split. In these cases, `from.node` // and `to.node` are used to determine which portion of the split ways become @@ -77,7 +81,7 @@ export function actionRestrictTurn(turn, projection, restrictionId) { tags: { type: 'restriction', restriction: turn.restriction || - geoInferRestriction( + osmInferRestriction( graph, turn.from, turn.via, diff --git a/modules/actions/split.js b/modules/actions/split.js index e549850e1..8a8efa493 100644 --- a/modules/actions/split.js +++ b/modules/actions/split.js @@ -1,6 +1,6 @@ import _ from 'lodash'; -import { osmRelation, osmWay } from '../osm/index'; -import { geoIsSimpleMultipolygonOuterMember, geoSphericalDistance } from '../geo/index'; +import { osmIsSimpleMultipolygonOuterMember, osmRelation, osmWay } from '../osm/index'; +import { geoSphericalDistance } from '../geo/index'; import { actionAddMember } from './add_member'; import { utilWrap } from '../util/index'; @@ -79,7 +79,7 @@ export function actionSplit(nodeId, newWayIds) { nodesA, nodesB, isArea = wayA.isArea(), - isOuter = geoIsSimpleMultipolygonOuterMember(wayA, graph); + isOuter = osmIsSimpleMultipolygonOuterMember(wayA, graph); if (wayA.isClosed()) { var nodes = wayA.nodes.slice(0, -1), diff --git a/modules/geo/index.js b/modules/geo/index.js index 09184be68..2030bc689 100644 --- a/modules/geo/index.js +++ b/modules/geo/index.js @@ -1,18 +1,6 @@ import _ from 'lodash'; export { geoExtent } from './extent.js'; -export { - geoIntersection, - geoTurn, - geoInferRestriction -} from './intersection.js'; - -export { - geoIsSimpleMultipolygonOuterMember, - geoSimpleMultipolygonOuterMember, - geoJoinWays -} from './multipolygon.js'; - export { geoRawMercator } from './raw_mercator.js'; diff --git a/modules/osm/index.js b/modules/osm/index.js index 50135ed66..aa9effc79 100644 --- a/modules/osm/index.js +++ b/modules/osm/index.js @@ -3,6 +3,18 @@ export { osmNode } from './node'; export { osmRelation } from './relation'; export { osmWay } from './way'; +export { + osmIntersection, + osmTurn, + osmInferRestriction +} from './intersection.js'; + +export { + osmIsSimpleMultipolygonOuterMember, + osmSimpleMultipolygonOuterMember, + osmJoinWays +} from './multipolygon.js'; + export { osmOneWayTags, osmPavedTags, diff --git a/modules/geo/intersection.js b/modules/osm/intersection.js similarity index 95% rename from modules/geo/intersection.js rename to modules/osm/intersection.js index 7d017bb4d..199255303 100644 --- a/modules/geo/intersection.js +++ b/modules/osm/intersection.js @@ -1,16 +1,16 @@ import _ from 'lodash'; -import { geoAngle } from './index'; -import { osmWay } from '../osm/index'; +import { geoAngle } from '../geo/index'; +import { osmWay } from './way'; -export function geoTurn(turn) { - if (!(this instanceof geoTurn)) - return new geoTurn(turn); +export function osmTurn(turn) { + if (!(this instanceof osmTurn)) + return new osmTurn(turn); _.extend(this, turn); } -export function geoIntersection(graph, vertexId) { +export function osmIntersection(graph, vertexId) { var vertex = graph.entity(vertexId), parentWays = graph.parentWays(vertex), coincident = [], @@ -114,7 +114,7 @@ export function geoIntersection(graph, vertexId) { } }); - return geoTurn(turn); + return osmTurn(turn); } @@ -172,7 +172,7 @@ export function geoIntersection(graph, vertexId) { } -export function geoInferRestriction(graph, from, via, to, projection) { +export function osmInferRestriction(graph, from, via, to, projection) { var fromWay = graph.entity(from.way), fromNode = graph.entity(from.node), toWay = graph.entity(to.way), diff --git a/modules/geo/multipolygon.js b/modules/osm/multipolygon.js similarity index 94% rename from modules/geo/multipolygon.js rename to modules/osm/multipolygon.js index ab5250fb8..025cc99e5 100644 --- a/modules/geo/multipolygon.js +++ b/modules/osm/multipolygon.js @@ -4,7 +4,7 @@ import { actionReverse } from '../actions/reverse'; // For fixing up rendering of multipolygons with tags on the outer member. // https://github.com/openstreetmap/iD/issues/613 -export function geoIsSimpleMultipolygonOuterMember(entity, graph) { +export function osmIsSimpleMultipolygonOuterMember(entity, graph) { if (entity.type !== 'way') return false; @@ -29,7 +29,7 @@ export function geoIsSimpleMultipolygonOuterMember(entity, graph) { } -export function geoSimpleMultipolygonOuterMember(entity, graph) { +export function osmSimpleMultipolygonOuterMember(entity, graph) { if (entity.type !== 'way') return false; @@ -66,16 +66,16 @@ export function geoSimpleMultipolygonOuterMember(entity, graph) { // with appropriate order reversal and start/end coordinate de-duplication. // // Members of `array` must have, at minimum, `type` and `id` properties. -// Thus either an array of `iD.Way`s or a relation member array may be +// Thus either an array of `osmWay`s or a relation member array may be // used. // // If an member has a `tags` property, its tags will be reversed via -// `iD.actionReverse` in the output. +// `actionReverse` in the output. // // Incomplete members (those for which `graph.hasEntity(element.id)` returns // false) and non-way members are ignored. // -export function geoJoinWays(array, graph) { +export function osmJoinWays(array, graph) { var joined = [], member, current, nodes, first, last, i, how, what; array = array.filter(function(member) { diff --git a/modules/osm/relation.js b/modules/osm/relation.js index 60efe35c8..9ce06f566 100644 --- a/modules/osm/relation.js +++ b/modules/osm/relation.js @@ -1,9 +1,9 @@ import * as d3 from 'd3'; import _ from 'lodash'; import { osmEntity } from './entity'; +import { osmJoinWays } from './multipolygon'; import { geoExtent, - geoJoinWays, geoPolygonContainsPolygon, geoPolygonIntersectsPolygon } from '../geo/index'; @@ -263,8 +263,8 @@ _.extend(osmRelation.prototype, { var outers = this.members.filter(function(m) { return 'outer' === (m.role || 'outer'); }), inners = this.members.filter(function(m) { return 'inner' === m.role; }); - outers = geoJoinWays(outers, resolver); - inners = geoJoinWays(inners, resolver); + outers = osmJoinWays(outers, resolver); + inners = osmJoinWays(inners, resolver); outers = outers.map(function(outer) { return _.map(outer.nodes, 'loc'); }); inners = inners.map(function(inner) { return _.map(inner.nodes, 'loc'); }); diff --git a/modules/svg/areas.js b/modules/svg/areas.js index 30ba44905..afcefb3f7 100644 --- a/modules/svg/areas.js +++ b/modules/svg/areas.js @@ -1,7 +1,6 @@ import * as d3 from 'd3'; import _ from 'lodash'; -import { geoIsSimpleMultipolygonOuterMember } from '../geo/index'; -import { osmEntity } from '../osm/index'; +import { osmEntity, osmIsSimpleMultipolygonOuterMember } from '../osm/index'; import { svgPath, svgTagClasses } from './index'; @@ -45,7 +44,7 @@ export function svgAreas(projection, context) { var entity = entities[i]; if (entity.geometry(graph) !== 'area') continue; - multipolygon = geoIsSimpleMultipolygonOuterMember(entity, graph); + multipolygon = osmIsSimpleMultipolygonOuterMember(entity, graph); if (multipolygon) { areas[multipolygon.id] = { entity: multipolygon.mergeTags(entity.tags), diff --git a/modules/svg/lines.js b/modules/svg/lines.js index 35ff1952a..ea51a7e96 100644 --- a/modules/svg/lines.js +++ b/modules/svg/lines.js @@ -7,8 +7,7 @@ import { svgTagClasses } from './index'; -import { geoSimpleMultipolygonOuterMember } from '../geo/index'; -import { osmEntity } from '../osm/index'; +import { osmEntity, osmSimpleMultipolygonOuterMember } from '../osm/index'; import { utilDetect } from '../util/detect'; @@ -43,7 +42,7 @@ export function svgLines(projection) { for (var i = 0; i < entities.length; i++) { var entity = entities[i], - outer = geoSimpleMultipolygonOuterMember(entity, graph); + outer = osmSimpleMultipolygonOuterMember(entity, graph); if (outer) { ways.push(entity.mergeTags(outer.tags)); } else if (entity.geometry(graph) === 'line') { diff --git a/modules/ui/fields/restrictions.js b/modules/ui/fields/restrictions.js index 35ecdc6bc..5b94ec86a 100644 --- a/modules/ui/fields/restrictions.js +++ b/modules/ui/fields/restrictions.js @@ -2,7 +2,13 @@ import * as d3 from 'd3'; import { t } from '../../util/locale'; import { behaviorHover } from '../../behavior/index'; -import { osmEntity } from '../../osm/index'; + +import { + osmEntity, + osmIntersection, + osmInferRestriction, + osmTurn +} from '../../osm/index'; import { actionRestrictTurn, @@ -11,10 +17,7 @@ import { import { geoExtent, - geoIntersection, - geoRawMercator, - geoTurn, - geoInferRestriction + geoRawMercator } from '../../geo/index'; import { @@ -59,7 +62,7 @@ export function uiFieldRestrictions(field, context) { .attr('class', 'restriction-help'); - var intersection = geoIntersection(context.graph(), vertexID), + var intersection = osmIntersection(context.graph(), vertexID), graph = intersection.graph, vertex = graph.entity(vertexID), filter = utilFunctor(true), @@ -131,7 +134,7 @@ export function uiFieldRestrictions(field, context) { if (datum instanceof osmEntity) { fromNodeID = intersection.adjacentNodeId(datum.id); render(); - } else if (datum instanceof geoTurn) { + } else if (datum instanceof osmTurn) { if (datum.restriction) { context.perform( actionUnrestrictTurn(datum, projection), @@ -149,7 +152,7 @@ export function uiFieldRestrictions(field, context) { function mouseover() { var datum = d3.event.target.__data__; - if (datum instanceof geoTurn) { + if (datum instanceof osmTurn) { var graph = context.graph(), presets = context.presets(), preset; @@ -158,7 +161,7 @@ export function uiFieldRestrictions(field, context) { preset = presets.match(graph.entity(datum.restriction), graph); } else { preset = presets.item('type/restriction/' + - geoInferRestriction( + osmInferRestriction( graph, datum.from, datum.via, diff --git a/test/index.html b/test/index.html index 642ed64df..23dfd3eab 100644 --- a/test/index.html +++ b/test/index.html @@ -73,8 +73,6 @@ - - @@ -84,6 +82,8 @@ + + diff --git a/test/spec/osm/entity.js b/test/spec/osm/entity.js index 03c308f1c..d1a1aa77b 100644 --- a/test/spec/osm/entity.js +++ b/test/spec/osm/entity.js @@ -1,4 +1,4 @@ -describe('iD.Entity', function () { +describe('iD.osmEntity', function () { it('returns a subclass of the appropriate type', function () { expect(iD.Entity({type: 'node'})).be.an.instanceOf(iD.Node); expect(iD.Entity({type: 'way'})).be.an.instanceOf(iD.Way); diff --git a/test/spec/geo/intersection.js b/test/spec/osm/intersection.js similarity index 92% rename from test/spec/geo/intersection.js rename to test/spec/osm/intersection.js index 156a22858..8dccd3ffa 100644 --- a/test/spec/geo/intersection.js +++ b/test/spec/osm/intersection.js @@ -1,4 +1,4 @@ -describe('iD.geoIntersection', function() { +describe('iD.osmIntersection', function() { describe('highways', function() { it('excludes non-highways', function() { var graph = iD.Graph([ @@ -8,7 +8,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*']}), iD.Way({id: '-', nodes: ['*', 'w']}) ]); - expect(iD.geoIntersection(graph, '*').ways).to.eql([]); + expect(iD.osmIntersection(graph, '*').ways).to.eql([]); }); it('excludes degenerate highways', function() { @@ -18,7 +18,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['*'], tags: {highway: 'residential'}}) ]); - expect(_.map(iD.geoIntersection(graph, '*').ways, 'id')).to.eql(['=']); + expect(_.map(iD.osmIntersection(graph, '*').ways, 'id')).to.eql(['=']); }); it('excludes coincident highways', function() { @@ -28,7 +28,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['u', '*'], tags: {highway: 'residential'}}) ]); - expect(iD.geoIntersection(graph, '*').ways).to.eql([]); + expect(iD.osmIntersection(graph, '*').ways).to.eql([]); }); it('includes line highways', function() { @@ -39,7 +39,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['*', 'w']}) ]); - expect(_.map(iD.geoIntersection(graph, '*').ways, 'id')).to.eql(['=']); + expect(_.map(iD.osmIntersection(graph, '*').ways, 'id')).to.eql(['=']); }); it('excludes area highways', function() { @@ -49,7 +49,7 @@ describe('iD.geoIntersection', function() { iD.Node({id: 'w'}), iD.Way({id: '=', nodes: ['u', '*', 'w'], tags: {highway: 'pedestrian', area: 'yes'}}) ]); - expect(iD.geoIntersection(graph, '*').ways).to.eql([]); + expect(iD.osmIntersection(graph, '*').ways).to.eql([]); }); it('auto-splits highways at the intersection', function() { @@ -59,7 +59,7 @@ describe('iD.geoIntersection', function() { iD.Node({id: 'w'}), iD.Way({id: '=', nodes: ['u', '*', 'w'], tags: {highway: 'residential'}}) ]); - expect(_.map(iD.geoIntersection(graph, '*').ways, 'id')).to.eql(['=-a', '=-b']); + expect(_.map(iD.osmIntersection(graph, '*').ways, 'id')).to.eql(['=-a', '=-b']); }); }); @@ -73,7 +73,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -92,7 +92,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['w', '*'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -116,7 +116,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['w', '*', 'x'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('w'); + turns = iD.osmIntersection(graph, '*').turns('w'); expect(turns.length).to.eql(3); expect(turns[0]).to.eql({ @@ -151,7 +151,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['w', '*', 'x'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(3); expect(turns[0]).to.eql({ @@ -181,7 +181,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential', oneway: 'yes'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns).to.eql([{ from: {node: 'u', way: '='}, @@ -199,7 +199,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential', oneway: '-1'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns).to.eql([{ from: {node: 'u', way: '='}, @@ -217,7 +217,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential', oneway: 'yes'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential'}}) ]); - expect(iD.geoIntersection(graph, '*').turns('u')).to.eql([]); + expect(iD.osmIntersection(graph, '*').turns('u')).to.eql([]); }); it('omits turns from a reverse oneway forward', function() { @@ -229,7 +229,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential', oneway: '-1'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential'}}) ]); - expect(iD.geoIntersection(graph, '*').turns('u')).to.eql([]); + expect(iD.osmIntersection(graph, '*').turns('u')).to.eql([]); }); it('permits turns onto a oneway forward', function() { @@ -241,7 +241,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential', oneway: 'yes'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -260,7 +260,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['w', '*'], tags: {highway: 'residential', oneway: '-1'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -279,7 +279,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['w', '*'], tags: {highway: 'residential', oneway: 'yes'}}) ]); - expect(iD.geoIntersection(graph, '*').turns('u').length).to.eql(1); + expect(iD.osmIntersection(graph, '*').turns('u').length).to.eql(1); }); it('omits turns onto a reverse oneway forward', function() { @@ -291,7 +291,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential', oneway: '-1'}}) ]); - expect(iD.geoIntersection(graph, '*').turns('u').length).to.eql(1); + expect(iD.osmIntersection(graph, '*').turns('u').length).to.eql(1); }); it('includes U-turns', function() { @@ -303,7 +303,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '=', nodes: ['u', '*'], tags: {highway: 'residential'}}), iD.Way({id: '-', nodes: ['*', 'w'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[1]).to.eql({ @@ -328,7 +328,7 @@ describe('iD.geoIntersection', function() { {id: '*', role: 'via', type: 'node'} ]}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -357,7 +357,7 @@ describe('iD.geoIntersection', function() { {id: '*', role: 'via', type: 'node'} ]}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(3); expect(turns[0]).to.eql({ @@ -398,7 +398,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '-', nodes: ['*', 'a', 'b', 'c', '*'], tags: {highway: 'residential'}}), iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(3); expect(turns[0]).to.eql({ @@ -434,7 +434,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '-', nodes: ['*', 'a', 'b', 'c', '*'], tags: {highway: 'residential'}}), iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('a'); + turns = iD.osmIntersection(graph, '*').turns('a'); expect(turns.length).to.eql(3); expect(turns[0]).to.eql({ @@ -470,7 +470,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '-', nodes: ['*', 'a', 'b', 'c', '*'], tags: {highway: 'residential', oneway: 'yes'}}), iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -501,7 +501,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '-', nodes: ['*', 'a', 'b', 'c', '*'], tags: {highway: 'residential', oneway: '-1'}}), iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('u'); + turns = iD.osmIntersection(graph, '*').turns('u'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -532,7 +532,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '-', nodes: ['*', 'a', 'b', 'c', '*'], tags: {highway: 'residential', oneway: 'yes'}}), iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('c'); + turns = iD.osmIntersection(graph, '*').turns('c'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ @@ -562,7 +562,7 @@ describe('iD.geoIntersection', function() { iD.Way({id: '-', nodes: ['*', 'a', 'b', 'c', '*'], tags: {highway: 'residential', oneway: '-1'}}), iD.Way({id: '=', nodes: ['*', 'u'], tags: {highway: 'residential'}}) ]), - turns = iD.geoIntersection(graph, '*').turns('a'); + turns = iD.osmIntersection(graph, '*').turns('a'); expect(turns.length).to.eql(2); expect(turns[0]).to.eql({ diff --git a/test/spec/geo/multipolygon.js b/test/spec/osm/multipolygon.js similarity index 81% rename from test/spec/geo/multipolygon.js rename to test/spec/osm/multipolygon.js index 5819dbabc..e903bc1f1 100644 --- a/test/spec/geo/multipolygon.js +++ b/test/spec/osm/multipolygon.js @@ -1,4 +1,4 @@ -describe('iD.geoSimpleMultipolygonOuterMember', function() { +describe('iD.osmSimpleMultipolygonOuterMember', function() { it('returns the outer member of a simple multipolygon', function() { var inner = iD.Way(), outer = iD.Way(), @@ -8,8 +8,8 @@ describe('iD.geoSimpleMultipolygonOuterMember', function() { }), graph = iD.Graph([inner, outer, relation]); - expect(iD.geoSimpleMultipolygonOuterMember(inner, graph)).to.equal(outer); - expect(iD.geoSimpleMultipolygonOuterMember(outer, graph)).to.equal(outer); + expect(iD.osmSimpleMultipolygonOuterMember(inner, graph)).to.equal(outer); + expect(iD.osmSimpleMultipolygonOuterMember(outer, graph)).to.equal(outer); }); it('returns falsy for a complex multipolygon', function() { @@ -23,9 +23,9 @@ describe('iD.geoSimpleMultipolygonOuterMember', function() { }), graph = iD.Graph([inner, outer1, outer2, relation]); - expect(iD.geoSimpleMultipolygonOuterMember(inner, graph)).not.to.be.ok; - expect(iD.geoSimpleMultipolygonOuterMember(outer1, graph)).not.to.be.ok; - expect(iD.geoSimpleMultipolygonOuterMember(outer2, graph)).not.to.be.ok; + expect(iD.osmSimpleMultipolygonOuterMember(inner, graph)).not.to.be.ok; + expect(iD.osmSimpleMultipolygonOuterMember(outer1, graph)).not.to.be.ok; + expect(iD.osmSimpleMultipolygonOuterMember(outer2, graph)).not.to.be.ok; }); it('handles incomplete relations', function() { @@ -36,17 +36,18 @@ describe('iD.geoSimpleMultipolygonOuterMember', function() { }), graph = iD.Graph([way, relation]); - expect(iD.geoSimpleMultipolygonOuterMember(way, graph)).to.be.undefined; + expect(iD.osmSimpleMultipolygonOuterMember(way, graph)).to.be.undefined; }); }); -describe('iD.geoJoinWays', function() { + +describe('iD.osmJoinWays', function() { it('returns an array of members with nodes properties', function() { var node = iD.Node({loc: [0, 0]}), way = iD.Way({nodes: [node.id]}), member = {id: way.id, type: 'way'}, graph = iD.Graph([node, way]), - result = iD.geoJoinWays([member], graph); + result = iD.osmJoinWays([member], graph); expect(result.length).to.equal(1); expect(result[0].nodes.length).to.equal(1); @@ -72,7 +73,7 @@ describe('iD.geoJoinWays', function() { ]}) ]); - var result = iD.geoJoinWays(graph.entity('r').members, graph); + var result = iD.osmJoinWays(graph.entity('r').members, graph); expect(_.map(result[0], 'id')).to.eql(['=', '-', '~']); }); @@ -89,7 +90,7 @@ describe('iD.geoJoinWays', function() { iD.Way({id: '=', nodes: ['c', 'b'], tags: {'oneway': 'yes', 'lanes:forward': 2}}) ]); - var result = iD.geoJoinWays([graph.entity('-'), graph.entity('=')], graph); + var result = iD.osmJoinWays([graph.entity('-'), graph.entity('=')], graph); expect(result[0][1].tags).to.eql({'oneway': '-1', 'lanes:backward': 2}); }); @@ -97,12 +98,12 @@ describe('iD.geoJoinWays', function() { var node = iD.Node({loc: [0, 0]}), member = {id: 'n', type: 'node'}, graph = iD.Graph([node]); - expect(iD.geoJoinWays([member], graph)).to.eql([]); + expect(iD.osmJoinWays([member], graph)).to.eql([]); }); it('ignores incomplete members', function() { var member = {id: 'w', type: 'way'}, graph = iD.Graph(); - expect(iD.geoJoinWays([member], graph)).to.eql([]); + expect(iD.osmJoinWays([member], graph)).to.eql([]); }); }); diff --git a/test/spec/osm/node.js b/test/spec/osm/node.js index 24fd968bb..6305a8e73 100644 --- a/test/spec/osm/node.js +++ b/test/spec/osm/node.js @@ -1,4 +1,4 @@ -describe('iD.Node', function () { +describe('iD.osmNode', function () { it('returns a node', function () { expect(iD.Node()).to.be.an.instanceOf(iD.Node); expect(iD.Node().type).to.equal('node'); diff --git a/test/spec/osm/relation.js b/test/spec/osm/relation.js index 73982bc61..7148f65a8 100644 --- a/test/spec/osm/relation.js +++ b/test/spec/osm/relation.js @@ -1,4 +1,4 @@ -describe('iD.Relation', function () { +describe('iD.osmRelation', function () { if (iD.debug) { it('freezes nodes', function () { expect(Object.isFrozen(iD.Relation().members)).to.be.true; diff --git a/test/spec/osm/way.js b/test/spec/osm/way.js index e0a209cb8..4635daaf6 100644 --- a/test/spec/osm/way.js +++ b/test/spec/osm/way.js @@ -1,4 +1,4 @@ -describe('iD.Way', function() { +describe('iD.osmWay', function() { if (iD.debug) { it('freezes nodes', function () { expect(Object.isFrozen(iD.Way().nodes)).to.be.true;