반응형

1. 시험환경

    ˙ HTML

    ˙ JavaScript

    ˙ proj4.js

 

2. 목적

    ˙ CDN 방식으로 proj4.js 라이브러리를 연동설정한다.

    ˙ proj4()를 이용하여 UTM 좌표계와 wgs84 좌표계 간 상호 변환한다.

 

3. 적용

    ① 예제 코드를 실행한다.

        - proj4.js 라이브러리 추가

        - proj4()를 이용하여 utm과 wgs84 간 좌표변환

proj4.html
0.00MB

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
  <head>
    <title>좌표변환</title>
  </head>
<body>
  <h2>wgs84와 utm 간 변환</p>
 
  <script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.7.2/proj4.js"></script>
  <script type="text/javascript">
    utmX = 327791.876
    utmY = 4153604.073
    console.log(`utmX : ${utmX}, utmY: ${utmY}`);
 
    wgsVal = proj4("+proj=utm +zone=52""+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs", [utmX, utmY])
    console.log(`lng : ${wgsVal[0]}, lat: ${wgsVal[1]}`);
 
    utmVal = proj4("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs""+proj=utm +zone=52", [wgsVal[0], wgsVal[1]])
    console.log(`utmX : ${utmVal[0]}, utmY: ${utmVal[1]}`);
  </script>
</body>
</html>
cs

 

4. 결과

    ˙ 웹브라우저에서 콘솔로그(<F12>)를 확인하여 UTM과 WGS84 좌표계간 변환 결과를 비교한다.

콘솔로그에서 좌표변환 결과 확인

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ HTML

    ˙ cecium.js v1.96

 

2. 목적

    ˙ cecium 사이트 계정 등록 및 접속 토큰을 발급 받는다.

    ˙ cecium 사이트에서 제공하는 QuickStart 튜토리얼을 실습한다.

        - HTML 파일에 Cecium.js 라이브러리를 설정한다.

        - HTML 파일을 실행하여 3D 초기화면이 표현되는지 확인한다.

 

3. 적용

    ① cecium.js 사이트에 회원가입 후 토큰을 발급받는다.

        - URL : https://cesium.com/

 

Cesium: The Platform for 3D Geospatial

The Cesium platform provides the foundations any software application needs to utilize 3D geospatial data: visualization, data pipelines, curated data, and analytics. Based on open standards for data formats, open APIs for customization and integration, an

cesium.com

       

토큰 생성

 

    HTML 파일을 생성한다.

        - cecium.html

 

     CDN방식으로 cecium.js 라이브러리를 연동한다.
        - 참고 : https://cesium.com/learn/cesiumjs-learn/cesiumjs-quickstart/

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
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <!-- Include the CesiumJS JavaScript and CSS files -->
    <script src="https://cesium.com/downloads/cesiumjs/releases/1.96/Build/Cesium/Cesium.js"></script>
    <link href="https://cesium.com/downloads/cesiumjs/releases/1.96/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
    <div id="cesiumContainer"></div>
        <script>
        // Your access token can be found at: https://cesium.com/ion/tokens.
        // Replace `your_access_token` with your Cesium ion access token.
        Cesium.Ion.defaultAccessToken = '발급받은 토큰 입력';
 
        // Initialize the Cesium Viewer in the HTML element with the `cesiumContainer` ID.
        const viewer = new Cesium.Viewer('cesiumContainer', {
            terrainProvider: Cesium.createWorldTerrain()
        });
 
        // Add Cesium OSM Buildings, a global 3D buildings layer.
        const buildingTileset = viewer.scene.primitives.add(Cesium.createOsmBuildings());
 
        // Fly the camera to San Francisco at the given longitude, latitude, and height.
        viewer.camera.flyTo({
            destination : Cesium.Cartesian3.fromDegrees(127.417537.855500),
            orientation : {
                heading : Cesium.Math.toRadians(0.0),
                pitch : Cesium.Math.toRadians(-15.0)
            }
        });
        </script>
    </div>
</body>
</html>
cs

 

4. 결과

    ˙ 정상 동작을 확인한다.

    ˙ 튜토리얼 등 여러 문서들을 참고하여 사용법을 본격적으로 익혀보자.

실행화면

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ JAVA

    ˙Files.walk() 함수

 

2. 목적

    ˙ 주어진 경로에 존재하는 파일을 리스트에 추가한다.

    ˙ 주어진 문자열이 포함된 파일명만 추출한다.

 

3. 적용

    ① 예제코드

        - _path : 검색할 경로명

        - _name : 파일명에 포함된 문자열

