CreateHouseJsonUtil.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package com.fdkankan.model.utils;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.fdkankan.common.util.FileUtils;
  6. import com.fdkankan.model.bean.PointBean;
  7. import com.fdkankan.model.bean.SegmentBean;
  8. import com.fdkankan.model.bean.VertexBean;
  9. import com.fdkankan.model.bean.WallBean;
  10. import java.io.IOException;
  11. import java.util.Collection;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. public class CreateHouseJsonUtil {
  15. /**
  16. * 根据用户上传的户型图json文件生成houseType.json
  17. * @param filePath
  18. * @return
  19. */
  20. public static JSONObject createHouseTypeJsonByUser(String filePath) {
  21. JSONObject house = init();
  22. JSONArray floors = house.getJSONArray("floors");
  23. JSONArray floorJson = readFloorJson(filePath);
  24. for(int i=0;i<floorJson.size();++i) {
  25. JSONObject floor = floorJson.getJSONObject(i);
  26. JSONObject floorData = convert(floor,i);
  27. floors.add(floorData);
  28. }
  29. return house;
  30. }
  31. /**
  32. * 根据floorplan_cad.json文件生成houseType.json
  33. * @param filePath
  34. * @return
  35. */
  36. public static JSONObject createHouseTypeJsonByCad(String filePath) {
  37. JSONArray floors = readFloorJson(filePath);
  38. JSONObject house = new JSONObject();
  39. house.put("name", "houseType.json");
  40. house.put("version", "2.1");
  41. JSONArray targetFloors = new JSONArray();
  42. house.put("floors", targetFloors);
  43. for(int i = 0; i < floors.size(); i++){
  44. JSONObject floor = (JSONObject)floors.get(i);
  45. JSONArray[] pointsAndWalls = createHouseTypeJsonHandler(floor);
  46. JSONArray points = pointsAndWalls[0];
  47. JSONArray walls = pointsAndWalls[1];
  48. JSONObject targetFloor = new JSONObject();
  49. targetFloor.put("points", points);
  50. targetFloor.put("walls", walls);
  51. targetFloors.add(targetFloor);
  52. }
  53. return house;
  54. }
  55. private static JSONArray[] createHouseTypeJsonHandler(JSONObject floor){
  56. JSONArray[] result = new JSONArray[2];
  57. //处理点
  58. Map<Integer, VertexBean> vertexMap = new HashMap<>();
  59. Map<String, PointBean> pointMap = new HashMap<>();
  60. Map<Integer, String> vpMap = new HashMap<>();
  61. JSONArray vertexArr = floor.getJSONArray("vertex-xy");
  62. for(int i = 0; i < vertexArr.size(); i++){
  63. Object o = vertexArr.get(i);
  64. VertexBean vertexBean = JSON.parseObject(JSON.toJSONString(o), VertexBean.class);
  65. Integer vertexId = vertexBean.getId();
  66. vertexMap.put(vertexId, vertexBean);
  67. String pointId = "Point" + i;
  68. pointMap.put(pointId, PointBean.builder().vectorId(pointId).x(vertexBean.getX()).y(vertexBean.getY()).build());
  69. vpMap.put(vertexId, pointId);
  70. }
  71. //处理墙
  72. Map<Integer, SegmentBean> segmentMap = new HashMap<>();
  73. Map<String, WallBean> wallMap = new HashMap<>();
  74. Map<Integer, String> swMap = new HashMap<>();
  75. JSONArray segmentArr = floor.getJSONArray("segment");
  76. Map<String, String> startMap = new HashMap<>();
  77. Map<String, String> endMap = new HashMap<>();
  78. for(int i = 0; i < segmentArr.size(); i++){
  79. Object o = segmentArr.get(i);
  80. SegmentBean segmentBean = JSON.parseObject(JSON.toJSONString(o), SegmentBean.class);
  81. String startPointId = vpMap.get(segmentBean.getA());
  82. String endPointId = vpMap.get(segmentBean.getB());
  83. segmentBean.setStartPointId(startPointId);
  84. segmentBean.setEndPointId(endPointId);
  85. Integer segmentId = segmentBean.getId();
  86. segmentMap.put(segmentId, segmentBean);
  87. String wallId = "Wall" + i;
  88. WallBean wallBean = WallBean.builder()
  89. .vectorId(wallId)
  90. .start(segmentBean.getStartPointId())
  91. .end(segmentBean.getEndPointId())
  92. .children(new String[]{})
  93. .width(0.2d)
  94. .build();
  95. wallMap.put(wallId, wallBean);
  96. startMap.put(wallBean.getStart(), wallBean.getVectorId());
  97. endMap.put(wallBean.getEnd(), wallBean.getVectorId());
  98. swMap.put(segmentId, wallId);
  99. }
  100. Collection<PointBean> pointBeans = pointMap.values();
  101. for (PointBean pointBean : pointBeans) {
  102. Map<String, String> parent = new HashMap<>();
  103. String startParent = startMap.get(pointBean.getVectorId());
  104. String endParent = endMap.get(pointBean.getVectorId());
  105. parent.put(startParent, "start");
  106. parent.put(endParent, "end");
  107. pointBean.setParent(parent);
  108. }
  109. JSONArray pointArr = JSON.parseArray(JSON.toJSONString(pointBeans));
  110. result[0] = pointArr;
  111. Collection<WallBean> wallBeans = wallMap.values();
  112. JSONArray wallArr = JSON.parseArray(JSON.toJSONString(wallBeans));
  113. result[1] = wallArr;
  114. return result;
  115. }
  116. private static JSONObject init() {
  117. JSONObject outContent = new JSONObject();
  118. outContent.put("name", "houseType.json");
  119. outContent.put("version", "2.1");
  120. outContent.put("floors", new JSONArray());
  121. outContent.put("newVectorId", null);
  122. outContent.put("setting", null);
  123. outContent.put("boundingBox", null);
  124. return outContent;
  125. }
  126. private static JSONArray readFloorJson(String filePath) {
  127. try {
  128. JSONObject floorplan = FileUtils.readJson(filePath);
  129. JSONArray floors = floorplan.getJSONArray("floors");
  130. return floors;
  131. } catch (IOException e) {
  132. return null;
  133. }
  134. }
  135. private static JSONObject convert(JSONObject floorJson,int floor) {
  136. JSONArray rooms = floorJson.getJSONArray("rooms");
  137. JSONObject walls = floorJson.getJSONObject("walls");
  138. JSONObject points = floorJson.getJSONObject("points");
  139. JSONObject symbols = floorJson.getJSONObject("symbols");
  140. JSONArray _points = convertPoints(points);
  141. JSONArray _walls = convertWalls(walls);
  142. JSONArray _symbols = convertSymbols(symbols,floor);
  143. JSONArray _rooms = convertRooms(rooms,floor);
  144. JSONObject floorData = new JSONObject();
  145. floorData.put("points", _points);
  146. floorData.put("walls", _walls);
  147. floorData.put("symbols", _symbols);
  148. floorData.put("rooms", _rooms);
  149. return floorData;
  150. }
  151. private static JSONArray convertPoints(JSONObject points) {
  152. JSONArray _points = new JSONArray();
  153. for (Map.Entry<String, Object> entry: points.entrySet()) {
  154. JSONObject pointValue = (JSONObject)entry.getValue();
  155. JSONObject _pointValue = new JSONObject();
  156. _pointValue.put("x", pointValue.getFloat("x"));
  157. _pointValue.put("y", pointValue.getFloat("y"));
  158. _pointValue.put("parent", pointValue.getJSONObject("parent"));
  159. _pointValue.put("vectorId", pointValue.getString("vectorId"));
  160. _points.add(_pointValue);
  161. }
  162. return _points;
  163. }
  164. private static JSONArray convertWalls(JSONObject walls) {
  165. JSONArray _walls = new JSONArray();
  166. for (Map.Entry<String, Object> entry: walls.entrySet()) {
  167. JSONObject wallValue = (JSONObject)entry.getValue();
  168. JSONObject _wallValue = new JSONObject();
  169. _wallValue.put("start", wallValue.getString("start"));
  170. _wallValue.put("end", wallValue.getString("end"));
  171. _wallValue.put("children", wallValue.getJSONArray("children"));
  172. _wallValue.put("vectorId", wallValue.getString("vectorId"));
  173. _wallValue.put("width", 0.2);
  174. //leftEdgeId
  175. //rightEdgeId
  176. _walls.add(_wallValue);
  177. }
  178. return _walls;
  179. }
  180. //门/窗
  181. private static JSONArray convertSymbols(JSONObject symbols,int floor) {
  182. JSONArray _symbols = new JSONArray();
  183. for (Map.Entry<String, Object> entry: symbols.entrySet()) {
  184. JSONObject symbolValue = (JSONObject)entry.getValue();
  185. JSONObject _symbolValue = new JSONObject();
  186. _symbolValue.put("start", symbolValue.getJSONObject("startPoint"));
  187. _symbolValue.put("end", symbolValue.getJSONObject("endPoint"));
  188. _symbolValue.put("parent", symbolValue.getString("parent"));
  189. _symbolValue.put("openSide", symbolValue.getString("openSide"));
  190. _symbolValue.put("vectorId", symbolValue.getString("vectorId"));
  191. _symbolValue.put("points2d", symbolValue.getJSONArray("points2d"));
  192. _symbolValue.put("geoType", symbolValue.getString("geoType"));
  193. _symbolValue.put("floor", floor);
  194. //"groundClearance": -0.7,
  195. //"height": 1.3,
  196. _symbols.add(_symbolValue);
  197. }
  198. return _symbols;
  199. }
  200. private static JSONArray convertRooms(JSONArray rooms,int floor) {
  201. JSONArray _rooms = new JSONArray();
  202. for(int i=0;i<rooms.size();++i) {
  203. JSONObject room = rooms.getJSONObject(i);
  204. String name = room.getString("name");
  205. JSONObject center = room.getJSONObject("center");
  206. String roomId = room.getString("roomId");
  207. JSONArray wallIds = room.getJSONArray("wallIds");
  208. JSONArray wallPointIDs = room.getJSONArray("wallPointIDs");
  209. String parent = room.getString("parent");
  210. JSONObject _room = new JSONObject();
  211. _room.put("name", name);
  212. _room.put("roomId", roomId);
  213. _room.put("center", center);
  214. _room.put("wallIds", wallIds);
  215. _room.put("wallPointIDs", wallPointIDs);
  216. _room.put("parent", parent);
  217. _rooms.add(_room);
  218. }
  219. return _rooms;
  220. }
  221. }