export class DataService { constructor() { this.vectorData = {}; this.currentId = 0; // 当前可用id } setCurrentId(id) { this.currentId = id; } getCurrentId() { return this.currentId; } updateCurrentId() { ++this.currentId; } getVectorData() { return this.vectorData; } initVectorData() { this.vectorData.points = {}; this.vectorData.controlPoints = {}; this.vectorData.roads = {}; this.vectorData.curveRoads = {}; this.vectorData.edges = {}; this.vectorData.tags = {}; } /** * 对公路的操作 */ getCurveRoads() { return this.vectorData.curveRoads; } getCurveRoad(curveRoadId) { if (curveRoadId) { return this.vectorData.curveRoads[curveRoadId]; } else { return null; } } addCurveRoad(curveRoad) { this.vectorData.curveRoads[curveRoad.vectorId] = curveRoad; } deleteCurveRoad(curveRoadId) { let curveRoad = this.getCurveRoad(curveRoadId); this.deletePoint(curveRoad.startId, curveRoadId); this.deletePoint(curveRoad.endId, curveRoadId); delete this.vectorData.curveRoads[curveRoadId]; } getRoads() { return this.vectorData.roads; } getRoad(roadId) { if (roadId) { return this.vectorData.roads[roadId]; } else { return null; } } addRoad(road) { this.vectorData.roads[road.vectorId] = road; } deleteRoad(roadId) { let road = this.getRoad(roadId); this.deletePoint(road.startId, roadId); this.deletePoint(road.endId, roadId); delete this.vectorData.roads[roadId]; } /** * 对端点的操作 */ getPoints() { return this.vectorData.points; } getPoint(pointId) { if (pointId) { return this.vectorData.points[pointId]; } else { return null; } } deletePoint(pointId, roadId) { let point = this.getPoint(pointId); //有可能先删除墙,导致点没了 if (point) { if (Object.keys(point.parent).length == 0) { point = null; delete this.vectorData.points[pointId]; } else if (Object.keys(point.parent).length == 1 && !roadId) { delete this.vectorData.points[pointId]; } else if ( Object.keys(point.parent).length == 1 && point.parent[roadId] ) { delete this.vectorData.points[pointId]; } else if ( Object.keys(point.parent).length == 1 && !point.parent[roadId] ) { return; } else { delete point.parent[roadId]; } } } addPoint(point) { this.vectorData.points[point.vectorId] = point; } /** * 对控制点的操作 */ getControlPoints() { return this.vectorData.controlPoints; } // getControlPoint(controlPointId) { // if (controlPointId) { // return this.vectorData.controlPoints[controlPointId]; // } else { // return null; // } // } getControlPoint(edgeId1, edgeId2) { if (this.vectorData.controlPoints[edgeId1 + "-" + edgeId2]) { return this.vectorData.controlPoints[edgeId1 + "-" + edgeId2]; } else if (this.vectorData.controlPoints[edgeId2 + "-" + edgeId1]) { return this.vectorData.controlPoints[edgeId2 + "-" + edgeId1]; } else { return null; } } getControlPoint2(key) { return this.vectorData.controlPoints[key]; } getControlPointForEdgeId(edgeId, dir) { for (let key in this.vectorData.controlPoints) { const controlPoint = this.vectorData.controlPoints[key]; if ( controlPoint.edgeInfo1.id == edgeId && controlPoint.edgeInfo1.dir == dir ) { return this.vectorData.controlPoints[key]; } else if ( controlPoint.edgeInfo2.id == edgeId && controlPoint.edgeInfo2.dir == dir ) { return this.vectorData.controlPoints[key]; } } } addControlPoint(controlPoint) { this.vectorData.controlPoints[ controlPoint.edgeInfo1.id + "-" + controlPoint.edgeInfo2.id ] = controlPoint; } deleteControlPoint(edgeId1, edgeId2) { let key = edgeId1 + "-" + edgeId2; if (!this.vectorData.controlPoints[key]) { key = edgeId2 + "-" + edgeId1; } if (this.vectorData.controlPoints[key]) { delete this.vectorData.controlPoints[key]; } } deleteControlPointForEdge(edgeId, dir) { let dControlPointIds = []; for (let key in this.vectorData.controlPoints) { const controlPoint = this.vectorData.controlPoints[key]; if ( controlPoint.edgeInfo1.id == edgeId || controlPoint.edgeInfo2.id == edgeId ) { dControlPointIds.push(key); } } for (let i = 0; i < dControlPointIds.length; ++i) { const controlPoint = this.vectorData.controlPoints[dControlPointIds[i]]; if ( controlPoint.edgeInfo1.id == edgeId && controlPoint.edgeInfo1.dir == dir ) { delete this.vectorData.controlPoints[dControlPointIds[i]]; } else if ( controlPoint.edgeInfo2.id == edgeId && controlPoint.edgeInfo2.dir == dir ) { delete this.vectorData.controlPoints[dControlPointIds[i]]; } } } /** * 对公路边缘的操作 */ getEdge(edgeId) { return this.vectorData.edges[edgeId]; } addEdge(edge) { this.vectorData.edges[edge.vectorId] = edge; } /** * 对标注的操作 */ addTag(tag) { this.vectorData.tags[tag.vectorId] = tag; } getTag(tagId) { return this.vectorData.tags[tagId]; } deleteTag(tagId) { delete this.vectorData.tags[tagId]; } getTags() { return this.vectorData.tags; } clear() { this.vectorData = {}; } } const dataService = new DataService(); export { dataService };