1
2
3
4
5
6
7
8
9
public List<Path> getFile(String _path, String _name) throws IOException {
 
    Path dirPath = Paths.get(_path);
    Stream<Path> walk = Files.walk(dirPath);
 
    return walk.filter(Files::isRegularFile)
                .filter(p -> p.getFileName().toString().equalsIgnoreCase(_name))
                .collect(Collectors.toList());
}
cs

 

4. 결과

    ˙ 출력결과

 

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ Ubuntu 22.04

 

2. 목적

    ˙ Ubuntu 환경에서 Packer 설치하는 방법을 학습한다.

 

3. 적용

    ① 최신 버전 설치를 위해 pip install을 이용하여 ansible을 설치한다.

        - $ sudo apt install python3-pip

        - $ pip install ansible

 

 

    ② 설치는 완료되었지만, 경로를 PATH에 추가해야한다.

        - 설치 중 메시지 경고 메시지 출력

WARNING: The script ansible-community is installed in '/home/ubuntu/.local/bin' which is not on PATH.

 

    ③ .profile 파일에 ansible 설치 경로가 자동으로 추가되지만, 자동 반영되지는 않으므로 refresh 해야만 한다.

        - $ vi ~/.profile

        - $ source ~/.profile

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

 

4. 결과

    ˙ 설치가 완료되면 버전을 확인한다.

    ˙ $ ansible --version

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ Ubuntu 22.04

 

2. 목적

    ˙ Ubuntu 환경에서 Packer 설치하는 방법을 학습한다.

 

3. 적용

    ① Packer 공식 사이트에서 운영체제별 설치 방법을 확인한다.

        - URL : https://www.packer.io/

 

Packer by HashiCorp

Packer is a free and open source tool for creating golden images for multiple platforms from a single source configuration.

www.packer.io

 

    ② 여기에선 Ubuntu 운영체제에서 설치할 것이다.

        - Tutorials → AWS → Install Packer → Linux → Ubuntu/Debian

 

    ③ 배치 파일을 만든 후 설치 스크립트들을 복사하여 일괄적으로 실행할 수 있도록  명령어들을 붙여 넣는다.

        - $ vi ./install-packer.sh

 

    ④ 실행권한을 부여하고 Packer 설치 배치를 실행한다.

        - $ chmod u+x install-packer.sh

        - $ ./install-packer.sh

 

4. 결과

    ˙ 설치가 완료되면 버전과 실행 명령어 동작 여부를 확인한다.

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ python

    ˙ mariadb

    ˙ excel

 

2. 목적

    ˙ pandas를 이용하여 엑셀(xlsx) 데이터를 추출하여 dataframe을 생성한다.

    ˙ dataframe에서 열 단위 데이터를 추출한다.

    ˙ 추출한 열 단위 데이터를 DB에 저장한다.

 

3. 적용

    ① 엑셀(xlsx) 샘플 파일

        - 파일명 : sample.xlsx

        - Sheet명 : Sheet1

sample.xlsx
0.01MB
샘플 데이터

 

    ② DB 설정 파일에서 설정 정보를 입력한다.

        - 파일명 : rdb.py

        - DB 설정정보 : user(계정), password(계정 비밀번호), host(DB IP), port(DB Port), database(스키마)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import mariadb
import sys
 
def connection():
    try:
        conn = mariadb.connect(
            user="root",
            password="1q2w3e",
            host="127.0.0.1",
            port=3307,
            database="sample"
        )
 
    except mariadb.Error as e:
        print(f"Error connecting to MariaDB Platform: {e}")
        sys.exit(1)
 
    return conn
cs

 

    ③ 데이터 처리 코드를 작성한다.

        - pandas를 이용하여 엑셀(xlsx) 데이터를 추출하여 dataframe을 생성한다.

        - dataframe에서 열 단위 데이터를 추출한다.

        - 추출한 열 단위 데이터를 DB에 저장한다.

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
import mariadb
import pandas as pd
import rdb
 
file = './input/sample.xlsx'
 
def readXlsx(_file):
    return pd.read_excel(_file, engine='openpyxl', sheet_name='Sheet1')
 
 
def insertColData(_cursor, _col_1_list, _col_2_list, _col_3_list, _col_4_list):
    for i in range(len(_col_1_list)):
        print(_col_1_list[i], _col_2_list[i], _col_3_list[i], _col_4_list[i])
 
        try:
            _cursor.execute("INSERT INTO world VALUES (?, ?, ?, ?)",
                            (str(_col_1_list[i]).strip(),
                             str(_col_2_list[i]).strip(),
                             str(_col_3_list[i]).strip(),
                             str(_col_4_list[i]).strip()))
        except mariadb.Error as e:
            print(f"Error: {e}")
 
 
