分类
笃实好学

坐标转换(火星坐标、百度坐标、WGS84)

先来了解下各坐标系的基本情况:

1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标。
2、 GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。
3、 其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。

在各种web端平台,或者高德、腾讯、百度上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系。
比如,你在谷歌地图API,高德地图API,腾讯地图API上取到的,都是GCJ-02坐标,他们三家都是通用的,也适用于大部分地图API产品,以及他们的地图产品。
百度API上取到的,是BD-09坐标,只适用于百度地图相关产品。
搜狗API上取到的,是搜狗坐标,只适用于搜狗地图相关产品。
谷歌地球,google earth上取到的,是GPS坐标,而且是度分秒形式的经纬度坐标。在国内不允许使用。必须转换为GCJ-02坐标。

一般设备上获取的都是GPS原始坐标体系,任何一个地图产品都不允许使用GPS坐标,所以直接使用GPS原始坐标体系会存在偏移的情况,这在开发中就要进行坐标转换,最近在互联网找到一段很不错的转换代码,废话不多,直接贴代码:

/**
 * Created by Wandergis on 2015/7/8.
 * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
 */

//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;

/**
 * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
 * 即 百度 转 谷歌、高德
 * @param bd_lon
 * @param bd_lat
 * @returns {*[]}
 */
function bd09togcj02(bd_lon, bd_lat) {
    var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    var x = bd_lon - 0.0065;
    var y = bd_lat - 0.006;
    var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
    var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
    var gg_lng = z * Math.cos(theta);
    var gg_lat = z * Math.sin(theta);
    return [gg_lng, gg_lat]
}

/**
 * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
 * 即谷歌、高德 转 百度
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function gcj02tobd09(lng, lat) {
    var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
    var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
    var bd_lng = z * Math.cos(theta) + 0.0065;
    var bd_lat = z * Math.sin(theta) + 0.006;
    return [bd_lng, bd_lat]
}

/**
 * WGS84转GCj02
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function wgs84togcj02(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        var mglat = lat + dlat;
        var mglng = lng + dlng;
        return [mglng, mglat]
    }
}

/**
 * GCJ02 转换为 WGS84
 * @param lng
 * @param lat
 * @returns {*[]}
 */
function gcj02towgs84(lng, lat) {
    if (out_of_china(lng, lat)) {
        return [lng, lat]
    }
    else {
        var dlat = transformlat(lng - 105.0, lat - 35.0);
        var dlng = transformlng(lng - 105.0, lat - 35.0);
        var radlat = lat / 180.0 * PI;
        var magic = Math.sin(radlat);
        magic = 1 - ee * magic * magic;
        var sqrtmagic = Math.sqrt(magic);
        dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
        dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
        mglat = lat + dlat;
        mglng = lng + dlng;
        return [lng * 2 - mglng, lat * 2 - mglat]
    }
}

function transformlat(lng, lat) {
    var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
    ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
    return ret
}

function transformlng(lng, lat) {
    var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
    ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
    ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
    ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
    return ret
}

/**
 * 判断是否在国内,不在国内则不做偏移
 * @param lng
 * @param lat
 * @returns {boolean}
 */
function out_of_china(lng, lat) {
    return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}
分类
笃实好学

利用js填写网页表单

最近工作中需要在网页中提交数据来打印票证信息,经过几天的录入,感到不胜其烦,因为很多数据都是要重复录入的,这个工作对于我这个懒人来说太困难了,不只是懒的原因,重复做着同样的工作,对于我来说就是在虚度光阴,我想把时间用在有意义的地方,这些重复操作就应该交给电脑去处理,好了,言归正传,首先来说说javascript自动填写网页表单是怎么实现的。

比如有一个管理系统,里面有无数个表单,需要你去不停的录入数据,数据里面有80%的数据都是相同的,每次都需要重复录入,数据条数不多的情况还好,如果几十条,或者每天都需要录入,那工作量很大,每天就只剩录入数据了,导致没时间做其他的事情,其实我想实现的目标很简单,就是手指一点,重复是数据自动填写进网页表单,无需再做打字之类的重复动作,首先编写一段代码,用框架来实现,用百度来做实例。

