let fs = require('fs'); let params = { type: "FeatureCollection", totalFeatures: 544, features: [ ] } function writeJson(params){ //现将json文件读出来 fs.readFile('./map_bf.json',function(err,data){ console.log('读取文件') if(err){ return console.error(err); } console.log('读取文件成功') let bangladesh = data.toString();//将二进制的数据转换为字符串 bangladesh = JSON.parse(bangladesh);//将字符串转换为json对象 let arr2 = []; console.log('开始计算') let i = 0; // let cityName = []; let provinceNameArr = ["Barisal", "Chittagong", "Rajshahi", "Rangpur", "Dhaka", "Sylhet", "Mymensingh", "Khulna"]; let provinceNameArrJSON = { Barisal:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Chittagong:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Rajshahi:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Rangpur:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Dhaka:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Sylhet:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Mymensingh:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, Khulna:{ type: "FeatureCollection", totalFeatures: 544, features: [ ], }, }; let cityName = { Barisal:['Barguna','Barisal','Bhola','Jhalokati','Patuakhali','Pirojpur'], Chittagong:['Bandarban','Brahmanbaria','Chandpur','Chittagong','Khagrachhari','Lakshmipur','Noakhali','Rangamati','Comilla','Cox\'s Bazar','Feni'], Rajshahi:['Naogaon','Natore','Chapai Nawabganj','Pabna','Rajshahi','Sirajganj','Bogra','Joypurhat'], Rangpur:['Dinajpur','Gaibandha','Kurigram','Lalmonirhat','Nilphamari','Panchagarh','Rangpur','Thakurgaon'], Dhaka:[ 'Dhaka','Kishoreganj','Madaripur','Manikganj','Munshiganj','Narayanganj','Narsingdi','Rajbari','Shariatpur','Tangail','Faridpur','Gazipur','Gopalganj'], Sylhet:['Habiganj', 'Maulvibazar', 'Sunamganj', 'Sylhet'], Mymensingh:[ 'Mymensingh', 'Netrakona', 'Sherpur', 'Jamalpur'], Khulna:[ 'Bagerhat','Chuadanga','Jessore','Jhenaidah','Khulna','Kushtia','Magura','Meherpur','Narail','Satkhira'] }; let arr3Length = 0; let index = 0; let number = 0; let accuracy = 0.00000001; // Pirojpur // Division District let fun = function(arr,provinceName,name,item,cfName){ let arr3 = []; // console.log('计算第'+i+'轮开始'); // console.log(item) for(let d of arr){ // d.properties.name = d.properties.Divi_name+'-'+ d.properties.Dist_name+'-'+ d.properties.Upaz_name; // d.properties.name = d.properties.Divi_name; // d.properties.name = d.properties.Dist_name; // d.properties.name = d.properties.Upaz_name; // console.log(d.properties.Dist_name+' '+name,'----8888888888888888-----') // let isLog = false; if(d.properties.Divi_name == provinceName){ if(d.properties.Dist_name == name){ if(d.properties.Upaz_name == "Comilla Adarsha Sadar Upazila"){ accuracy = 0.00001; for(let j in d.geometry.coordinates[0][0]){ d.geometry.coordinates[0][0][j][0] -= 0.00077 d.geometry.coordinates[0][0][j][1] -= -0.000005 } }else{ accuracy = 0.00000001; } if(d.properties.Upaz_name=='Kutubdia Upazila'||d.properties.Upaz_name=='Sandwip Upazila'||d.properties.Upaz_name=='Phulbari Sadar Upazila'||(d.properties.Upaz_name=="Rajpara Thana"||d.properties.Upaz_name=="Shah Makhdum Thana"||d.properties.Upaz_name=="Boalia"||d.properties.Upaz_name=="Matihar Thana")||(d.properties.Upaz_name=="Dhanmondi Thana")||d.properties.Upaz_name=='Bhurungamari Upazila'){ continue } if(cfName == d.properties.Upaz_name){ continue } item.properties.name = d.properties.Dist_name+' District'; // if(d.properties.Upaz_name=='Mathbaria Upazila'){ // isLog = true; // } if(item.geometry.coordinates.length == 0){ number++; item.geometry.coordinates = JSON.parse(JSON.stringify(d.geometry.coordinates)); console.log('已筛选 '+number+' '+d.properties.Upaz_name+'-------------1---------'); }else{ let xArr = [],xIndex = 0; let yArr = [],yIndex = 0; let x1 = 0; let x2 = 0; let xhc = 0; let y1 = 0; let y2 = 0; let xk = false; let xkk = false; let yk = false; let ykk = false; for(let j in d.geometry.coordinates[0][0]){ for(let key in item.geometry.coordinates[0][0]){ if(Math.abs(item.geometry.coordinates[0][0][key][0] - d.geometry.coordinates[0][0][j][0])+Math.abs(item.geometry.coordinates[0][0][key][1] - d.geometry.coordinates[0][0][j][1]) < accuracy){ if(!x1){ x1 = Number(key); xArr[xIndex] = Number(key); }else{ if(Math.abs(x2-Number(key)) > 10){ xIndex++; xArr[xIndex] = x2; xIndex++; xArr[xIndex] = Number(key); } } if(!y1){ y1 = Number(j); yArr[yIndex] = Number(j); }else{ if(Math.abs(y2-Number(j)) > 10){ yIndex++; yArr[yIndex] = y2; yIndex++; yArr[yIndex] = Number(j); } } x2 = Number(key); y2 = Number(j); if(!xk&&x1!=x2){ xk = x2-x1>0?'+':'-' xkk = x2; } if(!yk&&y1!=y2){ yk = y2-y1>0?'+':'-'; ykk = y2; } break; } } } xIndex++; xArr[xIndex] = Number(x2); yIndex++; yArr[yIndex] = Number(y2); if(x1||x2||y1||y2){ console.log(xArr,item.geometry.coordinates[0][0].length,yArr,d.geometry.coordinates[0][0].length,'-------') if(yArr.length >2){ y1 = yArr[2] y2 = yArr[1] } if(y2>y1){ arr2 = d.geometry.coordinates[0][0].slice(y2,d.geometry.coordinates[0][0].length) arr2.push(...(d.geometry.coordinates[0][0].slice(0,y1))) }else{ arr2 = d.geometry.coordinates[0][0].slice(y2,y1) } if(d.properties.Upaz_name == "Comilla Adarsha Sadar Upazila"){ x1 = xArr[2]; x2 = xArr[1]; } if(x2>x1){ item.geometry.coordinates[0][0].splice(x2,item.geometry.coordinates[0][0].length-1-x2) item.geometry.coordinates[0][0].splice(0,x1,...arr2) }else if(x2 == x1){ x1 = Math.max(...xArr) x2 = Math.min(...xArr) console.log(x1,x2) item.geometry.coordinates[0][0].splice(x2,x1-x2,...arr2) }else{ item.geometry.coordinates[0][0].splice(x2,x1-x2,...arr2) } if(d.geometry.coordinates.length>1){ item.geometry.coordinates.push(...d.geometry.coordinates.slice(1,d.geometry.coordinates.length)) } number++; console.log('已筛选 '+number+' '+d.properties.Upaz_name+'-------------2---------'); }else{ arr3.push(d) } console.log(provinceName+'-'+name+'-'+d.properties.Upaz_name+' '+arr3.length+'_'+arr3Length+'-'+index); // d.geometry.coordinates[0][0] = arr1 } } } } if(arr3Length == arr3.length){ index++; }else{ index = 0; arr3Length = 0; } if(arr3.length>0&&index<2){ arr3Length = arr3.length; fun(arr3,provinceName,name,item) }else{ if(index>=2){ item = { type: "Feature", geometry: { type: "MultiPolygon", coordinates: arr3[0].geometry.coordinates }, properties: { name:'', } } index = 0; number = 1; arr3Length = 0; console.log('已筛选 '+number+' '+arr3[0].properties.Upaz_name+'-------------3---------'); fun(bangladesh.features,provinceName,name,item,arr3[0].properties.Upaz_name) }else{ console.log(item.geometry.coordinates[0][0].length+'-------------') item.geometry.coordinates[0][0].splice(0,1) provinceNameArrJSON[provinceName].features.push(item) // let str = JSON.stringify(provinceNameArrJSON[provinceName]);//因为nodejs的写入文件只认识字符串或者二进制数,所以把json对象转换成字符串重新写入json文件中 // // console.log(str) // fs.writeFile('./'+provinceName+'__.json',str,function(err){ // if(err){ // console.log(err); // } // console.log('----------'+provinceName+'计算完成-------------'); // }) if(provinceNameArrJSON[provinceName].features.length>0){ console.log(provinceName+' '+name+'已计算'); console.log(provinceNameArrJSON[provinceName].features.length+'-'+cityName[provinceName].length) if(provinceNameArrJSON[provinceName].features.length == cityName[provinceName].length){ for(let d of provinceNameArrJSON[provinceName].features){ for(let key=0;key0.01&&Math.abs(d.geometry.coordinates[0][0][0][0] - d.geometry.coordinates[0][0][d.geometry.coordinates[0][0].length-1][0])+Math.abs(d.geometry.coordinates[0][0][0][1] - d.geometry.coordinates[0][0][d.geometry.coordinates[0][0].length-1][1])>0.01){ d.geometry.coordinates[0][0].splice(key,1) key--; } }else if(key==d.geometry.coordinates[0][0].length-1){ if(Math.abs(d.geometry.coordinates[0][0][key][0] - d.geometry.coordinates[0][0][Number(key)-1][0])+Math.abs(d.geometry.coordinates[0][0][key][1] - d.geometry.coordinates[0][0][Number(key)-1][1])>0.01&&Math.abs(d.geometry.coordinates[0][0][key][0] - d.geometry.coordinates[0][0][0][0])+Math.abs(d.geometry.coordinates[0][0][key][1] - d.geometry.coordinates[0][0][0][1])>0.01){ d.geometry.coordinates[0][0].splice(key,1) key--; } }else{ if(Math.abs(d.geometry.coordinates[0][0][key][0] - d.geometry.coordinates[0][0][Number(key)-1][0])+Math.abs(d.geometry.coordinates[0][0][key][1] - d.geometry.coordinates[0][0][Number(key)-1][1])>0.01&&Math.abs(d.geometry.coordinates[0][0][key][0] - d.geometry.coordinates[0][0][Number(key)+1][0])+Math.abs(d.geometry.coordinates[0][0][key][1] - d.geometry.coordinates[0][0][Number(key)+1][1])>0.01){ d.geometry.coordinates[0][0].splice(key,1) key--; } } } } let str = JSON.stringify(provinceNameArrJSON[provinceName]);//因为nodejs的写入文件只认识字符串或者二进制数,所以把json对象转换成字符串重新写入json文件中 // console.log(str) fs.writeFile('./'+provinceName+'.json',str,function(err){ if(err){ console.log(err); } console.log('----------'+provinceName+'计算完成-------------'); }) } } } } } // for(let provinceName of provinceNameArr){ for(let name of cityName['Khulna']){ let item = { type: "Feature", geometry: { type: "MultiPolygon", coordinates: [] }, properties: { name:'', } } index = 0; number = 0; arr3Length = 0; fun(bangladesh.features,'Khulna',name,item) } // fun(bangladesh.features,'Chittagong','Comilla',item) // } // fun(bangladesh.features,'Khulna') }) } writeJson(params)//执行一下;