|
@@ -0,0 +1,493 @@
|
|
|
|
+
|
|
|
|
+const app = getApp()
|
|
|
|
+
|
|
|
|
+Page({
|
|
|
|
+
|
|
|
|
+ * 页面的初始数据
|
|
|
|
+ */
|
|
|
|
+ data: {
|
|
|
|
+ bestFrame: 0,
|
|
|
|
+ bestMultiFrame: 0,
|
|
|
|
+ bleDataList: [],
|
|
|
|
+
|
|
|
|
+ installBtsList: [],
|
|
|
|
+ btsMinCoordX: 0,
|
|
|
|
+ btsMaxCoordX: 0,
|
|
|
|
+ btsMinCoordY: 0,
|
|
|
|
+ btsMaxCoordY: 0,
|
|
|
|
+
|
|
|
|
+ canvasCtx: null,
|
|
|
|
+ canvasWidth: 0,
|
|
|
|
+ canvasHeight: 0,
|
|
|
|
+ canvasPixelRatio: 1,
|
|
|
|
+
|
|
|
|
+ coordDataList: [],
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 生命周期函数--监听页面加载
|
|
|
|
+ */
|
|
|
|
+ onLoad(options) {
|
|
|
|
+
|
|
|
|
+ app.createWorker(this.workerMessageListenerHome)
|
|
|
|
+
|
|
|
|
+ app.createRecorder()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ this.generateMultiInstallBts()
|
|
|
|
+
|
|
|
|
+ this.initCanvas()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ app.startImu()
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 生命周期函数--监听页面初次渲染完成
|
|
|
|
+ */
|
|
|
|
+ onReady() {
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 生命周期函数--监听页面显示
|
|
|
|
+ */
|
|
|
|
+ onShow() {
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 生命周期函数--监听页面隐藏
|
|
|
|
+ */
|
|
|
|
+ onHide() {
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 生命周期函数--监听页面卸载
|
|
|
|
+ */
|
|
|
|
+ onUnload() {
|
|
|
|
+ if (app.data.worker != null) {
|
|
|
|
+ app.data.worker.postMessage({
|
|
|
|
+ message: 'MAIN_WORKER_FREE_MEMORY',
|
|
|
|
+ data: ''
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 页面相关事件处理函数--监听用户下拉动作
|
|
|
|
+ */
|
|
|
|
+ onPullDownRefresh() {
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 页面上拉触底事件的处理函数
|
|
|
|
+ */
|
|
|
|
+ onReachBottom() {
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ * 用户点击右上角分享
|
|
|
|
+ */
|
|
|
|
+ onShareAppMessage() {
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ workerMessageListenerHome(res) {
|
|
|
|
+ switch (res.message) {
|
|
|
|
+ case 'WORKER_MAIN_START_MONITOR_BLE_BTS':
|
|
|
|
+ app.openBleAdapter()
|
|
|
|
+ break
|
|
|
|
+ case 'WORKER_MAIN_ORGANIZE_INSTALL_BTS_DATA':
|
|
|
|
+ this.organizeInstallBtsData()
|
|
|
|
+ break
|
|
|
|
+ case 'WORKER_MAIN_START_REC':
|
|
|
|
+ app.createRecorder()
|
|
|
|
+ break
|
|
|
|
+ case 'WORKER_MAIN_CURRENT_LOCATION_COORD':
|
|
|
|
+ this.drawLocationTrace(res.data)
|
|
|
|
+ break
|
|
|
|
+ case 'WORKER_MAIN_NOTICE_DOWNLOAD_AUDIO_FILE':
|
|
|
|
+ this.downloadAudioFile()
|
|
|
|
+ break
|
|
|
|
+ case 'WORKER_MAIN_NOTICE_READ_AUDIO_FILE':
|
|
|
|
+ this.readAudioFile()
|
|
|
|
+ break
|
|
|
|
+ case 'WORKER_MAIN_SAVE_AUDIO_DATA':
|
|
|
|
+ app.saveAduioDataToBin(res.data)
|
|
|
|
+ break
|
|
|
|
+ default:
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ initCanvas() {
|
|
|
|
+
|
|
|
|
+ let self = this
|
|
|
|
+ wx.getSystemInfo({
|
|
|
|
+ success: (res) => {
|
|
|
|
+ self.data.canvasPixelRatio = res.pixelRatio
|
|
|
|
+ let myCanvasWidth = res.windowWidth - 5
|
|
|
|
+ self.setData({
|
|
|
|
+ canvasWidth: myCanvasWidth,
|
|
|
|
+ canvasHeight: myCanvasWidth
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ wx.createSelectorQuery().select('#homeCanvas').fields({ node: true, size: true }).exec((res) => {
|
|
|
|
+ let canvas = res[0].node
|
|
|
|
+ if (canvas) {
|
|
|
|
+ this.data.canvasCtx = canvas.getContext('2d')
|
|
|
|
+ canvas.width = res[0].width * this.data.canvasPixelRatio
|
|
|
|
+ canvas.height = res[0].height * this.data.canvasPixelRatio
|
|
|
|
+ this.data.canvasCtx.scale(this.data.canvasPixelRatio, this.data.canvasPixelRatio)
|
|
|
|
+
|
|
|
|
+ this.drawPosition(0, 0, 0, 0)
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ organizeInstallBtsData() {
|
|
|
|
+ let dataList = []
|
|
|
|
+ let oneItem = {}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ dataList.push(this.data.installBtsList.length)
|
|
|
|
+ for (let i = 0; i < this.data.installBtsList.length; i++) {
|
|
|
|
+ oneItem = this.data.installBtsList[i]
|
|
|
|
+ dataList.push(oneItem.dwBuildId)
|
|
|
|
+ dataList.push(oneItem.dwLayerId)
|
|
|
|
+
|
|
|
|
+ dataList.push(oneItem.dwBtsId)
|
|
|
|
+ dataList.push(oneItem.dwFreqIndex)
|
|
|
|
+ dataList.push(oneItem.dwSlot)
|
|
|
|
+
|
|
|
|
+ dataList.push(oneItem.dwCoordX)
|
|
|
|
+ dataList.push(oneItem.dwCoordY)
|
|
|
|
+ dataList.push(oneItem.dwCoordZ)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ dataList.push(oneItem.dwLctType)
|
|
|
|
+ dataList.push(oneItem.dwTwoBtsNum)
|
|
|
|
+ for (let i = 0; i < oneItem.dwTwoBtsNum; i++) {
|
|
|
|
+ dataList.push(oneItem.adwTwoBtsList[i])
|
|
|
|
+ }
|
|
|
|
+ for (let i = oneItem.dwTwoBtsNum; i < 6; i++) {
|
|
|
|
+ dataList.push(0)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for (let j = 0; j < 12; j++) {
|
|
|
|
+ dataList.push(oneItem.adwBluetoothMac[j])
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for (let k = 0; k < 12; k++) {
|
|
|
|
+ dataList.push(oneItem.adwWifiMac[k])
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (app.data.worker != null) {
|
|
|
|
+ app.data.worker.postMessage({
|
|
|
|
+ message: 'MAIN_WORKER_INSTALL_BTS_DATA',
|
|
|
|
+ data: dataList
|
|
|
|
+ })
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ generateMultiInstallBts() {
|
|
|
|
+ let oneItem = {}
|
|
|
|
+ let maxTmpX = -10000000
|
|
|
|
+ let minTmpX = 10000000
|
|
|
|
+ let maxTmpY = -10000000
|
|
|
|
+ let minTmpY = 10000000
|
|
|
|
+ let xTmp = 0
|
|
|
|
+ let yTmp = 0
|
|
|
|
+
|
|
|
|
+ let btsNum = 5;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ this.data.installBtsList = []
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ oneItem = this.generateOneInstallBts(10001, 0, 0, 0, 0, "685377178192", 2, 0, "")
|
|
|
|
+ this.data.installBtsList.push(oneItem)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ oneItem = this.generateOneInstallBts(10002, 1, 1, 2500, 0, "685377183652", 3, 1, "10005")
|
|
|
|
+ this.data.installBtsList.push(oneItem)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ oneItem = this.generateOneInstallBts(10003, 2, 2, 2500, 800, "6853771679b0", 2, 0, "")
|
|
|
|
+ this.data.installBtsList.push(oneItem)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ oneItem = this.generateOneInstallBts(10004, 3, 3, 0, 800, "68537716c686", 2, 0, "")
|
|
|
|
+ this.data.installBtsList.push(oneItem)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ oneItem = this.generateOneInstallBts(10005, 4, 0, 5000, 0, "685377183238", 1, 1, "10002")
|
|
|
|
+ this.data.installBtsList.push(oneItem)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for (let i = 0; i < btsNum; i++) {
|
|
|
|
+ xTmp = this.data.installBtsList[i].dwCoordX
|
|
|
|
+ if (xTmp > maxTmpX) {
|
|
|
|
+ maxTmpX = xTmp
|
|
|
|
+ }
|
|
|
|
+ if (xTmp < minTmpX) {
|
|
|
|
+ minTmpX = xTmp
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ yTmp = this.data.installBtsList[i].dwCoordY
|
|
|
|
+ if (yTmp > maxTmpY) {
|
|
|
|
+ maxTmpY = yTmp
|
|
|
|
+ }
|
|
|
|
+ if (yTmp < minTmpY) {
|
|
|
|
+ minTmpY = yTmp
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ this.setData({
|
|
|
|
+ btsMinCoordX: minTmpX,
|
|
|
|
+ btsMaxCoordX: maxTmpX,
|
|
|
|
+ btsMinCoordY: minTmpY,
|
|
|
|
+ btsMaxCoordY: maxTmpY
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ generateOneInstallBts(dwBtsId, dwFreqIndex, dwSlot, dwCoordX, dwCoordY, macAddressList, dwLctType, dwTwoBtsNum, adwTwoBtsList) {
|
|
|
|
+ let installBts = {}
|
|
|
|
+ let oneCharHex = ''
|
|
|
|
+ let oneCharHexValue = 0
|
|
|
|
+
|
|
|
|
+ installBts.dwBuildId = 1
|
|
|
|
+ installBts.dwLayerId = 1
|
|
|
|
+
|
|
|
|
+ installBts.dwBtsId = dwBtsId
|
|
|
|
+ installBts.dwFreqIndex = dwFreqIndex
|
|
|
|
+ installBts.dwSlot = dwSlot
|
|
|
|
+
|
|
|
|
+ installBts.dwCoordX = dwCoordX
|
|
|
|
+ installBts.dwCoordY = dwCoordY
|
|
|
|
+ installBts.dwCoordZ = 270
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ installBts.dwLctType = dwLctType
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ installBts.dwTwoBtsNum = dwTwoBtsNum;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ installBts.adwTwoBtsList = []
|
|
|
|
+ let btsIdList = adwTwoBtsList.split(",")
|
|
|
|
+ let btsId = 0
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ for (let k = 0; k < dwTwoBtsNum; k++) {
|
|
|
|
+ btsId = parseInt(btsIdList[k])
|
|
|
|
+ console.log("基站ID:", btsId)
|
|
|
|
+ installBts.adwTwoBtsList.push(btsId)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ installBts.adwBluetoothMac = []
|
|
|
|
+ for (let i = 0; i < 12; i++) {
|
|
|
|
+ oneCharHex = macAddressList[i]
|
|
|
|
+ oneCharHexValue = app.hexCharToValue(oneCharHex)
|
|
|
|
+ installBts.adwBluetoothMac.push(oneCharHexValue)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ installBts.adwWifiMac = []
|
|
|
|
+ for (let j = 0; j < 12; j++) {
|
|
|
|
+ oneCharHex = macAddressList[j]
|
|
|
|
+ oneCharHexValue = app.hexCharToValue(oneCharHex)
|
|
|
|
+ installBts.adwWifiMac.push(oneCharHexValue)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ console.log(installBts)
|
|
|
|
+ return installBts
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ generateBleBtsData() {
|
|
|
|
+ let mac = "123456789ABC"
|
|
|
|
+ let rssi = -58
|
|
|
|
+ let item = {}
|
|
|
|
+ item['mac'] = mac;
|
|
|
|
+ item['rssi'] = rssi
|
|
|
|
+
|
|
|
|
+ let dataList = []
|
|
|
|
+ dataList.push(item)
|
|
|
|
+
|
|
|
|
+ app.data.worker.postMessage({
|
|
|
|
+ message: 'MAIN_WORKER_BLE_BTS_DATA',
|
|
|
|
+ code: 100,
|
|
|
|
+ data: dataList
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ downloadAudioFile() {
|
|
|
|
+ const url = "https://www.stp.intourism.cn/tdsadmin/line390-zt.wav"
|
|
|
|
+
|
|
|
|
+ wx.downloadFile({
|
|
|
|
+ url: url,
|
|
|
|
+ success: (res) => {
|
|
|
|
+ if (res.statusCode == 200) {
|
|
|
|
+ app.data.wavFilePath = res.tempFilePath
|
|
|
|
+ this.readAudioFile();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ readAudioFile() {
|
|
|
|
+ let filePath = app.data.wavFilePath
|
|
|
|
+
|
|
|
|
+ if (app.data.readFileTimes == null) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if (app.data.readFileTimes >= 360) {
|
|
|
|
+ app.data.readFileTimes = 0
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ const times = app.data.readFileTimes
|
|
|
|
+ const fs = wx.getFileSystemManager();
|
|
|
|
+ fs.readFile({
|
|
|
|
+ filePath: `${filePath}`,
|
|
|
|
+ position: 44 + times * 12000 * 2,
|
|
|
|
+ length: 12000 * 2,
|
|
|
|
+ success: (res) => {
|
|
|
|
+ app.data.readFileTimes++
|
|
|
|
+ app.data.worker.postMessage({
|
|
|
|
+ message: 'MAIN_WORKER_AUDIO_DATA',
|
|
|
|
+ data: res.data
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ fail(res) {
|
|
|
|
+ console.log(res);
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+ },
|
|
|
|
+ drawPosition(type, coordinateX, coordinateY, coordDataList) {
|
|
|
|
+ let i = 0
|
|
|
|
+ let pos = 0
|
|
|
|
+ let space = 10
|
|
|
|
+ let lineCount = 40
|
|
|
|
+
|
|
|
|
+ let ctxMinX = this.data.btsMinCoordX - 500
|
|
|
|
+ let ctxMaxX = this.data.btsMaxCoordX + 500
|
|
|
|
+ let ctxMinY = this.data.btsMinCoordY - 500
|
|
|
|
+ let ctxMaxY = this.data.btsMaxCoordY + 500
|
|
|
|
+ let ctxWidth = ctxMaxX - ctxMinX
|
|
|
|
+ let ctxHeight = ctxMaxY - ctxMinY
|
|
|
|
+
|
|
|
|
+ let radio = this.data.canvasWidth / ctxWidth
|
|
|
|
+ let radioHeight = this.data.canvasHeight / ctxHeight
|
|
|
|
+ if (radioHeight < radio) {
|
|
|
|
+ radio = radioHeight
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ let positionCtx = this.data.canvasCtx
|
|
|
|
+ positionCtx.fillStyle = "#0066FF"
|
|
|
|
+ positionCtx.clearRect(0, 0, this.data.canvasWidth, this.data.canvasHeight)
|
|
|
|
+ positionCtx.lineWidth = 0.5
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ positionCtx.beginPath()
|
|
|
|
+ positionCtx.strokeStyle = '#CCCCCC'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ space = parseFloat(this.data.canvasWidth) / lineCount
|
|
|
|
+ for (i = 0; i < lineCount; i++) {
|
|
|
|
+ pos = i * space
|
|
|
|
+ positionCtx.moveTo(0, pos)
|
|
|
|
+ positionCtx.lineTo(this.data.canvasWidth, pos)
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ space = parseFloat(this.data.canvasHeight) / lineCount
|
|
|
|
+ for (i = 0; i < lineCount; i++) {
|
|
|
|
+ pos = i * space
|
|
|
|
+ positionCtx.moveTo(pos, 0)
|
|
|
|
+ positionCtx.lineTo(pos, this.data.canvasHeight)
|
|
|
|
+ }
|
|
|
|
+ positionCtx.stroke()
|
|
|
|
+
|
|
|
|
+ if (type === 0) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ positionCtx.beginPath()
|
|
|
|
+ positionCtx.fillStyle = "#FF0000"
|
|
|
|
+ positionCtx.strokeStyle = '#FF0000'
|
|
|
|
+ for (i = 0; i < this.data.installBtsList.length; i++) {
|
|
|
|
+ let x = (this.data.installBtsList[i].dwCoordX - ctxMinX) * radio
|
|
|
|
+ let y = this.data.canvasHeight - (this.data.installBtsList[i].dwCoordY - ctxMinY) * radio
|
|
|
|
+ positionCtx.fillRect(x - 5, y - 5, 6, 6);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ positionCtx.lineWidth = 1.2
|
|
|
|
+ positionCtx.beginPath()
|
|
|
|
+ positionCtx.strokeStyle = '#0A0A0A'
|
|
|
|
+ for (i = 2; i < coordDataList.length; i++) {
|
|
|
|
+ let point = coordDataList[i - 1]
|
|
|
|
+ let x = (point.x - ctxMinX) * radio
|
|
|
|
+ let y = this.data.canvasHeight - (point.y - ctxMinY) * radio
|
|
|
|
+ positionCtx.moveTo(x, y)
|
|
|
|
+
|
|
|
|
+ point = coordDataList[i]
|
|
|
|
+ x = (point.x - ctxMinX) * radio
|
|
|
|
+ y = this.data.canvasHeight - (point.y - ctxMinY) * radio
|
|
|
|
+ positionCtx.lineTo(x, y)
|
|
|
|
+ }
|
|
|
|
+ positionCtx.stroke()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ positionCtx.beginPath()
|
|
|
|
+ positionCtx.fillStyle = "#0000FF"
|
|
|
|
+ positionCtx.strokeStyle = '#0000FF'
|
|
|
|
+ let x = (coordinateX - ctxMinX) * radio
|
|
|
|
+ let y = this.data.canvasHeight - (coordinateY - ctxMinY) * radio
|
|
|
|
+ positionCtx.arc(x, y, 3, 0, 2 * Math.PI);
|
|
|
|
+ positionCtx.fill()
|
|
|
|
+ },
|
|
|
|
+ drawLocationTrace(coord) {
|
|
|
|
+ let x = coord.x
|
|
|
|
+ let y = coord.y
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ this.data.coordDataList.push(coord)
|
|
|
|
+
|
|
|
|
+ this.drawPosition(1, x, y, this.data.coordDataList)
|
|
|
|
+ }
|
|
|
|
+})
|