<!DOCTYPE HTML>
<html>
    <body>
        <a href="javascript:alert('我会自动填写表单');" target="test">baidu</a>
        <iframe src="http://www.baidu.com" name="test"></iframe>
    </body>
</html>

当点击超链接时无法弹出对话框,才知道JavaScript出于安全方面的考虑,这框架违反了同源政策,是不允许跨域操作的,好在chrome浏览器支持可跨域的设置,当设置完可跨域时,换成我需要的网址后发现对方网站设置了 X-Frame-Options: sameorigin,显示此内容不能显示在一个框架中,所以该方法无法实现,废弃。

一筹莫展的时候寻求度娘帮助,原来可以利用浏览器的收藏夹(书签)功能寄存js代码来实现,不得不惊叹,网友的智慧真是无穷无尽,首先随便收藏一个网址,打开浏览器的“收藏夹”,刚刚收藏的网址点右键,把URL里的连接地址修改为:

javascript:alert('我会自动填写表单');

这样点击刚收藏的网址就会弹出对话框,执行了js代码那就好办了,下面是相关填写代码。

使用ID填写表单:

document.getElementById('ID').value = '文字';

使用Name填写表单:

document.getElementsByName('Name')[0].value = '文字';

本想用后台提取数据来填写的,看来无法实现完全自动,虽然不太理想,但也提高了工作效率,最主要的是数据不会有误,在查找表单ID和Name的时候需要用到浏览器的F12功能,中间有一个错误,有必要记录一下:

IE浏览器升级到11版本后,F12打开开发者工具,如果报以下错误:

Exception in window.onload: An error has occuredJSPlugin.3005

解决方法:安装Windows7补丁:KB3008923;

Windows7-32位

http://www.microsoft.com/zh-CN/download/details.aspx?id=45134

Windows7-64位

https://www.microsoft.com/zh-cn/download/details.aspx?id=45154

因为这是公司电脑,几乎都用的是Windows7的系统,还有一台目前仍在使用Windows XP系统。

分类
笃实好学

爆破常用取值公式

以前一头雾水,这些值都是哪里来的?无意间看到这些取值公式才知道是有范围的,正好可以利用这些参数做一个计算程序,以后的目标是不用复杂的去用计算器算,动动手指点一下就自动计算出结果了,它不香吗?想想都激动。

一、浅孔台阶爆破常用公式、各参数取值范围:

1、主爆孔:

(1)、孔径:d=(36-42)mm。

(2)、抵抗线:w=(20-40) 或 w=(0.4-1)H。

(3)、阶高度:H≤5m。

(4)、孔 距:a=(1-2)w。

(5)、排距:b=(0.8-1)w。

(6)、炸药单耗:q=(0.35-0.45)kg/m3(石灰岩、常用)。

(7)、单孔装药量:Q=q.a.b.H。

2、预裂孔:

(1)、孔距:a=(8-12)d。

(2)、超深:h=(0.1-0.15)H。

(3)、单孔装药量:Q=Q的(1/2-1/3) 岩石整体性好取小值、反之取大值。

(4)、线装药密度:L线=4Q/∏d2⊿ 单位:kg/m d:炮孔直径、炸药密度、膨化炸药:800kg/m3 乳化炸药:1000kg/m3

3、安全控制方面公式:

(1)、爆破震动公式:V=k(Q1/3/R)a k取150、a取1.5。

(2)、爆破飞石公式:Rf=20kfn2w kf=(1-1.5)安全系数、n:爆破作用指数:松动爆破:(0.35-1.0)、抛掷爆破:(1-3)。

(3)、爆破冲击波安全距离公式:R=kQ1/3 单位m ,k:与装药途径和爆破程度有关的系数,对建筑物k=1-2 对人员:取k=10。

二、 深孔台阶爆破常用公式、各参数取值范围:

1、主爆孔:

(1)、孔径:d≥50mm。

