sql text转image_从0开发工程测绘大师小程序之建筑坐标转测量坐标(十三)

0161fd64edd4a44fb01a40d2cb86a076.png

上一篇我们讲了如何进行实现坐标反算。在该篇中我们会讲解如何进行实现建筑坐标转测量坐标的程序。

目录 

    1.什么是建筑坐标转测量坐标

    2.代码实现

    3.界面展示

侃侃而谈

从该篇开始程序就会慢慢的越往后越开始有点难度了,所以我想大家应该是蛮期待的,希望你无论晴天还是雨天,无论心情好坏,每天安排的任务都按时完成吧,一起加油遇见美好。

你要相信一点,设计程序是特别累得一件事情改了又改,一个程序从开始到完成足以花上一段时间,而且幸运的是你在这个过程会遇到很多困难,他甚至会让你绝望的。

当你不断的挑战程序的难度时,你的成长会越来越快,虽然那看起来那一点也不酷。


01、什么是建筑坐标转测量坐标?

图设计施工图阶段,常常引入施工坐标系(建筑坐标系), 施工坐标值与大地浏量坐标值之间就存在一个换算问题,即施工坐标系与大地测量坐标系之间有一旋转角θ。

       工程设计中, 为方便设计和施工放线,常常在XY坐标系即测量坐标系基础上引入AB坐标系即施工坐标系。然后在坐标系下以设定的基准点为参照,推算确定各个建构筑物的坐标, 来达到给建构筑物定位的目的。

图1-1  建筑坐标转测量坐标图解

5fee8b7dd11b5db73689bfe4da2e0f84.png

计算公式

xp = (xo + xp * cosα) - (yp * sinα) 

yp = (yo + xp * sinα) + (yp * cosα)


02、代码实现

因为代码中都有相应注释,这里我不会做过多的说明。你只需要在微信中任意创建一个page页面就可以编写运行,以下文件的名字只是一个参考。其中样式还是与之前第七篇的样式(centralmeridianis.wxss)一致,由于篇幅有限样式不再做过多说明。

buildtocity.wxml

<mynavbar back="true" home="true" tourl="../../../../../pageBar/component/index" color="rgba(0,0,0,.5)" titleText="建筑坐标转测量坐标">mynavbar><view class="header-text">  <image src="../../../../../icon/other.png">image>O′建筑坐标系原点view><block wx:for="{{listStart}}" wx:key="id">  <view class="centralmerid" id="{{item.id}}">    <view class="centralmerid-border {{item.border ? 'selected-border' :  '' }}">      <view class="centralmerid-left-icon">        <image class="img-icon" src="{{item.url}}">image>        <text class="left-text">{{item.text}}text>      view>      <input class="{{item.border ? 'selected-border' :  '' }}" type="digit" value="{{cleantext}}" bindfocus="{{item.focous}}" bindblur="{{item.name}}" placeholder="{{item.tips}}">input>      <view class="centralmerid-right-text">{{item.unit}}view>    view>  view>block><view class="header-text">  <image src="../../../../../icon/other.png">image>P在建筑坐标系坐标view><block wx:for="{{listEnd}}" wx:key="id">  <view class="centralmerid" id="{{item.id}}">    <view class="centralmerid-border {{item.border ? 'selected-border' :  '' }}">      <view class="centralmerid-left-icon">        <image class="img-icon" src="{{item.url}}">image>        <text class="left-text">{{item.text}}text>      view>      <input class="{{item.border ? 'selected-border' :  '' }}" type="digit" value="{{cleantext}}" bindfocus="{{item.focous}}" bindblur="{{item.name}}">input>      <view class="centralmerid-right-text">{{item.unit}}view>    view>  view>block><view class="result-btn" bindtap="multipleTap">  <view class="results">    <button type="primary" style="width:90%;">计算button>  view>view><scroll-view class="footer" hidden="{{resultShow}}" scroll-y="true">  <view class="result-inner">    <view class="header-text close fixed-header">      <view class="close">        <image src="../../../../../icon/other.png">image>结果      view>      <image src="../../../../../icon/close.png" bindtap="myclose">image>    view>    <view class="result-inner-inner">Xₚ:<text class="resultColor"> {{xp}}text> ᴹ view>    <view class="result-inner-inner">Yₚ:<text class="resultColor">{{yp}}text> ᴹ view>  view>scroll-view><view class="footer-text" wx:if="{{resultShow}}">  <view class="footer-text-inner">    <view class="footer-inner">小贴士:单击为计算,双击则为清空。view>    <view class="footer-inner">一悲一喜一惘然,一草一木一红颜。view>  view>view>

