123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- 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;key<d.geometry.coordinates[0][0].length;key++){
- if(key==0){
- if(Math.abs(d.geometry.coordinates[0][0][0][0] - d.geometry.coordinates[0][0][1][0])+Math.abs(d.geometry.coordinates[0][0][0][1] - d.geometry.coordinates[0][0][1][1])>0.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)//执行一下;
|