(2)、抵抗线:w=(20-40)。

(3)、孔 距:a=(0.6-1.4)w。

(4)、排距:b=0.8a。

(5)、孔深:H≥5m一般取10-15m。

(6)、超深:h=(0.15-0.35)w。

其它同浅孔台阶爆破

三、 井巷掘进爆破常用公式、各参数取值范围:

(1)、孔径:d=(32-42)mm。

(2)、孔深:L:巷道断面积:s≥12m2取(1.5-2.2)m、s≤12m2取(1.2-1.8)m。

(3)、炮孔个数:N=3.3(fs2)1/3 f取(7-20) s:巷道断面积。

(4)、炸药单耗:q=1.1k0(f/s)1/2 k0=525/p p:炸药爆力、乳化炸药p=260、f.s同上。此单耗为整个断面的平均单耗,还要根据掏槽孔、辅助孔、周边孔进行分配。

(5)、每一个循环进尺掘进爆破的用药量:Q=q.s.L.y L:孔深,y:炮孔利用率(0.8-0.95)。

(6)、炸药单耗分配:①、掏槽孔:(1.76-1.98)kg/m3 ②、辅助孔:按平均单耗。③、周边孔:为辅助孔的(1/2-1/3)。 ④、底孔:按平均单耗。

(7)、起爆顺序:①、掏槽孔、②、辅助孔、③、周边孔、④、底孔。

(8)、布孔顺序:①、掏槽孔、②、周边孔、③、底孔、④、辅助孔。

(9)、掏槽方式:①、锥、斜形掏槽:孔口距:(0.6-0.7)m ,孔底距:0.15m ,倾角:600-700. ②、平行孔直线掏槽:一般取孔距a=(0.4-0.8)m。

这些乱七八糟的数字看着就头疼,年龄越大越记不住,脑壳子完全不够用啊!必须要开发一个计算工具,不然学习起来举步艰难。

分类
神经兮兮

人生没有白走的弯路

当你拥有一个相对稳定的工作的时候,是不是就顺风顺水了呢?嗯!一切看起来很美好,然而当你工作越来越久,发现工作已经无法体现其自身价值,每月拿着固定的工资,连基本的物质方面的要求都不能满足,每天做着没有意义的事情,也不能满足其精神方面的要求,固定工资导致的月月负资产,你就会越来越不喜欢它,到最后越来越疲惫,直到提不起一点精神,人渐渐低沉,整天无精打采,每天过着颓废的生活。

其实贫穷不可怕,可怕的是看不到希望,贫穷可以改善,但是一旦精神贫穷了,就很难再矫正,在《我在底层的生活》一书里,作者亲生体验到底薪阶层是如何挣扎求生的,直到总结了一个事实:

因为底薪的问题,所以不得不住在工作地点很远的地方;因为距离工作地点很远,所以要花费大量时间在去上班和下班的路上;因为花费很多的时间在路上,所以用于对提升自己和发现好的工作机会的时间就会越来越少;因为要应付生活和房租的成本,不得不说服自己需要承担更多的工作或者兼职;导致花费大量的时间来做各种劳苦的工作,人渐渐成为一个工作机器,无力再做任何其他的事情,直到最后情绪爆发,愤然离开;然后再换一个地方继续,进入到下一个循环。

人生就这样不停的循环直到终结,虽然每一个人的人生都有自己的剧本,可是每个人也都会羡慕别人的剧本,希望过不一样的生活,但世上只有一种真正的英雄主义,那就是认清生活的真相后依然热爱生活,生活其实就像一坨翔,你永远也不知道你会拉出什么味道的翔,虽然最后连自己都不知道打了些什么?只希望各位看官不要安于现状,能折腾的折腾,你会发现:人生没有白走的弯路,每一段路都是一种领悟。

分类
神经兮兮

欲加之罪,无语之极