buildtocity.json

{  "usingComponents": {    "mynavbar":"../../../../../common/resources/navbar/navbar"  }}

buildtocity.js

Page({    /**     * 页面的初始数据     */    data: {        xoValue: '',        yoValue: '',        fwjValue: '',        xpValue: '',        ypValue: '',        cleantext: '',        selecteBorder: false,        resultShow: true,        confirmsure: false,        listStart: [{                id: 0,                name: 'xoValue',                focous: 'xofocous',                url: '../../../../../icon/coordinate.png',                text: "X₀",                unit: 'ᴹ',                border: false            },            {                id: 1,                name: 'yoValue',                focous: 'yofocous',                url: '../../../../../icon/coordinate.png',                text: "Y₀",                unit: 'ᴹ',                border: false            },            {                id: 2,                name: 'fwjValue',                focous: 'fwjfocous',                url: '../../../../../icon/angle.png',                text: "α",                unit: '°′″',                tips: "请您以 度.分.秒 形式输入方位角",                border: false            }        ],        listEnd: [{                id: 3,                name: 'xpValue',                focous: 'xpfocous',                unit: 'm',                url: '../../../../../icon/coordinate.png',                text: "Xₚ′",                unit: 'ᴹ',                border: false            },            {                id: 4,                name: 'ypValue',                focous: 'ypfocous',                url: '../../../../../icon/coordinate.png',                text: "Yₚ′",                unit: 'ᴹ',                border: false            }        ]    },    // 关闭答案    myclose() {        this.setData({            resultShow: true        })    },    // 获取焦点显示边框    xofocous() {        this.setData({            'listStart[0].border': true        })    },    yofocous() {        this.setData({            'listStart[1].border': true        })    },    fwjfocous() {        this.setData({            'listStart[2].border': true        })    },    xpfocous() {        this.setData({            'listEnd[0].border': true        })    },    ypfocous() {        this.setData({            'listEnd[1].border': true        })    },    // 失去焦点后获取输入框的值和去掉边框    // 获取X0    xoValue(e) {        this.setData({            xoValue: e.detail.value,            'listStart[0].border': false        })    },    // 获取y0    yoValue(e) {        this.setData({            yoValue: e.detail.value,            'listStart[1].border': false        })    },    // 获取方位角    fwjValue(e) {        this.setData({            fwjValue: e.detail.value,            'listStart[2].border': false        })    },    // 获取Xp    xpValue(e) {        this.setData({            xpValue: e.detail.value,            'listEnd[0].border': false        })    },    // 获取yp    ypValue(e) {        this.setData({            ypValue: e.detail.value,            'listEnd[1].border': false        })    },    // 计算    calculations() {        const PI = Math.PI        var that = this        var xo = Number(that.data.xoValue) //xo        var yo = Number(that.data.yoValue) //yo        var fwj = that.data.fwjValue //fwj        var xp = Number(that.data.xpValue) //xp        var yp = Number(that.data.ypValue) //yp        var fwjarr = fwj.split(".") //将输入的方位角以点号截取        if (fwj.indexOf(".") < 0) {            var fwjarrdu = Number(fwjarr[0]) //截取度            var fwjarrfen = 0 //截取分            var fwjarrmiao = 0 //截取秒        } else {            var fwjarrdu = Number(fwjarr[0]) //截取度            var fwjarrfen = Number(fwjarr[1]) //截取分            var fwjarrmiao = Number(fwjarr[2]) //截取秒        }        var du = fwjarrdu + fwjarrfen / 60 + fwjarrmiao / 3600 //获取到α        var xpp = (xo + xp * Math.cos(du * PI / 180)) - (yp * Math.sin(du * PI / 180)) //测量坐标xp        var ypp = (yo + xp * Math.sin(du * PI / 180)) + (yp * Math.cos(du * PI / 180)) //测量坐标yp        if (that.data.xoValue == '' || that.data.yoValue == '' || that.data.fwjValue == '' || that.data.xpValue == '' || that.data.ypValue == '') {            wx.vibrateShort({}) //开启震动            wx.showModal({                title: '友情提示',                content: '请您输入完整的值在进行计算!?',                showCancel: false,                cancelText: "确定"            })        } else {            if (fwj.indexOf(".") < 0) {                wx.vibrateShort({}) //开启震动                wx.showModal({                    title: '友情提示',                    content: '您当前没有以点号隔开,默认按 度.00.00 计算 ?',                    success(res) {                        if (res.confirm) {                            that.setData({                                resultShow: false,                                xp: getApp().fomatFloat(xpp, 5),                                yp: getApp().fomatFloat(ypp, 5)                            })                        }                    }                })            } else if (fwj.split(".").length - 1 !== 2) {                wx.vibrateShort({}) //开启震动                wx.showModal({                    title: '友情提示',                    content: '角度请您按照所给格式输入,如23.23.1中间必须以点隔开。!?'                })            } else {                that.setData({                    resultShow: false,                    xp: getApp().fomatFloat(xpp, 5),                    yp: getApp().fomatFloat(ypp, 5)                })            }        }    },    // 调用最终计算    //单击计算     multipleTap: function (e) {        var that = this        let curTime = e.timeStamp;        let lastTime = that.lastTapDiffTime;        that.lastTapDiffTime = curTime;        //两次点击间隔小于300ms, 认为是双击        let diff = curTime - lastTime;        if (diff < 300) {            clearTimeout(that.lastTapTimeoutFunc); // 成功触发双击事件时,取消单击事件的执行            that.setData({                xoValue: '',                yoValue: '',                fwjValue: '',                xpValue: '',                ypValue: '',                cleantext: '',            })        } else { //双击清空            // 单击事件延时300毫秒执行,这和最初的浏览器的点击300ms延时有点像。            that.lastTapTimeoutFunc = setTimeout(function () {                that.calculations()            }, 300);        }    }})

其中最主要的部分为以下的部分这里实现了角度到度分秒的实现,小程序中都是用的JS代码实现,你也可以用各种编程语言去实现,此处仅作为抛砖引玉。

var that = thisvar xo = Number(that.data.xoValue) //xovar yo = Number(that.data.yoValue) //yovar fwj = that.data.fwjValue //fwjvar xp = Number(that.data.xpValue) //xpvar yp = Number(that.data.ypValue) //ypvar fwjarr = fwj.split(".") //将输入的方位角以点号截取if (fwj.indexOf(".") < 0) {    var fwjarrdu = Number(fwjarr[0]) //截取度    var fwjarrfen = 0 //截取分    var fwjarrmiao = 0 //截取秒} else {    var fwjarrdu = Number(fwjarr[0]) //截取度    var fwjarrfen = Number(fwjarr[1]) //截取分    var fwjarrmiao = Number(fwjarr[2]) //截取秒}var du = fwjarrdu + fwjarrfen / 60 + fwjarrmiao / 3600 //获取到αvar xpp = (xo + xp * Math.cos(du * PI / 180)) - (yp * Math.sin(du * PI / 180)) //测量坐标xpvar ypp = (yo + xp * Math.sin(du * PI / 180)) + (yp * Math.cos(du * PI / 180)) //测量坐标yp

03、展示

图3-1  开发现场

95dad10154fb483a039c3d6c30dd3ee0.png

用力写好每一天,让回忆看到自己留下的美好痕迹。

-END-

-预告-

以下小程序是本教程最终要开发的产品可以点击体验,下一篇为从0开发《工程测绘大师》小程序之测量坐标转建筑坐标(十四)

f745a32127a86de940d5195bd3e4adcf.gif

●从0开发《工程测绘大师》小程序之玩转角度与弧度的互相转化篇(十)

●从0开发《工程测绘大师》小程序之坐标正算篇(十一)

●从0开发《工程测绘大师》小程序之坐标反算篇(十二)

d6963bba2a318f89d6fdbfb6177f45d0.png“雨”见美好 - “雨”见你 

我就知道你“在看”

a09b0ac9d673b65fdc28089d31d24975.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值