팡이네

경도, 위도 2개의 좌표로 사이의 거리 계산

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//------------------------------------------
// 경도, 위도 2개의 좌표로 사이의 거리 계산
//------------------------------------------
getDistince(lng1: number, lat1: number, lng2: number, lat2: number, useKm?: boolean) {
    if ((lng1 == lng2) && (lat1 == lat2)) {
        return 0;
    } else {
        const theta = lng1 - lng2;
        let dist = Math.sin(this.deg2rad(lat1)) * Math.sin(this.deg2rad(lat2))
                    + Math.cos(this.deg2rad(lat1)) * Math.cos(this.deg2rad(lat2)) * Math.cos(this.deg2rad(theta));
        dist = Math.acos(dist);
        dist = this.rad2deg(dist);
        dist = dist * 60 * 1.1515;
 
        if (useKm) {
            dist = dist * 1.609344;
        } else {
            dist = dist * 1609.344;
        }
 
        return dist;
    }
}
 
deg2rad(deg: number) {
    return deg * Math.PI / 180.0;
}
 
rad2deg(rad: number) {
    return rad * 180 / Math.PI;
}

출처

https://fruitdev.tistory.com/189

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
사용자 웹 브라우저 및 버전 확인
 
function getBrowserInfo(opt) {
    var ua = navigator.userAgent.toLowerCase();
     
    if (ua.indexOf('android') > -1) return 'Android';
    else if (ua.match(/iphone|ipad|ipot/)) return 'iOS';
     
    if (navigator.appName == 'Microsoft Internet Explorer') {
        if (opt == 'n') return 'Explorer';
        else {
            var re = new RegExp('msie ([0-9]{1,}[\\.0-9]{0,})');
            if (re.exec(ua) !== null) {
                if (opt == 'v')
                    return parseInt(RegExp.$1);
                else
                    return 'Explorer '+ parseInt(RegExp.$1);
            }
        }
    }
    else if (ua.indexOf('trident') != -1 && navigator.product == 'Gecko') { //IE 11 above
        if (opt == 'n') return 'Explorer';
        else {
            var re = new RegExp('trident/.*rv:([0-9]{1,}[\.0-9]{0,})');
            if (re.exec(ua) != null) {
                if (opt == 'v')
                    return parseInt(RegExp.$1);
                else
                    return 'Explorer '+ parseInt(RegExp.$1);
            }
        }
    }
    else if (/edge/.test(ua)) {
        if (opt == 'n') return 'Edge';
        else {
            if (opt == 'v')
                return parseInt(/edge\/([\d\.]+)/.exec(ua)[1]);
            else
                return 'Edge '+ parseInt(/edge\/([\d\.]+)/.exec(ua)[1]);
        }
    }
    else if (/chrome/.test(ua)) {
        if (opt == 'n') return 'Chrome';
        else {
            if (opt == 'v')
                return parseInt(/chrome\/([\d\.]+) safari/.exec(ua)[1]);
            else
                return 'Chrome '+ parseInt(/chrome\/([\d\.]+) safari/.exec(ua)[1]);
        }
    }
    else if (/firefox/.test(ua)) {
        if (opt == 'n') return 'FireFox';
        else {
            if (opt == 'v')
                return parseInt(/firefox\/([\d\.]+)/.exec(ua)[1]);
            else
                return 'FireFox '+ parseInt(/firefox\/([\d\.]+)/.exec(ua)[1]);
        }
    }
    else if (/safari/.test(ua)) {
        if (opt == 'n') return 'Safari';
        else {
            if (opt == 'v')
                return parseInt(/version\/([\d\.]+) safari/.exec(ua)[1]);
            else
                return 'Safari '+ parseInt(/version\/([\d\.]+) safari/.exec(ua)[1]);
        }
    }
     
    return 'Other';
}
 
getBrowserInfo('n');    //웹 브라우저 이름
getBrowserInfo('v');    //웹 브라우저 버전
getBrowserInfo();       //웹 브라우저 이름 + 버전

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
테이블 안에 있는 체크박스 모두 선택 및 해제
테이블 ID = 'xxxxx_tblList'
전체 선택 체크박스 ID = 'xxxxx_chkAll' 인 경우 뒷부분 선택자 id$ 로 선택
전체 선택 체크박스 역시 영향받기 때문에 thead, tbody 태그로 구분해서
tbody에 있는 체크박스만 처리
 
$(document).ready(function () {
    $('input[id$="chkAll"]').click(function () {
        var tbl = $('table[id$="tblList"]');
        var checked = $(this).is(':checked');
        $('tbody tr td input:checkbox', tbl).each(function () {
            $(this).prop('checked', checked);
        })
    });
});

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//날짜인지 검사
function isDate(d, c) {
    var y, m, d;
    if (d.length == 8) {
        y = parseInt(d.substr(0, 4));
        m = parseInt(d.substr(4, 2));
        d = parseInt(d.substr(6, 2));
    }
    else if (d.length == 10) {
        if (c == null) c = '-';
        var a = d.split(c);
        if (a.length != 3) return false;
 
        y = parseInt(a[0]);
        m = parseInt(a[1]);
        d = parseInt(a[2]);
    }
    else {
        return false;
    }
 
    var date = new Date(y, m - 1, d);
 
    return (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//숫자 키입력 검사
function isNumberKeyDown(e) {
    e = e || window.event;
    var keyCode = (e.keyCode ? e.keyCode : e.which);
 
    if (keyCode == 8 || keyCode == 9 || keyCode == 27 || keyCode == 46) return true;    //BackSpace, Tab, ESC, Delete
    if (keyCode == 35 || keyCode == 36 || keyCode == 37 || keyCode == 39) return true//Home, End, Left, Right Arrow
    if (e.ctrlKey || e.shiftKey || keyCode == 13) return false; //Enter
 
    return ((keyCode > 47 && keyCode < 58) || (keyCode > 95 && keyCode < 106));
}
 
<input type="text" name="tbTest" onkeydown="return isNumberKeyDown(event);" style="ime-mode:disabled">
 
위와 같이 처리해도 한글은 입력되기 때문에 한글 입력을 방지하기 위해 ime-mode 스타일 추가