arcgis三点坐标转成三维数组和面(polygon)数据

 1.首先把字符串数据转成三维数组

LineString这个也可以是数组包含多个面信息

也支持一个对象里面有多条河流信息

下面是我写的一个方法(json里面字段未必和我一样,可以修改一下就好) 

                let json=require('./河流.json')
                function clearObj(objList){
                    for(var i in objList){
                        if( typeof objList[i] =='number'){
                            objList[i]=0
                        }else if(Array.isArray( objList[i]) ){
                            objList[i]=[]
                        }
                    }
                    return objList
                }
                Object.prototype.clearObj=clearObj
                  var objList ={
                    list1:[],
                    list2:[],
                    arryList:[],
                    arry :[],
                    lineArry:[],
                    num:0,
                    i:0
                  }
                json.map(jsonItem=>{
                objList=Object.clearObj.apply(Object,[objList])
                     if(jsonItem.name){
                        jsonItem.name.map(nameItem=>{
                            objList= Object.clearObj.apply(Object,[objList])
                            console.log(objList,'222')
                            nameItem.threeArray=getThreeArrayData.call(objList,nameItem)
                        })
                     }else{
                        jsonItem.threeArray= getThreeArrayData.call(objList,jsonItem)
                     }
                 
                })
                
                function getThreeArrayData(jsonItem){
                    if(Array.isArray(jsonItem.LineString)){
                        jsonItem.LineString.map(lineItem=>{
                            lineItem= lineItem.split('",')||lineItem.split("',")
                            this.arryList.push(lineItem[0])
                        })
                     }else{
                        this.arryList=             jsonItem.LineString.split('",')||jsonItem.LineString.split("',")
                     }
                     this.arryList.map(arrItem=>{
                        this.arry = arrItem.replace(' ', '').split(',0').join()
                        this.arry=this.arry.slice(0, this.arry.length - 1).split(',')
                        this.arry.map((item, index) => {
                            item = Number(item);
                            if (index % 2 == 0) {
                                this.num = this.i;
                                this.list1[this.i] = []
                                this.list1[this.i].push(item)
                                this.i++
                            } else {
                                this.list1[this.num].push(item)
                            }
                        })
                        this.list2.push(this.list1)
                    })
                    return this.list2
                }

这个时候就能拿到json数据里面有个threeArray这个字段就是三维数组

2.将三维数组进行转换至polygon
function ringsToStr(list) {
list = JSON.parse(JSON.stringify(list));
var str = '';
if (list.length > 1) {
   str = multiRingsToStr(list);//多维2重数组,就是有多个面的处理
} else if (list.length == 1) {
   str = ringsToStr(list[0]);//只有一个面的数据
};

function ringsToStr(rings) {
    var s = 'POLYGON((';
     for (var i = 0; i < rings.length; i++) {
         s += rings[i][0] + ' ' + rings[i][1];
         if (i < rings.length - 1) {
             s += ','
         } else {
             s += '))';
         };
       };
       return s;
    };
   function multiRingsToStr(rings) {
            var s = 'MULTIPOLYGON(';

            for (var j = 0; j < rings.length; j++) {
                var data = rings[j]; //rings[j][0];
                s += '((';
                for (var i = 0; i < data.length; i++) {
                    s += data[i][0] + ' ' + data[i][1];
                    if (i < data.length - 1) {
                        s += ','
                    } else {
                        s += '))';
                    };
                };
                if (j < rings.length - 1) {
                    s += ',';
                } else {
                    s += ')';
                };
            };
            return s;
        };

        return str
    }
 json.map(item=>{
      if(item.name){
          item.name.map(nameItem=>{
                                            
            nameItem.polygon=ringsToStr(nameItem.threeArray)
            })
      }else{
            item.polygon=ringsToStr(item.threeArray)
       }
      })

最后返回的json里面就会有polygon字段,arcgis就可以使用了

3.面转三维数组
    strToRings(str) {
        var list = [];

        if (str.indexOf('MULTIPOLYGON') > -1) {
            list = multiPolygon(str);
        } else if (str.indexOf('POLYGON') > -1) {
            list = singlePolgon(str);
        };

        function singlePolgon(d) {
            var res = [];
            var d1 = d.replace('POLYGON', '').replace("((", '');
            var d2 = d1.replace("))", '');
            var d3 = d2.split(",")
            for (var i = 0; i < d3.length; i++) {
                var a = d3[i].trim().split(" ");
                res.push([parseFloat(a[0]), parseFloat(a[1])]);
            }
            return [res]
        };

        function multiPolygon(d) {
            var res = []
            var d1 = d.replace('MULTIPOLYGON', '').replace('(', '');
            var d2 = d1.replace(')))', '))')
            var d3 = d2.split(")),");
            d3.map(function(item) {
                item = item.replace("((", '');
                var d4 = item.split(",");
                var d5 = []
                for (var i = 0; i < d4.length; i++) {
                    var a = d4[i].trim().split(" ");
                    d5.push([parseFloat(a[0]), parseFloat(a[1])]);
                };
                res.push(d5);
            });
            return res;
        };
        return list;
    }
4.dataV MultiPolygon类型:数组转字符串
ringsToStr(content[0])//上面方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值