DataService.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  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.backgroundImg = null;
  20. this.vectorData.points = {};
  21. this.vectorData.roads = {};
  22. this.vectorData.edges = {};
  23. this.vectorData.curvePoints = {};
  24. this.vectorData.curveRoads = {};
  25. this.vectorData.curveEdges = {};
  26. this.vectorData.controlPoints = {};
  27. this.vectorData.tags = {};
  28. }
  29. getCurvePoints() {
  30. return this.vectorData.curvePoints;
  31. }
  32. getCurvePoint(pointId) {
  33. if (pointId) {
  34. return this.vectorData.curvePoints[pointId];
  35. } else {
  36. return null;
  37. }
  38. }
  39. /**
  40. * 对公路的操作
  41. */
  42. getCurveRoads() {
  43. return this.vectorData.curveRoads;
  44. }
  45. getCurveRoad(curveRoadId) {
  46. if (curveRoadId) {
  47. return this.vectorData.curveRoads[curveRoadId];
  48. } else {
  49. return null;
  50. }
  51. }
  52. addCurveRoad(curveRoad) {
  53. this.vectorData.curveRoads[curveRoad.vectorId] = curveRoad;
  54. }
  55. deleteCurveRoad(curveRoadId) {
  56. let curveRoad = this.getCurveRoad(curveRoadId);
  57. this.deletePoint(curveRoad.startId, curveRoadId);
  58. this.deletePoint(curveRoad.endId, curveRoadId);
  59. delete this.vectorData.curveRoads[curveRoadId];
  60. }
  61. getCurveEdge(curveEdgeId) {
  62. return this.vectorData.curveEdges[curveEdgeId];
  63. }
  64. addCurveEdge(curveEdge) {
  65. this.vectorData.curveEdges[curveEdge.vectorId] = curveEdge;
  66. }
  67. addCurvePoint(curvePoint) {
  68. this.vectorData.curvePoints[curvePoint.vectorId] = curvePoint;
  69. }
  70. getRoads() {
  71. return this.vectorData.roads;
  72. }
  73. getRoad(roadId) {
  74. if (roadId) {
  75. return this.vectorData.roads[roadId];
  76. } else {
  77. return null;
  78. }
  79. }
  80. addRoad(road) {
  81. this.vectorData.roads[road.vectorId] = road;
  82. }
  83. deleteRoad(roadId) {
  84. let road = this.getRoad(roadId);
  85. this.deletePoint(road.startId, roadId);
  86. this.deletePoint(road.endId, roadId);
  87. delete this.vectorData.roads[roadId];
  88. }
  89. /**
  90. * 对端点的操作
  91. */
  92. getPoints() {
  93. return this.vectorData.points;
  94. }
  95. getPoint(pointId) {
  96. if (pointId) {
  97. return this.vectorData.points[pointId];
  98. } else {
  99. return null;
  100. }
  101. }
  102. deletePoint(pointId, roadId) {
  103. let point = this.getPoint(pointId);
  104. //有可能先删除墙,导致点没了
  105. if (point) {
  106. if (Object.keys(point.parent).length == 0) {
  107. point = null;
  108. delete this.vectorData.points[pointId];
  109. } else if (Object.keys(point.parent).length == 1 && !roadId) {
  110. delete this.vectorData.points[pointId];
  111. } else if (
  112. Object.keys(point.parent).length == 1 &&
  113. point.parent[roadId]
  114. ) {
  115. delete this.vectorData.points[pointId];
  116. } else if (
  117. Object.keys(point.parent).length == 1 &&
  118. !point.parent[roadId]
  119. ) {
  120. return;
  121. } else {
  122. delete point.parent[roadId];
  123. }
  124. }
  125. }
  126. addPoint(point) {
  127. this.vectorData.points[point.vectorId] = point;
  128. }
  129. /**
  130. * 对控制点的操作
  131. */
  132. getControlPoints() {
  133. return this.vectorData.controlPoints;
  134. }
  135. // getControlPoint(controlPointId) {
  136. // if (controlPointId) {
  137. // return this.vectorData.controlPoints[controlPointId];
  138. // } else {
  139. // return null;
  140. // }
  141. // }
  142. getControlPoint(edgeId1, edgeId2) {
  143. if (this.vectorData.controlPoints[edgeId1 + "-" + edgeId2]) {
  144. return this.vectorData.controlPoints[edgeId1 + "-" + edgeId2];
  145. } else if (this.vectorData.controlPoints[edgeId2 + "-" + edgeId1]) {
  146. return this.vectorData.controlPoints[edgeId2 + "-" + edgeId1];
  147. } else {
  148. return null;
  149. }
  150. }
  151. getControlPoint2(key) {
  152. return this.vectorData.controlPoints[key];
  153. }
  154. getControlPointForEdgeId(edgeId, dir) {
  155. for (let key in this.vectorData.controlPoints) {
  156. const controlPoint = this.vectorData.controlPoints[key];
  157. if (
  158. controlPoint.edgeInfo1.id == edgeId &&
  159. controlPoint.edgeInfo1.dir == dir
  160. ) {
  161. return this.vectorData.controlPoints[key];
  162. } else if (
  163. controlPoint.edgeInfo2.id == edgeId &&
  164. controlPoint.edgeInfo2.dir == dir
  165. ) {
  166. return this.vectorData.controlPoints[key];
  167. }
  168. }
  169. }
  170. addControlPoint(controlPoint) {
  171. this.vectorData.controlPoints[
  172. controlPoint.edgeInfo1.id + "-" + controlPoint.edgeInfo2.id
  173. ] = controlPoint;
  174. }
  175. deleteControlPoint(edgeId1, edgeId2) {
  176. let key = edgeId1 + "-" + edgeId2;
  177. if (!this.vectorData.controlPoints[key]) {
  178. key = edgeId2 + "-" + edgeId1;
  179. }
  180. if (this.vectorData.controlPoints[key]) {
  181. delete this.vectorData.controlPoints[key];
  182. }
  183. }
  184. deleteControlPointForEdge(edgeId, dir) {
  185. let dControlPointIds = [];
  186. for (let key in this.vectorData.controlPoints) {
  187. const controlPoint = this.vectorData.controlPoints[key];
  188. if (
  189. controlPoint.edgeInfo1.id == edgeId ||
  190. controlPoint.edgeInfo2.id == edgeId
  191. ) {
  192. dControlPointIds.push(key);
  193. }
  194. }
  195. for (let i = 0; i < dControlPointIds.length; ++i) {
  196. const controlPoint = this.vectorData.controlPoints[dControlPointIds[i]];
  197. if (
  198. controlPoint.edgeInfo1.id == edgeId &&
  199. controlPoint.edgeInfo1.dir == dir
  200. ) {
  201. delete this.vectorData.controlPoints[dControlPointIds[i]];
  202. } else if (
  203. controlPoint.edgeInfo2.id == edgeId &&
  204. controlPoint.edgeInfo2.dir == dir
  205. ) {
  206. delete this.vectorData.controlPoints[dControlPointIds[i]];
  207. }
  208. }
  209. }
  210. /**
  211. * 对公路边缘的操作
  212. */
  213. getEdge(edgeId) {
  214. return this.vectorData.edges[edgeId];
  215. }
  216. addEdge(edge) {
  217. this.vectorData.edges[edge.vectorId] = edge;
  218. }
  219. addBackgroundImg(img) {
  220. this.vectorData.backgroundImg = img;
  221. }
  222. getBackgroundImg() {
  223. return this.vectorData.backgroundImg;
  224. }
  225. setAngle(angle) {
  226. this.vectorData.backgroundImg.angle = angle;
  227. }
  228. /**
  229. * 对标注的操作
  230. */
  231. addTag(tag) {
  232. this.vectorData.tags[tag.vectorId] = tag;
  233. }
  234. getTag(tagId) {
  235. return this.vectorData.tags[tagId];
  236. }
  237. deleteTag(tagId) {
  238. delete this.vectorData.tags[tagId];
  239. }
  240. getTags() {
  241. return this.vectorData.tags;
  242. }
  243. clear() {
  244. this.vectorData = {};
  245. }
  246. }
  247. const dataService = new DataService();
  248. export { dataService };