main.js 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const fs = require('fs');
  2. const turf = require('@turf/turf');
  3. const wkx = require('wkx');
  4. const Database = require('../db');
  5. const objUtils = require('../../utils/objUtils');
  6. const moment = require('moment');
  7. const { console } = require('inspector');
  8. const pool = new Database({
  9. host: '192.168.100.30',
  10. database: 'real3d',
  11. user: 'postgres',
  12. password: 'postgis',
  13. port: 5432,
  14. });
  15. const saveInfoTable = "tdgy_sj1";
  16. const saveGeomTable = "TB_TDGY_SJ1";
  17. async function updateTable() {
  18. // 连接到数据库,设置模式
  19. await pool.connect();
  20. await pool.setSchema('vector');
  21. let tbMap = new Map();
  22. tbMap.set("tdgy_sj_use", "TB_TDGY_SJ_use");
  23. tbMap.set("tdgy_sj_2022_cr", "TB_TDGY_SJ_use_2022cr");
  24. tbMap.set("tdgy_sj_2022_hb", "TB_TDGY_SJ_use_2022hb");
  25. tbMap.set("tdgy_sj_2023_cr", "TB_TDGY_SJ_use_2023cr");
  26. tbMap.set("tdgy_sj_2023_hb", "TB_TDGY_SJ_use_2023hb");
  27. for (const [infoTbName, geomTbName] of tbMap) {
  28. // 查询全部的属性表
  29. const sqlInfoQuery = `SELECT * FROM ${infoTbName}`;
  30. console.log(sqlInfoQuery);
  31. const infos = await pool.query(sqlInfoQuery);
  32. // 查询全部的几何表
  33. const sqlGeomQuery = `SELECT pid,xmmc,st_asewkt(geom) FROM "${geomTbName}"`;
  34. console.log(sqlGeomQuery);
  35. const geoms = await pool.query(sqlGeomQuery);
  36. // 生成pid对应的几何信息list
  37. let infoMap = new Map();
  38. for (let i = 0; i < geoms.rows.length; i++) {
  39. if (infoMap.has(geoms.rows[i].pid)) {
  40. let list = infoMap.get(geoms.rows[i].pid);
  41. list.push(geoms.rows[i]);
  42. infoMap.set(geoms.rows[i].pid, list);
  43. } else {
  44. infoMap.set(geoms.rows[i].pid, [geoms.rows[i]]);
  45. }
  46. }
  47. // 将infos插入到数据库
  48. for (let i = 0; i < infos.rows.length; i++) {
  49. let info = infos.rows[i];
  50. info = objUtils.setEmptyStrings(info)
  51. // 生成插入语句
  52. let sqlInsert = `INSERT INTO ${saveInfoTable}(xmmc,tdzl,crmj,tdyt,rjl,cjj,gylx,cjr,pzjg,pzwh,pzrq,xzqh,sulx,srf,crmj_m,tdsyq,htbh,jbr,zdyt,cqzh) VALUES ('${info.xmmc}','${info.tdzl}','${info.crmj}','${info.tdyt}','${info.rjl}','${info.cjj}','${info.gylx}','${info.cjr}','${info.pzjg}','${info.pzwh}','${info.pzrq}','${info.xzqh}','${info.sulx}','${info.srf}',${info.crmj_m},'${info.tdsyq}','${info.htbh}','${info.jbr}','${info.zdyt}','${info.cqzh}') RETURNING id`;
  53. console.log(sqlInsert);
  54. const insertInfo = await pool.query(sqlInsert);
  55. const insertedId = insertInfo.rows[0].id;
  56. console.log(insertedId);
  57. console.log("原id是什么:" + info.id);
  58. let geomList = infoMap.get(info.id);
  59. if(geomList==undefined){
  60. continue;
  61. }
  62. for (let j = 0; j < geomList.length; j++) {
  63. let geomItem = geomList[j];
  64. // TODO: 生成插入语句
  65. // 生成插入语句
  66. let sqlInsert = `INSERT INTO "${saveGeomTable}"(pid,xmmc,geom) VALUES ('${insertedId}','${geomItem.xmmc}',public.ST_GeomFromEWKT('${geomItem.st_asewkt}'))`;
  67. console.log(sqlInsert);
  68. const insertInfo = await pool.query(sqlInsert);
  69. console.log(insertInfo);
  70. }
  71. }
  72. }
  73. }
  74. updateTable()