import { ref, getCurrentInstance } from 'vue'
|
import { analyzeKmzFile, getKmlParams, generateKmlFormat } from '/@/utils/cesium/kmz'
|
import { getLngLatAltitude } from './mapUtils'
|
import JSZIP from 'jszip'
|
import { saveAs } from 'file-saver'
|
|
const JsZip = new JSZIP()
|
|
const kmlStr = ref('')
|
const kmzFile = ref<any>(null)
|
|
// 点位参数
|
const placemark: any = {
|
Point: {
|
coordinates: '',
|
},
|
index: 0,
|
executeHeight: 80,
|
height: 80,
|
waypointSpeed: 10,
|
waypointHeadingParam: {
|
waypointHeadingMode: 'followWayline',
|
waypointHeadingAngle: 0,
|
waypointPoiPoint: '0.000000,0.000000,0.000000',
|
waypointHeadingPathMode: 'followBadArc',
|
waypointHeadingPoiIndex: 0,
|
},
|
waypointTurnParam: {
|
waypointTurnMode: 'toPointAndStopWithDiscontinuityCurvature',
|
waypointTurnDampingDist: 0.2,
|
},
|
useGlobalHeight: 1,
|
useGlobalSpeed: 1,
|
useGlobalHeadingParam: 1,
|
useGlobalTurnParam: 1,
|
useStraightLine: 1,
|
actionGroup: {},
|
}
|
|
const useKmzTsa = () => {
|
const init = async (fileUrl: string, fileContent?: string) => {
|
const fileRes = await analyzeKmzFile(fileUrl)
|
kmzFile.value = fileRes.file
|
const kmzRes = await fileRes.content
|
if (fileContent) {
|
kmlStr.value = fileContent
|
return false
|
}
|
kmlStr.value = kmzRes
|
return kmzRes
|
}
|
|
const create = () => {
|
const nowTime = new Date().getTime()
|
const str = `
|
<?xml version="1.0" encoding="UTF-8"?>
|
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:wpml="http://www.dji.com/wpmz/1.0.5">
|
<Document>
|
<wpml:author>17304076412</wpml:author>
|
<wpml:createTime>${nowTime}</wpml:createTime>
|
<wpml:updateTime>${nowTime}</wpml:updateTime>
|
<wpml:missionConfig>
|
</wpml:missionConfig>
|
<Folder>
|
</Folder>
|
</Document>
|
</kml>
|
`
|
kmlStr.value = str
|
}
|
|
// const write = (settingParmas: any = {}, name: string) => {
|
// }
|
const writePoint = (settingParmas: any = {}) => {
|
Object.keys(settingParmas).forEach((key: string) => {
|
placemark[key] = settingParmas[key]
|
})
|
const Placemark = `<Placemark>${generateKmlFormat(placemark)}</Placemark>`
|
const points: RegExpMatchArray = getKmlParams(kmlStr.value, false, {
|
name: 'Placemark',
|
findRegx: '([\\s\\S]*?)',
|
mode: 'g',
|
}) || ['']
|
const lastPoint = points[points.length - 1]
|
const index = kmlStr.value.indexOf(lastPoint)
|
const beforeStr = kmlStr.value.slice(0, index)
|
const afterStr = kmlStr.value.slice(index + lastPoint.length)
|
kmlStr.value = beforeStr + lastPoint + Placemark + afterStr
|
}
|
|
const del = () => {}
|
|
const edit = (settingParmas: any = {}, keyName?: string, isKeyWpml: boolean = false) => {
|
Object.keys(settingParmas).forEach((key: string) => {
|
const regxVal: any = getKmlParams(kmlStr.value, true, {
|
name: key,
|
findRegx: '([\\s\\S]*?)',
|
})
|
const str = regxVal[1]
|
if (str) {
|
if (key === 'globalHeight') {
|
const regxVal: any = getKmlParams(kmlStr.value, true, {
|
name: 'height',
|
findRegx: '([\\s\\S]*?)',
|
mode: 'g',
|
})
|
regxVal.forEach((heightStr: string) => {
|
const rstr = generateKmlFormat({ height: settingParmas[key] })
|
kmlStr.value = kmlStr.value.replace(heightStr, rstr)
|
})
|
}
|
const replaceStr = generateKmlFormat({ [key]: settingParmas[key] })
|
kmlStr.value = kmlStr.value.replace(regxVal[0], replaceStr)
|
} else {
|
console.warn('没有找到对应的属性')
|
}
|
})
|
}
|
|
const save = () => {
|
JsZip.file('wpmz/template.kml', kmlStr.value)
|
kmzFile.value.file('wpmz/template.kml', kmlStr.value)
|
JsZip.generateAsync({ type: 'blob' }).then((content) => {
|
saveAs(content, '新建航线-' + new Date().toLocaleString() + '.kmz')
|
})
|
}
|
|
return {
|
init,
|
create,
|
// write,
|
writePoint,
|
del,
|
edit,
|
save,
|
}
|
}
|
|
export { kmlStr }
|
export default useKmzTsa
|