分类
笃实好学

坐标转换(火星坐标、百度坐标、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。

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