开博己经有两个月了吧!不得不吐槽一下这个微信的网站拦截系统,建站后才发现我的网址被微信拦截了,总是提示有不安全的内容,我特别去腾讯安全反诈骗实验室查询了一下,拦截的原因居然是色情网站,真是开了国际玩笑,特不靠谱的大炮嘴可能也没你们这么不靠谱,好歹这网站也是经过本人实名登记备案的,我胆再肥也不可能以身试法吧!

试了一下拦截页面下面的申请恢复访问,申请恢复访问有“我是站长申诉”和“我不是站长申诉”两个选项,当然首选我是站长申诉,需要在服务器部署一个文件来进行站长认证,当你把文件部署之后点立刻认证的时候,系统一直提示认证失败,几次弄下来一度让我怀疑是把文件名弄错了,但是看了几次都没发现错误的地方,来来回回折腾了几个小时,最后还是百度一下才知道原因,才发现认证机制就是一个摆设,就没有任何一个站长认证成功过,其实就是一个简单的文件认证功能,一直不解决的原因不得不让人联想到这是故意而为之的,再来说说我不是站长申诉,进去后需要填写身份证、电话号码、申诉原因、ICP备案号等,让你感到很专业的样子,把你所有信息提供后,提示72小时后给予回复,等吧!这一等就等了一个星期,后面不停的进行网站申请恢复访问的拦截申诉,不出所料的都是石沉大海,把你的信息套了去还不给你办事,这怎么办?没办法,就这样了吧!欲说还休,却道天凉好个秋。

分类
神经兮兮

子非鱼,安之鱼之乐

小颠是个憨憨,对生活没有期待,常常在夜晚胡思乱想,一个人迷茫的时候,想努力改变但怎么也找不到方向,很快国庆长假就快结束了!对小颠这个闲人来说放不放假好像没有什么区别,有时小颠想到终南山隐居,过着独来独往的生活,但是又担心交不起隐士房的房租,想去终南山搭个茅草房,又不允许乱搭乱建,又担心是违章建筑。

小颠不停在想:有些有钱人后悔没有在年轻时照顾家庭,有些穷人后悔没有在年轻时奋斗,有些学渣后悔没有好好学习,有些学霸后悔没有欢乐的童年,有些父母后悔没能享受青春,有些空巢老人后悔没能早点要个孩子。

小颠不知道生命的意义在哪里,无论从哲学或是科学的角度去思考这个问题,小颠都无法得到一个答案,小颠感觉人只要活着就是来折腾的,人生总是活得不尽人意,在这短短的几十年,如果想活成自己想要的样子,那真得好好想想了,从现今规划,不一定非常完美,但一定要过得开心快乐。

分类
神经兮兮

第二篇hello-水先生

还记得王宝强曾经的巅峰之作,《hello-树先生》,因为这部电影让饰演树先生的王宝强变成经典。眯起眼睛,咬着支烟,还有那无处安放的手,简直就是本色出演啊。

俺村里也有一个树先生,大家都叫他小水,我们暂且叫他水先生,水先生打小就在村里闲晃,但和游手好闲、爱管闲事的树先生不太一样,他帮着邻里担水,每次村里散场都是第一个上前搭手帮忙收拾摊子。

水先生是个哑巴,迫于生活,水先生偶尔会到县城里的饭馆向食客伸手要钱,水先生不会说话,只会用手拍打别人来打招呼,但是都是被食客辱骂后离开。

听说每个村都有一个像水先生一样的人,传说他们上辈子是大奸大恶之人,这辈子是回来还债的,人们叫它“守村人”,所以遇到他们请善待他们。

分类
神经兮兮

第一篇hello-world

这是我的第一篇文章hello-world,从备案到搭建服务器断断续续的用了一个星期,因为平时都在忙着其他事情的原因,所以姗姗来迟了。

还是理一个计划出来,方便以后更新吧!一个星期内把主题完善了,直接用原始主题好像也太随便了。

对于主题,不得不说,一直都没有审美标准的我,听说“没有审美力是绝症,知识也拯救不了”,就好像是一种“隐形穷人”,穷的不是物质,也不是文化,而是审美。

回想来,我好像这几个方面从来都没富有过,不管了,穷就穷了,否极泰来。