schedule.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. const fs = require('fs');
  2. const turf = require('@turf/turf');
  3. const wkx = require('wkx');
  4. const Database = require('./db');
  5. const moment = require('moment');
  6. const pool = new Database({
  7. host: '192.168.100.30',
  8. database: 'real3d',
  9. user: 'postgres',
  10. password: 'postgis',
  11. port: 5432,
  12. });
  13. // 选址结果导出
  14. async function readFile(inFilePath, outFilePath) {
  15. let typeMap = {
  16. "公园绿地": {
  17. name: `公园绿地`,
  18. one_level_name: "公园绿地",
  19. one_level_code: `1401`,
  20. table: `dj_gf`,
  21. field: `公园_地`
  22. },
  23. "防护绿地": {
  24. name: `防护绿地`,
  25. one_level_name: "防护绿地",
  26. one_level_code: `1402`,
  27. table: `dj_gf`,
  28. field: `公园_地`
  29. },
  30. "广场用地": {
  31. name: `广场用地`,
  32. one_level_name: "广场用地",
  33. one_level_code: `1403`,
  34. table: `dj_gf`,
  35. field: `公园_地`
  36. },
  37. "零售商业用地": {
  38. name: `零售商业用地`,
  39. one_level_name: "商业用地",
  40. one_level_code: `0901`,
  41. two_level_name: `零售商业用地`,
  42. two_level_code: `090101`,
  43. table: `dj_sf`,
  44. field: `集体楼`
  45. },
  46. // 待定
  47. "社会停车场用地": {
  48. name: `社会停车场用地`,
  49. one_level_name: "交通场站用地",
  50. one_level_code: `1208`,
  51. two_level_name: `社会停车场用地`,
  52. two_level_code: `120803`,
  53. table: `dj_gf`,
  54. field: `公园_地`
  55. },
  56. "零售商业用地": {
  57. name: `零售商业用地`,
  58. one_level_name: "商业用地",
  59. one_level_code: `0901`,
  60. two_level_name: `零售商业用地`,
  61. two_level_code: `090101`,
  62. table: `dj_sf`,
  63. field: `集体楼`
  64. },
  65. "商务金融混合旅馆混合零售商业用地": {
  66. name: `商务金融混合旅馆混合零售商业用地`,
  67. one_level_name: "商业用地",
  68. one_level_code: `0901`,
  69. table: `dj_sf`,
  70. field: `集体楼`
  71. },
  72. "零售商业混合旅馆用地": {
  73. name: `零售商业混合旅馆用地`,
  74. one_level_name: "商业用地",
  75. one_level_code: `0901`,
  76. table: `dj_sf`,
  77. field: `集体楼`
  78. },
  79. "二类城镇住宅混合零售商业用地": {
  80. name: `二类城镇住宅混合零售商业用地`,
  81. one_level_name: "城镇住宅用地",
  82. one_level_code: `0701`,
  83. table: `dj_zz`,
  84. field: `集体楼`
  85. }
  86. }
  87. try {
  88. // 同步读取GeoJSON文件
  89. const data = fs.readFileSync(inFilePath, 'utf8');
  90. // 解析GeoJSON数据
  91. const dataListJson = JSON.parse(data);
  92. // 连接到数据库,设置模式
  93. await pool.connect();
  94. await pool.setSchema('vector');
  95. // 转换为 GeoJSON 格式
  96. const geojsonFeatures = [];
  97. const areaMap = {};
  98. for (const item of dataListJson) {
  99. const ewktString = item.ewkt;
  100. const parseGeom = wkx.Geometry.parse(ewktString).toGeoJSON();
  101. const multiPolygon = turf.multiPolygon(parseGeom.coordinates);
  102. const tableInfo = typeMap[item.kzxxgydmc]
  103. const sqlQuery = `SELECT "${tableInfo.field}" FROM ${tableInfo.table} WHERE public.st_contains(geom, public.st_geomfromewkt('${ewktString}'))`;
  104. console.log(sqlQuery);
  105. const res = await pool.query(sqlQuery);
  106. // 获取查询结果中的第一个值
  107. const queryResult = res.rows.length > 0 ? res.rows[0][tableInfo.field] : 0;
  108. // const queryResult = 0;
  109. const timestamp = new Date().getTime();
  110. if (areaMap[item.kzxxgydmc]) {
  111. areaMap[item.kzxxgydmc] += item.ydmj;
  112. } else {
  113. areaMap[item.kzxxgydmc] = item.ydmj;
  114. }
  115. multiPolygon.properties = {
  116. dkbm: item.dkbm,//地块编码
  117. kzxxgyddm: item.kzxxgyddm,
  118. kzxxgydmc: item.kzxxgydmc,//地块名称类别
  119. ydmj: item.ydmj,//面积
  120. name: item.name,
  121. sjxzqmc: item.sjxzqmc,
  122. xjxzqmc: item.xjxzqmc,
  123. xzmc: item.xzmc,
  124. landPrice: (queryResult * item.ydmj / 10000).toFixed(2),
  125. bzdw: item.bzdw,
  126. time: moment(timestamp).format('YYYY-MM-DD HH:mm:ss')
  127. };
  128. geojsonFeatures.push(multiPolygon);
  129. }
  130. console.log(`面积:`);
  131. console.log(areaMap);
  132. // 构造 GeoJSON FeatureCollection 对象
  133. const geojson = turf.featureCollection(geojsonFeatures);
  134. // 将 GeoJSON 写入文件
  135. fs.writeFileSync(outFilePath, JSON.stringify(geojson, null, 2));
  136. console.log(`成功保存为 GeoJSON 文件:${outFilePath}`);
  137. } catch (err) {
  138. console.error('操作GeoJSON文件时出错:', err);
  139. }
  140. }
  141. readFile("./data/schedule/规划结果.json", "./data/schedule/规划结果.geojson")