我们在做地图服务的时候,为了安全和效率的问题,时长会将地图上点,线,面的经纬度点集合进行加解密操作。
convert.js 经纬度加解密
import SFMap from '../views/map-vector/sdk/'
/**
* 解密经纬度
* @param {*} list
*/
export const convertExtinfo = (list) => {
if (list && list.length > 0) {
for (let item of list) {
//如果不含有.和|,说明不需要解密
if (item.extinfo && !item.extinfo.includes('.') && !item.extinfo.includes('|')) {
item.extinfo = new SFMap.MssExtInfo(item.extinfo);
}
}
}
console.log("转换后的list:" + JSON.stringify(list))
return list
}
/**
* 解密后的数据进行拼接经纬度并 转换成POLYGON,linestring,point 等
* @param {} list
*/
export const convertExtinfoAndJoin = (list) => {
if (list && list.length > 0) {
for (let item of list) {
let ext_info = item.extinfo;
let ext_type = item.exttype
if (ext_info) {
if(!ext_info.includes('.') && !ext_info.includes('|')){ //需要解密
ext_info = new SFMap.MssExtInfo(ext_info);
let lnglatArray = ext_info._initializeGeoJSON.geometry.coordinates;
let ext_info_str = ''
if(ext_type == 'AOI'){
for(let xy of lnglatArray[0]){
ext_info_str+= xy[0]+' '+xy[1]+','
}
}else if(ext_type == 'ROADLINE'){
for(let xy of lnglatArray){
ext_info_str+= xy[0]+' '+xy[1]+','
}
}
ext_info = ext_info_str.substring(0,ext_info_str.length-1)
}else{ //无需解密,直接替换|和;
ext_info = ext_info.replace(/\|/g, ' ').replace(/\;/g, ',')
}
if (ext_type == 'AOI' || ext_type == 'BUILDING') {
ext_info = 'POLYGON((' + ext_info + '))'
} else if (ext_type == 'ROADLINE') {
ext_info = 'linestring(' + ext_info + ')'
} else { return list }
}
if(!ext_info && ext_type == 'POI'){
let x = item.location.lng
let y = item.location.lat
ext_info = 'point('+x+' '+y+')'
}
item.extinfo = ext_info
}
}
console.log("转换后的list:" + JSON.stringify(list))
return list
}
//str.indexOf('.')!=-1 && str.indexOf('|')!=-1
//str.search('.')!=-1 && str.search('|')!=-1
//str.includes('.') && str.includes('|')