DataService.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. export class DataService {
  2. constructor() {
  3. this.vectorData = {};
  4. this.currentId = 0; // 当前可用id
  5. }
  6. setCurrentId(id) {
  7. this.currentId = id;
  8. }
  9. getCurrentId() {
  10. return this.currentId;
  11. }
  12. updateCurrentId() {
  13. ++this.currentId;
  14. }
  15. getVectorData() {
  16. return this.vectorData;
  17. }
  18. initVectorData() {
  19. this.vectorData.points = {};
  20. this.vectorData.controlPoints = {};
  21. this.vectorData.roads = {};
  22. this.vectorData.curveRoads = {};
  23. this.vectorData.edges = {};
  24. this.vectorData.tags = {};
  25. }
  26. /**
  27. * 对公路的操作
  28. */
  29. getCurveRoads() {
  30. return this.vectorData.curveRoads;
  31. }
  32. getCurveRoad(curveRoadId) {
  33. if (curveRoadId) {
  34. return this.vectorData.curveRoads[curveRoadId];
  35. } else {
  36. return null;
  37. }
  38. }
  39. addCurveRoad(curveRoad) {
  40. this.vectorData.curveRoads[curveRoad.vectorId] = curveRoad;
  41. }
  42. deleteCurveRoad(curveRoadId) {
  43. let curveRoad = this.getCurveRoad(curveRoadId);
  44. this.deletePoint(curveRoad.startId, curveRoadId);
  45. this.deletePoint(curveRoad.endId, curveRoadId);
  46. delete this.vectorData.curveRoads[curveRoadId];
  47. }
  48. getRoads() {
  49. return this.vectorData.roads;
  50. }
  51. getRoad(roadId) {
  52. if (roadId) {
  53. return this.vectorData.roads[roadId];
  54. } else {
  55. return null;
  56. }
  57. }
  58. addRoad(road) {
  59. this.vectorData.roads[road.vectorId] = road;
  60. }
  61. deleteRoad(roadId) {
  62. let road = this.getRoad(roadId);
  63. this.deletePoint(road.startId, roadId);
  64. this.deletePoint(road.endId, roadId);
  65. delete this.vectorData.roads[roadId];
  66. }
  67. /**
  68. * 对端点的操作
  69. */
  70. getPoints() {
  71. return this.vectorData.points;
  72. }
  73. getPoint(pointId) {
  74. if (pointId) {
  75. return this.vectorData.points[pointId];
  76. } else {
  77. return null;
  78. }
  79. }
  80. deletePoint(pointId, roadId) {
  81. let point = this.getPoint(pointId);
  82. //有可能先删除墙,导致点没了
  83. if (point) {
  84. if (Object.keys(point.parent).length == 0) {
  85. point = null;
  86. delete this.vectorData.points[pointId];
  87. } else if (Object.keys(point.parent).length == 1 && !roadId) {
  88. delete this.vectorData.points[pointId];
  89. } else if (
  90. Object.keys(point.parent).length == 1 &&
  91. point.parent[roadId]
  92. ) {
  93. delete this.vectorData.points[pointId];
  94. } else if (
  95. Object.keys(point.parent).length == 1 &&
  96. !point.parent[roadId]
  97. ) {
  98. return;
  99. } else {
  100. delete point.parent[roadId];
  101. }
  102. }
  103. }
  104. addPoint(point) {
  105. this.vectorData.points[point.vectorId] = point;
  106. }
  107. /**
  108. * 对控制点的操作
  109. */
  110. getControlPoints() {
  111. return this.vectorData.controlPoints;
  112. }
  113. // getControlPoint(controlPointId) {
  114. // if (controlPointId) {
  115. // return this.vectorData.controlPoints[controlPointId];
  116. // } else {
  117. // return null;
  118. // }
  119. // }
  120. getControlPoint(edgeId1, edgeId2) {
  121. if (this.vectorData.controlPoints[edgeId1 + "-" + edgeId2]) {
  122. return this.vectorData.controlPoints[edgeId1 + "-" + edgeId2];
  123. } else if (this.vectorData.controlPoints[edgeId2 + "-" + edgeId1]) {
  124. return this.vectorData.controlPoints[edgeId2 + "-" + edgeId1];
  125. } else {
  126. return null;
  127. }
  128. }
  129. getControlPoint2(key) {
  130. return this.vectorData.controlPoints[key];
  131. }
  132. getControlPointForEdgeId(edgeId, dir) {
  133. for (let key in this.vectorData.controlPoints) {
  134. const controlPoint = this.vectorData.controlPoints[key];
  135. if (
  136. controlPoint.edgeInfo1.id == edgeId &&
  137. controlPoint.edgeInfo1.dir == dir
  138. ) {
  139. return this.vectorData.controlPoints[key];
  140. } else if (
  141. controlPoint.edgeInfo2.id == edgeId &&
  142. controlPoint.edgeInfo2.dir == dir
  143. ) {
  144. return this.vectorData.controlPoints[key];
  145. }
  146. }
  147. }
  148. addControlPoint(controlPoint) {
  149. this.vectorData.controlPoints[
  150. controlPoint.edgeInfo1.id + "-" + controlPoint.edgeInfo2.id
  151. ] = controlPoint;
  152. }
  153. deleteControlPoint(edgeId1, edgeId2) {
  154. let key = edgeId1 + "-" + edgeId2;
  155. if (!this.vectorData.controlPoints[key]) {
  156. key = edgeId2 + "-" + edgeId1;
  157. }
  158. if (this.vectorData.controlPoints[key]) {
  159. delete this.vectorData.controlPoints[key];
  160. }
  161. }
  162. deleteControlPointForEdge(edgeId, dir) {
  163. let dControlPointIds = [];
  164. for (let key in this.vectorData.controlPoints) {
  165. const controlPoint = this.vectorData.controlPoints[key];
  166. if (
  167. controlPoint.edgeInfo1.id == edgeId ||
  168. controlPoint.edgeInfo2.id == edgeId
  169. ) {
  170. dControlPointIds.push(key);
  171. }
  172. }
  173. for (let i = 0; i < dControlPointIds.length; ++i) {
  174. const controlPoint = this.vectorData.controlPoints[dControlPointIds[i]];
  175. if (
  176. controlPoint.edgeInfo1.id == edgeId &&
  177. controlPoint.edgeInfo1.dir == dir
  178. ) {
  179. delete this.vectorData.controlPoints[dControlPointIds[i]];
  180. } else if (
  181. controlPoint.edgeInfo2.id == edgeId &&
  182. controlPoint.edgeInfo2.dir == dir
  183. ) {
  184. delete this.vectorData.controlPoints[dControlPointIds[i]];
  185. }
  186. }
  187. }
  188. /**
  189. * 对公路边缘的操作
  190. */
  191. getEdge(edgeId) {
  192. return this.vectorData.edges[edgeId];
  193. }
  194. addEdge(edge) {
  195. this.vectorData.edges[edge.vectorId] = edge;
  196. }
  197. /**
  198. * 对标注的操作
  199. */
  200. addTag(tag) {
  201. this.vectorData.tags[tag.vectorId] = tag;
  202. }
  203. getTag(tagId) {
  204. return this.vectorData.tags[tagId];
  205. }
  206. deleteTag(tagId) {
  207. delete this.vectorData.tags[tagId];
  208. }
  209. getTags() {
  210. return this.vectorData.tags;
  211. }
  212. clear() {
  213. this.vectorData = {};
  214. }
  215. }
  216. const dataService = new DataService();
  217. export { dataService };