if __name__ == '__main__':
    print('1. xlsx 파일 읽기')
    df = readXlsx(file)
    print(df)
    print()
 
    print('2. dataframe으로부터 열단위 데이터 추출')
    col_1_list = df.iloc[:,0].values.tolist()   # 1열
    col_2_list = df.iloc[:,1].values.tolist()   # 2열
    col_3_list = df.iloc[:,2].values.tolist()   # 3열
    col_4_list = df.iloc[:,3].values.tolist()   # 4열
    print(col_1_list)
    print(col_2_list)
    print(col_3_list)
    print(col_4_list)
 
    print('3. DB Insert')
    conn = rdb.connection()
    cursor = conn.cursor()
    insertColData(cursor, col_1_list, col_2_list, col_3_list, col_4_list)
    conn.commit()
    conn.close()
cs

 

    ④ 파일 구조

        - input/sample.xlsx : 입력 데이터 샘플

        - rdb.py : DB 설정 파일

파일 구조

 

4. 결과

    ˙ 콘솔 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1. xlsx 파일 읽기
    Nation  Language   Money  Population
0  America   English  Dollar        5000
1    Spain   Spanish    Euro        4000
2    Italy   Italian     NaN        3000
3    Japan  Japanish   Japan       20000
 
2. dataframe으로부터 열단위 데이터 추출
['America''Spain''Italy''Japan']
['English''Spanish''Italian''Japanish']
['Dollar''Euro', nan, 'Japan']
[50004000300020000]
 
3. DB Insert
cs

 

    ˙ DB 테이블 저장

sample.world 데이터 저장 결과

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ python

    ˙ json

    ˙ 공공 데이터 등산로 파일

 

2. 목적

    ˙ geojson 표준 데이터로부터 특정 구간에 해당하는 위경도 데이터를 추출할 수 있다.

 

3. 적용

    ① 공공 데이터 포털로부터 다운 받은 표준 등산로 파일

등산로_48_경상남도.zip
14.09MB

 

    ② 특정 산악-등산로에 해당하는 위경도 데이터를 추출한다.

        - MNTN_CODE : 법정 등산로 코드

        - MNTN_NM : 산악명

        - PMNTN_NM : 등산로명

        - type : Point (점), LineString (선), MultiLineString (다중 선), Polygon (면), MultiPolygon (다중 면)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#-*- coding: utf-8 -*- 
import json
 
geojFile = './등산로_48_경상남도.geojson';
 
with open(geojFile, 'rt', encoding='UTF8'as f:
    data = json.load(f)
 
for feature in data['features']:
    # 등산로 코스
    if feature['properties']['MNTN_CODE'== '457302501':
        print("산악명: {0}, 등산로: {1}, type: {2}".format(
            feature['properties']['MNTN_NM'],
            feature['properties']['PMNTN_NM'],
            feature['geometry']['type']))
        
        for i in range(len(feature['geometry']['coordinates'])):
            print('=== Line ===')
            for j in range(len(feature['geometry']['coordinates'][i])):
                print('위도 : ', feature['geometry']['coordinates'][i][j][0], ', 경도 : ', feature['geometry']['coordinates'][i][j][1])
 
cs

 

4. 결과

    ˙ 특정 산악 등산로 데이터 추출 결과를 확인할 수 있다.

등산로 위경도 데이터

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형
반응형

1. 시험환경

    ˙ STS(Spring Tool Suite) 4

    ˙ Spring MVC Project

 

2. 목적

    ˙ DB에서 읽어온 데이터를 VO 객체의 리스트형태로 담아서 View로 전달한다.

    ˙ View에서 전달된 데이터를 JSTL 태그를 이용하여 출력한다.

 

3. 적용

    ① DB 샘플 데이터를 다음과 같이 만들어 두었다.

DB 예제 데이터

 

    ② DB데이터를 컨트롤러에서 처리한 후 View로 전달한다.

        - DB에서 불러온 데이터는 excerciseVoList 변수에 저장된다.

        - excerciseVoList 변수를 모델 객체에 넣어서 View(default.jsp)로 반환한다.

컨트롤러 데이터 처리 영역

 

    ③ jsp에 JSTL 태그를 추가하고 반복문을 이용하여 전달받은 객체를 출력한다.

        - jstl taglib 추가 : <%@ taglib prefix="c" uri="http://java.sun.cim/jsp/jstl/core">

전달받은 객체 데이터 출력

 

4. 결과

    ˙ 읽어온 DB 데이터가 View까지 전달되어 출력되는 것을 확인할 수 있다.

결과 확인

 

 

※ 내용이 도움 되셨다면 광고 클릭 한번 부탁드립니다 ※

반응형

+ Recent posts