From 54be161a09979881ac81974e8e68c6ca391a3c27 Mon Sep 17 00:00:00 2001 From: minsung Date: Wed, 17 Jun 2026 09:34:20 +0900 Subject: [PATCH] =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.json | 3 +- docs/history.zip | Bin 0 -> 10673 bytes .../2026-04-28_미니맵-미표시-원인분석.md | 42 ++ pythonsource/advanced_tuner_v2.py | 560 ++++++++++++++++++ .../하행)회덕-대전조차장_POI_XY값.csv | 41 ++ .../하행)회덕-대전조차장_POI_위경도값.csv | 41 ++ ...)회덕-대전조차장_POI_위경도값_타원체고.csv | 41 ++ pythonsource/input/center.csv | 225 +++++++ pythonsource/streamlined_tuner.spec | 45 ++ pythonsource/캡처.png | Bin 0 -> 81400 bytes storage/baeksong.json | 1 + storage/baeksong2.json | 1 + storage/geo_result.json | 1 + storage/pois.json | 1 + 14 files changed, 1001 insertions(+), 1 deletion(-) create mode 100644 docs/history.zip create mode 100644 docs/history/2026-04-28_미니맵-미표시-원인분석.md create mode 100644 pythonsource/advanced_tuner_v2.py create mode 100644 pythonsource/input/building/하행)회덕-대전조차장_POI_XY값.csv create mode 100644 pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값.csv create mode 100644 pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값_타원체고.csv create mode 100644 pythonsource/input/center.csv create mode 100644 pythonsource/streamlined_tuner.spec create mode 100644 pythonsource/캡처.png create mode 100644 storage/baeksong.json create mode 100644 storage/baeksong2.json create mode 100644 storage/geo_result.json create mode 100644 storage/pois.json diff --git a/.claude/settings.json b/.claude/settings.json index 57308c6..8ee494f 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -8,7 +8,8 @@ "Edit(/.claude/skills/review/**)", "Edit(/.claude/agents/**)", "Edit(/.claude/hooks/**)", - "mcp__gitea__issue_write" + "mcp__gitea__issue_write", + "PowerShell($env:GEO_DATA_DIR=\"d:\\\\MYCLAUDE_PROJECT\\\\abcvideo\\\\samplevideo\"; $env:VIDEOS_DIR=\"d:\\\\MYCLAUDE_PROJECT\\\\abcvideo\\\\storage\\\\videos\"; npm run dev)" ] }, "hooks": { diff --git a/docs/history.zip b/docs/history.zip new file mode 100644 index 0000000000000000000000000000000000000000..25277fdfcbf1dc1528ef01179187228967f06a9f GIT binary patch literal 10673 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 DQ{LWu literal 0 HcmV?d00001 diff --git a/docs/history/2026-04-28_미니맵-미표시-원인분석.md b/docs/history/2026-04-28_미니맵-미표시-원인분석.md new file mode 100644 index 0000000..dae90bc --- /dev/null +++ b/docs/history/2026-04-28_미니맵-미표시-원인분석.md @@ -0,0 +1,42 @@ +# 2026-04-28 미니맵 미표시 원인 분석 및 수정 + +## 작업 내용 +새로운 서버에 배포 후 RoutePanel 미니맵이 표시되지 않는 원인 분석 및 수정 + +## 원인 + +1. **`GEO_DATA_DIR` 미설정**: 기본값이 `samplevideo/` 상대 경로인데 새 서버에 해당 폴더 없음 +2. **`loadFrames()` crash**: `_dataDir`이 존재하지 않아도 `fs.readdirSync()` 호출 → 예외 발생 → `/api/geo/frames` 500 반환 +3. **RoutePanel 렌더 가드**: `stations.length === 0` 이면 `null` 반환 → 미니맵 완전히 숨김 +4. **에러 무시**: fetch `.catch(() => {})` 로 서버 500 에러가 조용히 무시됨 + +## 수정 사항 + +- `server/src/services/geoMatch.ts`: `loadFrames()`에 `fs.existsSync(_dataDir)` 체크 추가 (crash → 빈 배열 반환) +- `loadFrames()`, `loadPois()` 양쪽에 `[geo]` 경고 로그 추가 (어떤 파일이 없는지 즉시 파악 가능) +- 불필요한 미사용 변수(`csvPath`) 제거 + +## 새 서버 설정 방법 + +```powershell +$env:GEO_DATA_DIR="C:\경로\samplevideo" +$env:VIDEOS_DIR="C:\경로\videos" +npm run dev:server +``` + +필요한 디렉토리 구조: +``` +{GEO_DATA_DIR}/ +├── 하행)회덕-대전조차장.csv ← 드론 비행 데이터 +└── building/ + ├── *POI*위경도*.csv + └── *측점*위경도*.csv +``` + +## GeoSearch 기능 확인 +- "건물 → 프레임" 탭: 측점/건물명 검색 → 카메라 시야 내 프레임 목록 → 클릭 시 이동 +- "프레임 → 건물" 탭: 현재 프레임에서 보이는 POI/측점 목록 표시 +- RoutePanel: 세로 드래그로 km 위치 seek + +**소요 시간**: 20분 +**Context 사용량**: input 45k / output 8k tokens diff --git a/pythonsource/advanced_tuner_v2.py b/pythonsource/advanced_tuner_v2.py new file mode 100644 index 0000000..bda6aca --- /dev/null +++ b/pythonsource/advanced_tuner_v2.py @@ -0,0 +1,560 @@ +import sys +import os +import re +import cv2 +import numpy as np +import pandas as pd +from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, + QLabel, QLineEdit, QPushButton, QFileDialog, QTabWidget, + QSlider, QDoubleSpinBox, QProgressBar, QComboBox, QGroupBox, QFormLayout, + QSpinBox) +from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer +from PyQt5.QtGui import QImage, QPixmap +from scipy.spatial.transform import Rotation as R +from pyproj import Transformer + +# ================================================================= +# [NEXT GEN] advanced_tuner_v2.py: Streamlined GIS GUI Tuner +# 설계 원칙: +# 1. MP4 + SRT + CSV (WGS84) 워크플로우 통합 +# 2. 실시간 좌표 변환 (Lat/Lon -> EPSG:5186) +# 3. 사용자 친화적 튜닝 인터페이스 제공 +# ================================================================= + +class SRTParser: + @staticmethod + def parse(srt_path): + data_dict = {} + if not os.path.exists(srt_path): return data_dict + try: + with open(srt_path, 'r', encoding='utf-8', errors='ignore') as f: + content = f.read() + if "latitude" not in content.lower(): + with open(srt_path, 'r', encoding='cp949', errors='ignore') as f: + content = f.read() + + blocks = content.split('\n\n') + for block in blocks: + f_match = re.search(r'FrameCnt:\s*(\d+)', block) + if not f_match: continue + idx = int(f_match.group(1)) + + lat = float(re.search(r'latitude:\s*([\d\.-]+)', block).group(1)) + lon = float(re.search(r'longitude:\s*([\d\.-]+)', block).group(1)) + alt = float(re.search(r'abs_alt:\s*([\d\.-]+)', block).group(1)) + yaw = float(re.search(r'gb_yaw:\s*([\d\.-]+)', block).group(1)) + pitch = float(re.search(r'gb_pitch:\s*([\d\.-]+)', block).group(1)) + roll = float(re.search(r'gb_roll:\s*([\d\.-]+)', block).group(1)) + focal = float(re.search(r'focal_len:\s*([\d\.-]+)', block).group(1)) + + data_dict[idx] = { + 'lat': lat, 'lon': lon, 'alt': alt, + 'yaw': yaw, 'pitch': pitch, 'roll': roll, + 'focal': focal + } + # Post-process: Filling gaps and Smoothing + if not data_dict: return {} + + indices = sorted(data_dict.keys()) + min_idx, max_idx = indices[0], indices[-1] + + # 1. Interpolate Gaps + all_indices = np.arange(min_idx, max_idx + 1) + new_data = {} + + fields = ['lat', 'lon', 'alt', 'yaw', 'pitch', 'roll', 'focal'] + temp_arrays = {f: [] for f in fields} + for idx in indices: + for f in fields: + temp_arrays[f].append(data_dict[idx][f]) + + interp_arrays = {} + for f in fields: + # Handle Yaw wrapping for smoother rotation (Optional but safer) + if f == 'yaw': + y_arr = np.array(temp_arrays[f]) + # Ensure continuous angles + y_arr = np.unwrap(np.radians(y_arr)) + interp_y = np.interp(all_indices, indices, y_arr) + # 2. Smooth (Moving Average) + smooth_y = np.convolve(interp_y, np.ones(5)/5, mode='same') + interp_arrays[f] = np.degrees(smooth_y) + else: + interp_f = np.interp(all_indices, indices, temp_arrays[f]) + # 2. Smooth (Moving Average) + interp_arrays[f] = np.convolve(interp_f, np.ones(5)/5, mode='same') + + for i, idx in enumerate(all_indices): + new_data[int(idx)] = {f: interp_arrays[f][i] for f in fields} + + return new_data + except Exception as e: + print(f"SRT Error: {e}") + return {} + +class RenderWorker(QThread): + progress = pyqtSignal(int) + finished = pyqtSignal(str) + + def __init__(self, params): + super().__init__() + self.p = params + self.is_running = True + + def stop(self): + self.is_running = False + + def run(self): + try: + cap = cv2.VideoCapture(self.p['video_path']) + original_fps = cap.get(cv2.CAP_PROP_FPS) + cap.set(cv2.CAP_PROP_POS_FRAMES, self.p['range'][0]) + + target_w, target_h = self.p['resolution'] + target_fps = self.p['fps'] if self.p['fps'] > 0 else original_fps + start_f, end_f = self.p['range'] + total_work = end_f - start_f + 1 + + fourcc = cv2.VideoWriter_fourcc(*self.p['codec']) + out = cv2.VideoWriter(self.p['output_path'], fourcc, target_fps, (target_w, target_h)) + + transformer = Transformer.from_crs("epsg:4326", "epsg:5186") + + # Pre-swap line points if needed + eff_line_pts = self.p['line_pts'] + if self.p['swap_xy']: + eff_line_pts = eff_line_pts.copy() + eff_line_pts[:, [0, 1]] = eff_line_pts[:, [1, 0]] + + for f_idx in range(start_f, end_f + 1): + if not self.is_running: break + ret, frame = cap.read() + if not ret: break + + # Check for Sync + if f_idx in self.p['srt_data']: + meta = self.p['srt_data'][f_idx] + dx, dy = transformer.transform(meta['lat'], meta['lon']) + + if self.p['swap_xy']: + dx, dy = dy, dx + + # Resize frame if needed + original_h, original_w = frame.shape[:2] + if (target_w, target_h) != (original_w, original_h): + draw_frame = cv2.resize(frame, (target_w, target_h)) + else: + draw_frame = frame.copy() + + drone_pos = np.array([dx + self.p['off_x'], dy + self.p['off_y'], meta['alt'] + self.p['off_z']]) + rvec, tvec, K = self.get_proj(meta, drone_pos, target_w, target_h) + R_w2c, _ = cv2.Rodrigues(rvec) + pts_cam = (eff_line_pts @ R_w2c.T) + tvec.T + + for i in range(0, len(pts_cam), 2): + p1c, p2c = pts_cam[i], pts_cam[i+1] + if p1c[2] < 0.1 and p2c[2] < 0.1: continue + if p1c[2] < 0.1 or p2c[2] < 0.1: + t = (0.1 - p1c[2]) / (p2c[2] - p1c[2]) + p_mid = p1c + t * (p2c - p1c) + if p1c[2] < 0.1: p1c = p_mid + else: p2c = p_mid + + u1 = int(K[0, 0] * (p1c[0] / p1c[2]) + K[0, 2]) + v1 = int(K[1, 1] * (p1c[1] / p1c[2]) + K[1, 2]) + u2 = int(K[0, 0] * (p2c[0] / p2c[2]) + K[0, 2]) + v2 = int(K[1, 1] * (p2c[1] / p2c[2]) + K[1, 2]) + + ret_cli, pt1, pt2 = cv2.clipLine((0, 0, target_w, target_h), (u1, v1), (u2, v2)) + if ret_cli: + cv2.line(draw_frame, pt1, pt2, (0, 0, 255), 10) + out.write(draw_frame) + else: + if (target_w, target_h) != (frame.shape[1], frame.shape[0]): + out.write(cv2.resize(frame, (target_w, target_h))) + else: + out.write(frame) + + self.progress.emit(int(((f_idx - start_f + 1) / total_work) * 100)) + + + cap.release() + out.release() + self.finished.emit(self.p['output_path']) + except Exception as e: + self.finished.emit(f"Error: {e}") + + def get_proj(self, meta, drone_pos, w, h): + yaw = np.radians(meta['yaw'] + self.p['off_yaw']) + pitch = np.radians(meta['pitch'] + self.p['off_pitch']) + roll = np.radians(meta['roll'] + self.p['off_roll']) + + R_b2w = (R.from_euler('z', -yaw) * R.from_euler('x', pitch) * R.from_euler('y', roll)).as_matrix() + R_w2c = np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]) @ R_b2w.T + rvec, _ = cv2.Rodrigues(R_w2c) + tvec = -R_w2c @ drone_pos + + f_px = (self.p['focal'] / self.p['sensor_w']) * w + K = np.array([[f_px, 0, w/2], [0, f_px, h/2], [0, 0, 1]]) + return rvec, tvec, K + +class MainWindow(QMainWindow): + def __init__(self): + super().__init__() + self.setWindowTitle("Advanced GIS Tuner v2 (Streamlined)") + self.resize(1280, 850) + + self.srt_data = {} + self.line_points = np.array([]) + self.transformer = Transformer.from_crs("epsg:4326", "epsg:5186") + + self.init_ui() + + def init_ui(self): + tabs = QTabWidget() + self.setCentralWidget(tabs) + + # --- Tab 1: Data Input --- + tab1 = QWidget() + layout1 = QVBoxLayout() + form1 = QFormLayout() + + self.btn_video = QPushButton("Find MP4") + self.txt_video = QLineEdit("하행)회덕-대전조차장.MP4") + self.btn_video.clicked.connect(lambda: self.find_file(self.txt_video, "Video (*.mp4)")) + form1.addRow(self.btn_video, self.txt_video) + + self.btn_srt = QPushButton("Find SRT") + self.txt_srt = QLineEdit("하행)회덕-대전조차장.srt") + self.btn_srt.clicked.connect(lambda: self.find_file(self.txt_srt, "SRT (*.srt)")) + form1.addRow(self.btn_srt, self.txt_srt) + + self.btn_csv = QPushButton("Find CSV (Lat/Lon/H)") + self.txt_csv = QLineEdit("center.csv") + self.btn_csv.clicked.connect(lambda: self.find_file(self.txt_csv, "CSV (*.csv)")) + form1.addRow(self.btn_csv, self.txt_csv) + + layout1.addLayout(form1) + self.btn_load = QPushButton("LOAD ALL DATA") + self.btn_load.setStyleSheet("background-color: #4CAF50; color: white; height: 50px; font-weight: bold;") + self.btn_load.clicked.connect(self.load_all_data) + layout1.addWidget(self.btn_load) + layout1.addStretch() + tab1.setLayout(layout1) + tabs.addTab(tab1, "1. 자료입력") + + # --- Tab 2: Tuner --- + tab2 = QWidget() + hbox2 = QHBoxLayout() + + # Left: Preview + vbox_prev = QVBoxLayout() + self.lbl_preview = QLabel("Video Preview (Load Data First)") + self.lbl_preview.setAlignment(Qt.AlignCenter) + self.lbl_preview.setStyleSheet("border: 2px solid gray; background-color: black;") + self.lbl_preview.setMinimumSize(800, 450) + vbox_prev.addWidget(self.lbl_preview) + + self.sld_frame = QSlider(Qt.Horizontal) + self.sld_frame.valueChanged.connect(self.update_sync_frame) + self.spn_frame = QDoubleSpinBox() + self.spn_frame.setDecimals(0) + self.spn_frame.setSingleStep(1) + self.spn_frame.valueChanged.connect(self.update_sync_frame) + + self.btn_play = QPushButton("▶ PLAY") + self.btn_play.setCheckable(True) + self.btn_play.clicked.connect(self.toggle_play) + + self.play_timer = QTimer() + self.play_timer.timeout.connect(self.next_frame) + + frame_hbox = QHBoxLayout() + frame_hbox.addWidget(self.btn_play) + frame_hbox.addWidget(QLabel("Frame:")) + frame_hbox.addWidget(self.spn_frame) + frame_hbox.addWidget(self.sld_frame, 10) + vbox_prev.addLayout(frame_hbox) + + hbox2.addLayout(vbox_prev, 7) + + # Right: Controls + vbox_ctrl = QVBoxLayout() + group_offsets = QGroupBox("Offsets (Yaw/Pitch/Roll/XYZ)") + form2 = QFormLayout() + + self.chk_swap_xy = QPushButton("Swap XY Coordinates: OFF") + self.chk_swap_xy.setCheckable(True) + self.chk_swap_xy.clicked.connect(self.toggle_swap_xy) + form2.addRow("Axis:", self.chk_swap_xy) + + self.spn_yaw = self.create_spinbox(-180, 180, 0, form2, "Yaw Off") + self.spn_pitch = self.create_spinbox(-180, 180, 0, form2, "Pitch Off") + self.spn_roll = self.create_spinbox(-180, 180, 0, form2, "Roll Off") + form2.addRow(QLabel("
")) + self.spn_off_x = self.create_spinbox(-1000, 1000, 0, form2, "Pos X Off (m)") + self.spn_off_y = self.create_spinbox(-1000, 1000, 0, form2, "Pos Y Off (m)") + self.spn_off_z = self.create_spinbox(-1000, 1000, 0, form2, "Pos Z Off (m)") + form2.addRow(QLabel("
")) + self.spn_focal = self.create_spinbox(1, 200, 24, form2, "Focal (mm)") + self.spn_sensor = self.create_spinbox(1, 100, 36, form2, "Sensor W (mm)") + + group_offsets.setLayout(form2) + vbox_ctrl.addWidget(group_offsets) + vbox_ctrl.addStretch() + hbox2.addLayout(vbox_ctrl, 3) + + tab2.setLayout(hbox2) + tabs.addTab(tab2, "2. 튜너") + + # --- Tab 3: Export --- + tab3 = QWidget() + vbox3 = QVBoxLayout() + form3 = QFormLayout() + + self.cmb_res = QComboBox() + self.cmb_res.addItems(["Original", "4K (3840x2160)", "2K (2560x1440)", "1080p (1920x1080)"]) + form3.addRow("Resolution", self.cmb_res) + + self.cmb_fps = QComboBox() + self.cmb_fps.addItems(["Original", "60", "30"]) + form3.addRow("FPS", self.cmb_fps) + + self.cmb_codec = QComboBox() + self.cmb_codec.addItems(["H.264 (avc1)", "MPEG-4 (mp4v)"]) + form3.addRow("Codec", self.cmb_codec) + + form3.addRow(QLabel("
")) + self.spn_start = QSpinBox() + self.spn_start.setRange(0, 999999) + form3.addRow("Start Frame", self.spn_start) + + self.spn_end = QSpinBox() + self.spn_end.setRange(0, 999999) + form3.addRow("End Frame", self.spn_end) + + vbox3.addLayout(form3) + self.btn_export = QPushButton("START EXPORT") + self.btn_export.setStyleSheet("height: 60px; font-weight: bold; background-color: #f44336; color: white;") + self.btn_export.clicked.connect(self.start_export) + vbox3.addWidget(self.btn_export) + + self.pbar = QProgressBar() + vbox3.addWidget(self.pbar) + vbox3.addStretch() + tab3.setLayout(vbox3) + tabs.addTab(tab3, "3. 출력") + + def create_spinbox(self, min_v, max_v, def_v, layout, label): + sb = QDoubleSpinBox() + sb.setRange(min_v, max_v) + sb.setValue(def_v) + sb.setDecimals(2) + sb.setSingleStep(0.1) + sb.valueChanged.connect(self.update_preview) + layout.addRow(label, sb) + return sb + + def toggle_play(self): + if self.btn_play.isChecked(): + self.btn_play.setText("■ PAUSE") + # Calculate interval based on FPS (or default 33ms for 30fps) + cap = cv2.VideoCapture(self.txt_video.text()) + fps = cap.get(cv2.CAP_PROP_FPS) + cap.release() + interval = int(1000 / fps) if fps > 0 else 33 + self.play_timer.start(interval) + else: + self.btn_play.setText("▶ PLAY") + self.play_timer.stop() + + def next_frame(self): + curr = self.sld_frame.value() + if curr < self.total_frames - 1: + self.sld_frame.setValue(curr + 1) + else: + self.btn_play.setChecked(False) + self.toggle_play() + + def toggle_swap_xy(self): + if self.chk_swap_xy.isChecked(): + self.chk_swap_xy.setText("Swap XY Coordinates: ON") + else: + self.chk_swap_xy.setText("Swap XY Coordinates: OFF") + self.update_preview() + + def update_sync_frame(self, val): + # 도우미: 슬라이더와 스핀박스 동기화 + sender = self.sender() + if sender == self.sld_frame: + self.spn_frame.blockSignals(True) + self.spn_frame.setValue(val) + self.spn_frame.blockSignals(False) + else: + self.sld_frame.blockSignals(True) + self.sld_frame.setValue(int(val)) + self.sld_frame.blockSignals(False) + self.update_preview() + + def find_file(self, line_edit, filt): + path, _ = QFileDialog.getOpenFileName(self, "Select File", "", filt) + if path: line_edit.setText(path) + + def load_all_data(self): + print("Loading...") + self.srt_data = SRTParser.parse(self.txt_srt.text()) + + # Load CSV + try: + df = pd.read_csv(self.txt_csv.text(), encoding='cp949') + # lat, lon, 타원체고(h) + raw_pts = [] + for _, row in df.iterrows(): + x, y = self.transformer.transform(row['lat'], row['lon']) + raw_pts.append([x, y, row['타원체고(h)']]) + + # Reconstruct segments: 0-1, 1-2, 2-3... + seg_pts = [] + for i in range(len(raw_pts)-1): + seg_pts.extend([raw_pts[i], raw_pts[i+1]]) + + self.line_points = np.array(seg_pts, dtype=np.float64) + print(f"Loaded {len(self.line_points)//2} segments.") + except Exception as e: + print(f"CSV Load Error: {e}") + + # Video Info + cap = cv2.VideoCapture(self.txt_video.text()) + self.total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) + self.video_fps = cap.get(cv2.CAP_PROP_FPS) + + self.sld_frame.setRange(0, self.total_frames - 1) + self.spn_frame.setRange(0, self.total_frames - 1) + self.spn_start.setRange(0, self.total_frames - 1) + self.spn_end.setRange(0, self.total_frames - 1) + self.spn_end.setValue(self.total_frames - 1) + cap.release() + + self.update_preview() + + def update_preview(self): + if not self.srt_data or self.line_points.size == 0: return + + f_idx = self.sld_frame.value() + cap = cv2.VideoCapture(self.txt_video.text()) + cap.set(cv2.CAP_PROP_POS_FRAMES, f_idx) + ret, frame = cap.read() + cap.release() + + if not ret: return + + h, w = frame.shape[:2] + if f_idx in self.srt_data: + meta = self.srt_data[f_idx] + + dx, dy = self.transformer.transform(meta['lat'], meta['lon']) + + # Swap Logic + if self.chk_swap_xy.isChecked(): + dx, dy = dy, dx + line_pts_eff = self.line_points.copy() + line_pts_eff[:, [0, 1]] = line_pts_eff[:, [1, 0]] + else: + line_pts_eff = self.line_points + + drone_pos = np.array([dx + self.spn_off_x.value(), + dy + self.spn_off_y.value(), + meta['alt'] + self.spn_off_z.value()]) + + # 실시간 디버그 로그 (콘솔 출력) + print(f"[Frame {f_idx}] XY_Order: {'Y,X' if self.chk_swap_xy.isChecked() else 'X,Y'} | Drone X={drone_pos[0]:.2f}, Y={drone_pos[1]:.2f}") + + # Projection + yaw = np.radians(meta['yaw'] + self.spn_yaw.value()) + pitch = np.radians(meta['pitch'] + self.spn_pitch.value()) + roll = np.radians(meta['roll'] + self.spn_roll.value()) + + r_yaw = R.from_euler('z', -yaw) + r_pitch = R.from_euler('x', pitch) + r_roll = R.from_euler('y', roll) + + R_b2w = (r_yaw * r_pitch * r_roll).as_matrix() + R_align = np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]]) + R_w2c = R_align @ R_b2w.T + + rvec, _ = cv2.Rodrigues(R_w2c) + tvec = -R_w2c @ drone_pos + + f_px = (self.spn_focal.value() / self.spn_sensor.value()) * w + K = np.array([[f_px, 0, w/2], [0, f_px, h/2], [0, 0, 1]]) + + pts_cam = (line_pts_eff @ R_w2c.T) + tvec.T + for i in range(0, len(pts_cam), 2): + p1c, p2c = pts_cam[i], pts_cam[i+1] + if p1c[2] < 0.1 and p2c[2] < 0.1: continue + if p1c[2] < 0.1 or p2c[2] < 0.1: + t = (0.1 - p1c[2]) / (p2c[2] - p1c[2]) + p_mid = p1c + t * (p2c - p1c) + if p1c[2] < 0.1: p1c = p_mid + else: p2c = p_mid + + u1 = int(K[0, 0] * (p1c[0] / p1c[2]) + K[0, 2]) + v1 = int(K[1, 1] * (p1c[1] / p1c[2]) + K[1, 2]) + u2 = int(K[0, 0] * (p2c[0] / p2c[2]) + K[0, 2]) + v2 = int(K[1, 1] * (p2c[1] / p2c[2]) + K[1, 2]) + + ret_cli, pt1, pt2 = cv2.clipLine((0, 0, w, h), (u1, v1), (u2, v2)) + if ret_cli: + cv2.line(frame, pt1, pt2, (0, 0, 255), 10) + + # Convert to QPixmap + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + img = QImage(frame.data, w, h, w*3, QImage.Format_RGB888) + pixmap = QPixmap.fromImage(img).scaled(self.lbl_preview.width(), self.lbl_preview.height(), Qt.KeepAspectRatio) + self.lbl_preview.setPixmap(pixmap) + + def start_export(self): + res_map = {"Original": (0, 0), "4K (3840x2160)": (3840, 2160), "2K (2560x1440)": (2560, 1440), "1080p (1920x1080)": (1920, 1080)} + codec_map = {"H.264 (avc1)": "avc1", "MPEG-4 (mp4v)": "mp4v"} + + target_res = res_map[self.cmb_res.currentText()] + if target_res == (0, 0): + cap = cv2.VideoCapture(self.txt_video.text()) + target_res = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) + cap.release() + + params = { + 'video_path': self.txt_video.text(), + 'srt_data': self.srt_data, + 'line_pts': self.line_points, + 'off_yaw': self.spn_yaw.value(), + 'off_pitch': self.spn_pitch.value(), + 'off_roll': self.spn_roll.value(), + 'off_x': self.spn_off_x.value(), + 'off_y': self.spn_off_y.value(), + 'off_z': self.spn_off_z.value(), + 'focal': self.spn_focal.value(), + 'sensor_w': self.spn_sensor.value(), + 'resolution': target_res, + 'fps': int(self.cmb_fps.currentText()) if self.cmb_fps.currentText() != "Original" else 0, + 'range': (self.spn_start.value(), self.spn_end.value()), + 'swap_xy': self.chk_swap_xy.isChecked(), + 'codec': codec_map[self.cmb_codec.currentText()], + 'output_path': "output_tuner_v2.mp4" + } + + self.btn_export.setEnabled(False) + self.worker = RenderWorker(params) + self.worker.progress.connect(self.pbar.setValue) + self.worker.finished.connect(self.export_done) + self.worker.start() + + def export_done(self, msg): + self.btn_export.setEnabled(True) + print(f"Export Result: {msg}") + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = MainWindow() + window.show() + sys.exit(app.exec_()) diff --git a/pythonsource/input/building/하행)회덕-대전조차장_POI_XY값.csv b/pythonsource/input/building/하행)회덕-대전조차장_POI_XY값.csv new file mode 100644 index 0000000..98ad202 --- /dev/null +++ b/pythonsource/input/building/하행)회덕-대전조차장_POI_XY값.csv @@ -0,0 +1,41 @@ +title,category_clean,address_road,address_jibun,lat,lon,z +ѱö忪,幰, Ƹ 166, 426,38.5105183,-3457.077306,14.93833585 +,幰, 1419, 172-4,91.97154721,-2425.164917,17.43774457 +,幰, 761 48, 262-1,187.2874319,-2532.38759,25.45520444 +ȸ,幰, 761 50, 58-4,209.2757755,-2594.655793,22.83119626 +,幰, 1402, 266-22,44.48265487,-2625.782598,11.92308469 +,幰, 1392 19, 269-16,85.48810915,-2727.805909,12.88381619 + ,幰, 741 52, 290-2,249.229071,-2722.316827,14.40417523 +ֿ÷ƼѳóƮ,幰,, 51-9,304.937541,-2800.194266,18.89580197 +â,幰, Ƹ 166, 540,168.4670337,-3070.22605,14.899754 +ǥ ,幰, Ƹ 178, 426-1,163.6763012,-3308.164519,14.87806363 +ǥ,幰, Ƹ 178, 426-1,156.1322678,-3347.813475,14.83134885 +ijȽ,幰, ź115ȱ 25, Ŵ뵿 411-50,-493.0889954,-1171.866346,23.5801167 +,幰, ź115ȱ 15, Ŵ뵿 411-25,-494.390968,-1223.694574,27.74913449 +ﺸ,幰, Ƹ55 162, Ŵ뵿 446,-605.4733056,-1283.873731,2.79518933 +̿,幰, Ƹ55 156, Ŵ뵿 446-4,-598.2714644,-1352.19981,3.599010894 +,幰, Ƹ55 126, Ŵ뵿 437-22,-605.4980966,-1570.618123,1.855225036 +88ڿ,幰,, 200-1,-85.47358836,-2352.588534,21.30201382 + Ʈ,幰, 1397 77, 203-4,-69.60296008,-2452.946447,22.22890515 +ȸȭ,幰, ȸ34 83, Ŵ뵿 129-1,22.93703649,-14.21495976,3.29909558 +ڿ,幰, ȸ34 73, Ŵ뵿 143-4,-4.326022471,-57.05726838,2.56787152 +ö,幰, ȸ34 19, Ŵ뵿 161-1,-152.6988919,-305.0545685,1.260082671 +ΰӵ,幰,,,-280.0231307,-439.6094122,3.734718749 +17ȣ(),幰,,,43.61010175,-2555.434246,10.2714848 +Ŵõ(),,,,-211.3748931,-324.2852559,2.016098449 +õ(),,,,10.0980771,-2459.483549,13.34468503 +õ(),,,,28.44331462,-2433.708587,13.66731305 +ȸ1(),,,,71.26732008,-2531.17875,12.39197583 +ȸ1(),,,,108.5555676,-2507.595674,13.37028546 +ȸ1(λ),,,,98.89002344,-2513.428321,12.97475476 +ȸõ(),,,,156.6135722,-2752.864405,13.50943036 +ȸõ(),,,,232.7118715,-2733.194393,15.0617146 +ȸõ(λ),,,,170.7372503,-2752.741497,13.51244778 +ȸõ(λ),,,,203.4135321,-2727.038754,14.89475293 +(),,,,231.0249244,-3240.340204,9.542900512 +"(,λ,)",,,,60.78639687,-3243.867529,8.17662091 +(λ),,,,159.7839769,-3239.047905,8.746838043 +ȸͳ(),ͳ,,,-564.2548179,-1925.009409,16.18040272 +ȸͳ(),ͳ,,,-529.036536,-1933.557941,22.58381459 +ȸ,,,,-19.02038509,4.710790739,8.626823852 +忪,,,,66.77359684,-3620.138085,21.01832242 diff --git a/pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값.csv b/pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값.csv new file mode 100644 index 0000000..6e73c02 --- /dev/null +++ b/pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값.csv @@ -0,0 +1,41 @@ +title,category_clean,address_road,address_jibun,lat,lon,z +ѱö忪,幰, Ƹ 166, 426,36.371101,127.421776,14.93833585 +,幰, 1419, 172-4,36.380398,127.422422,17.43774457 +,幰, 761 48, 262-1,36.379428,127.423479,25.45520444 +ȸ,幰, 761 50, 58-4,36.378866,127.423721,22.83119626 +,幰, 1402, 266-22,36.378592,127.421883,11.92308469 +,幰, 1392 19, 269-16,36.377671,127.422335,12.88381619 + ,幰, 741 52, 290-2,36.377714,127.42416,14.40417523 +ֿ÷ƼѳóƮ,幰,, 51-9,36.37701,127.424777,18.89580197 +â,幰, Ƹ 166, 540,36.374582,127.423243,14.899754 +ǥ ,幰, Ƹ 178, 426-1,36.372438,127.423178,14.87806363 +ǥ,幰, Ƹ 178, 426-1,36.372081,127.423092,14.83134885 +ijȽ,幰, ź115ȱ 25, Ŵ뵿 411-50,36.391715,127.415962,23.5801167 +,幰, ź115ȱ 15, Ŵ뵿 411-25,36.391248,127.415945,27.74913449 +ﺸ,幰, Ƹ55 162, Ŵ뵿 446,36.39071,127.414704,2.79518933 +̿,幰, Ƹ55 156, Ŵ뵿 446-4,36.390094,127.414781,3.599010894 +,幰, Ƹ55 126, Ŵ뵿 437-22,36.388126,127.41469,1.855225036 +88ڿ,幰,, 200-1,36.381059,127.420448,21.30201382 + Ʈ,幰, 1397 77, 203-4,36.380154,127.42062,22.22890515 +ȸȭ,幰, ȸ34 83, Ŵ뵿 129-1,36.402127,127.42177,3.29909558 +ڿ,幰, ȸ34 73, Ŵ뵿 143-4,36.401742,127.421464,2.56787152 +ö,幰, ȸ34 19, Ŵ뵿 161-1,36.399513,127.419798,1.260082671 +ΰӵ,幰,,,36.398305,127.418372,3.734718749 +17ȣ(),幰,,,36.379226,127.421877,10.2714848 +Ŵõ(),,,,36.399342,127.419143,2.016098449 +õ(),,,,36.380092,127.421508,13.34468503 +õ(),,,,36.380324,127.421714,13.66731305 +ȸ1(),,,,36.379443,127.422186,12.39197583 +ȸ1(),,,,36.379655,127.422603,13.37028546 +ȸ1(λ),,,,36.379602,127.422495,12.97475476 +ȸõ(),,,,36.377442,127.423126,13.50943036 +ȸõ(),,,,36.377617,127.423975,15.0617146 +ȸõ(λ),,,,36.377443,127.423284,13.51244778 +ȸõ(λ),,,,36.377673,127.423649,14.89475293 +(),,,,36.373047,127.423932,9.542900512 +"(,λ,)",,,,36.373021,127.422035,8.17662091 +(λ),,,,36.373061,127.423138,8.746838043 +ȸͳ(),ͳ,,,36.384931,127.415133,16.18040272 +ȸͳ(),ͳ,,,36.384852,127.415525,22.58381459 +ȸ,,,,36.402299,127.421303,8.626823852 +忪,,,,36.36963,127.422083,21.01832242 diff --git a/pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값_타원체고.csv b/pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값_타원체고.csv new file mode 100644 index 0000000..a7fbf41 --- /dev/null +++ b/pythonsource/input/building/하행)회덕-대전조차장_POI_위경도값_타원체고.csv @@ -0,0 +1,41 @@ +title,category_clean,address_road,address_jibun,lat,lon,z +한국철도공사대전조차장역,지장물,대전 대덕구 아리랑로 166,대전 대덕구 읍내동 426,36.371101,127.421776,40.3873358 +공업사,지장물,대전 대덕구 대전로 1419,대전 대덕구 읍내동 172-4,36.380398,127.422422,42.8867446 +음식점,지장물,대전 대덕구 계족로761번길 48,대전 대덕구 읍내동 262-1,36.379428,127.423479,50.9042044 +교회,지장물,대전 대덕구 계족로761번길 50,대전 대덕구 읍내동 58-4,36.378866,127.423721,48.2801963 +공장,지장물,대전 대덕구 대전로 1402,대전 대덕구 읍내동 266-22,36.378592,127.421883,37.3720847 +음식점,지장물,대전 대덕구 대전로1392번길 19,대전 대덕구 읍내동 269-16,36.377671,127.422335,38.3328162 +오성우산 대전물류센터,지장물,대전 대덕구 계족로741번길 52,대전 대덕구 읍내동 290-2,36.377714,127.42416,39.8531752 +쌍용더플래티넘네이처아파트,지장물,,대전 대덕구 읍내동 51-9,36.37701,127.424777,44.344802 +창원기전,지장물,대전 대덕구 아리랑로 166,대전 대덕구 읍내동 540,36.374582,127.423243,40.348754 +삼표산업 대전공장,지장물,대전 대덕구 아리랑로 178,대전 대덕구 읍내동 426-1,36.372438,127.423178,40.3270636 +삼표레미콘,지장물,대전 대덕구 아리랑로 178,대전 대덕구 읍내동 426-1,36.372081,127.423092,40.2803489 +대전캐노픽스,지장물,대전 대덕구 신탄진로115번안길 25,대전 대덕구 신대동 411-50,36.391715,127.415962,49.0291167 +보명폴딩도어,지장물,대전 대덕구 신탄진로115번안길 15,대전 대덕구 신대동 411-25,36.391248,127.415945,53.1981345 +삼보목재,지장물,대전 대덕구 아리랑로55번길 162,대전 대덕구 신대동 446,36.39071,127.414704,28.2441893 +아이엘케이,지장물,대전 대덕구 아리랑로55번길 156,대전 대덕구 신대동 446-4,36.390094,127.414781,29.0480109 +대우사료공장,지장물,대전 대덕구 아리랑로55번길 126,대전 대덕구 신대동 437-22,36.388126,127.41469,27.304225 +88자원,지장물,,대전 대덕구 읍내동 200-1,36.381059,127.420448,46.7510138 +백송 아파트,지장물,대전 대덕구 대전로1397번길 77,대전 대덕구 읍내동 203-4,36.380154,127.42062,47.6779052 +회덕화물역,지장물,대전 대덕구 회덕로34번길 83,대전 대덕구 신대동 129-1,36.402127,127.42177,28.7480956 +대덕자원,지장물,대전 대덕구 회덕로34번길 73,대전 대덕구 신대동 143-4,36.401742,127.421464,28.0168715 +대전철거,지장물,대전 대덕구 회덕로34번길 19,대전 대덕구 신대동 161-1,36.399513,127.419798,26.7090827 +경부고속도로,지장물,,,36.398305,127.418372,29.1837187 +국도17호선(대전로),지장물,,,36.379226,127.421877,35.7204848 +신대천교(복),교량,,,36.399342,127.419143,27.4650984 +장등천교(상),교량,,,36.380092,127.421508,38.793685 +장등천교(하),교량,,,36.380324,127.421714,39.1163131 +회덕제1가도교(상),교량,,,36.379443,127.422186,37.8409758 +회덕제1가도교(하),교량,,,36.379655,127.422603,38.8192855 +회덕제1가도교(인상),교량,,,36.379602,127.422495,38.4237548 +회덕천교(상),교량,,,36.377442,127.423126,38.9584304 +회덕천교(하),교량,,,36.377617,127.423975,40.5107146 +회덕천교(상인상),교량,,,36.377443,127.423284,38.9614478 +회덕천교(하인상),교량,,,36.377673,127.423649,40.3437529 +법동가도교(하),교량,,,36.373047,127.423932,34.9919005 +"법동가도교(상,인상,고속)",교량,,,36.373021,127.422035,33.6256209 +법동가도교(인상),교량,,,36.373061,127.423138,34.195838 +회덕터널(상),터널,,,36.384931,127.415133,41.6294027 +회덕터널(하),터널,,,36.384852,127.415525,48.0328146 +회덕역,역사,,,36.402299,127.421303,34.0758239 +대전조차장역,역사,,,36.36963,127.422083,46.4673224 diff --git a/pythonsource/input/center.csv b/pythonsource/input/center.csv new file mode 100644 index 0000000..089c98d --- /dev/null +++ b/pythonsource/input/center.csv @@ -0,0 +1,225 @@ +id,lat,lon,ǥ(H),̵(N),Ÿü(h),67.39,41.57029343,,x,y +0,36.4087069,127.4256135,44.5959549,25.449,70.0449549,2.6549549,3.02566147,0.37070657,238176.0008,423480.0717 +1,36.408246,127.4254695,44.15284348,25.449,69.60184348,2.21184348,2.58255005,0.37070657,238163.3099,423428.8698 +2,36.40798608,127.4253798,43.83666611,25.449,69.28566611,1.89566611,2.26637268,0.37070657,238155.3911,423399.9917 +3,36.40754207,127.4251955,43.25563812,25.449,68.70463812,1.31463812,1.68534469,0.37070657,238139.0769,423350.6482 +4,36.40743128,127.4251451,43.20756912,25.449,68.65656912,1.26656912,1.63727569,0.37070657,238134.6102,423338.3342 +5,36.40719869,127.425029,42.92715073,25.449,68.37615073,0.98615073,1.3568573,0.37070657,238124.3099,423312.4784 +6,36.40704302,127.4249459,42.94765854,25.448,68.39565854,1.00565854,1.37736511,0.37170657,238116.932,423295.1713 +7,36.40661489,127.4246681,42.49100494,25.448,67.93900494,0.54900494,0.92071151,0.37170657,238092.2226,423247.5531 +8,36.40648394,127.4245706,42.17842865,25.448,67.62642865,0.23642865,0.60813522,0.37170657,238083.5409,423232.9835 +9,36.40634883,127.4244596,42.3149147,25.447,67.7619147,0.3719147,0.74462127,0.37270657,238073.6501,423217.9469 +10,36.40619865,127.4243362,41.89298248,25.447,67.33998248,-0.05001752,0.32268905,0.37270657,238062.6545,423201.2331 +11,36.40574436,127.4239881,41.52476883,25.446,66.97076883,-0.41923117,-0.0455246,0.37370657,238031.6514,423150.6845 +12,36.40563471,127.4239152,41.60871506,25.446,67.05471506,-0.33528494,0.03842163,0.37370657,238025.1657,423138.4882 +13,36.40561128,127.4238996,41.4198494,25.446,66.8658494,-0.5241506,-0.15044403,0.37370657,238023.7777,423135.8821 +14,36.40558469,127.4238819,41.55545425,25.446,67.00145425,-0.38854575,-0.01483918,0.37370657,238022.203,423132.9245 +15,36.40542242,127.4237564,41.48543549,25.445,66.93043549,-0.45956451,-0.08485794,0.37470657,238011.0246,423114.8684 +16,36.40506118,127.4234769,41.29170227,25.445,66.73670227,-0.65329773,-0.27859116,0.37470657,237986.1291,423074.6725 +17,36.40473806,127.4232272,41.03116226,25.444,66.47516226,-0.91483774,-0.53913117,0.37570657,237963.888,423038.7185 +18,36.40465234,127.4231624,41.08422089,25.444,66.52822089,-0.86177911,-0.48607254,0.37570657,237958.117,423029.1809 +19,36.40431786,127.4229004,40.83958054,25.443,66.28258054,-1.10741946,-0.73071289,0.37670657,237934.7778,422991.9615 +20,36.40387141,127.4225525,40.823349,25.442,66.265349,-1.124651,-0.74694443,0.37770657,237903.7873,422942.2835 +21,36.40368288,127.4224317,40.7629776,25.442,66.2049776,-1.1850224,-0.80731583,0.37770657,237893.0428,422921.3154 +22,36.40366536,127.4224204,40.95827866,25.442,66.40027866,-0.98972134,-0.61201477,0.37770657,237892.0377,422919.3668 +23,36.40361103,127.4223783,40.73271179,25.441,66.17371179,-1.21628821,-0.83758164,0.37870657,237888.2876,422913.3214 +24,36.40277717,127.4217311,41.59788513,25.439,67.03688513,-0.35311487,0.0275917,0.38070657,237830.6362,422820.5363 +25,36.40259122,127.4215646,41.60122681,25.439,67.04022681,-0.34977319,0.03093338,0.38070657,237815.7906,422799.8367 +26,36.4022992,127.4213032,41.19711685,25.438,66.63511685,-0.75488315,-0.37317658,0.38170657,237792.4834,422767.3297 +27,36.40222619,127.4212379,41.42190933,25.438,66.85990933,-0.53009067,-0.1483841,0.38170657,237786.6611,422759.2024 +28,36.40196761,127.4210064,40.89447021,25.437,66.33147021,-1.05852979,-0.67582322,0.38270657,237766.0196,422730.4179 +29,36.4011264,127.4203562,40.86409378,25.435,66.29909378,-1.09090622,-0.70619965,0.38470657,237708.1001,422636.8169 +30,36.40071907,127.420067,40.8819313,25.434,66.3159313,-1.0740687,-0.68836213,0.38570657,237682.3539,422591.5036 +31,36.40059149,127.4199515,40.91270447,25.434,66.34670447,-1.04329553,-0.65758896,0.38570657,237672.0545,422577.3013 +32,36.40051533,127.4198825,40.8580513,25.434,66.2920513,-1.0979487,-0.71224213,0.38570657,237665.9015,422568.8231 +33,36.40033894,127.4197646,40.81824493,25.433,66.25124493,-1.13875507,-0.7520485,0.38670657,237655.4102,422549.2036 +34,36.40033238,127.4197602,40.81824493,25.433,66.25124493,-1.13875507,-0.7520485,0.38670657,237655.0187,422548.474 +35,36.40011674,127.4196154,40.86355209,25.433,66.29655209,-1.09344791,-0.70674134,0.38670657,237642.1332,422524.4885 +36,36.39993958,127.4195258,40.91473389,25.433,66.34773389,-1.04226611,-0.65555954,0.38670657,237634.1809,422504.7946 +37,36.39971165,127.4193717,41.06347656,25.433,66.49647656,-0.89352344,-0.50681687,0.38670657,237620.4669,422479.4418 +38,36.39970146,127.4193606,40.94778442,25.433,66.38078442,-1.00921558,-0.62250901,0.38670657,237619.476,422478.3067 +39,36.39948404,127.4191978,38.53098297,25.432,63.96298297,-3.42701703,-3.03931046,0.38770657,237604.9765,422454.1168 +40,36.39940682,127.4191465,36.66693878,25.432,62.09893878,-5.29106122,-4.90335465,0.38770657,237600.4117,422445.5279 +41,36.39912965,127.4189625,41.26615143,25.432,66.69815143,-0.69184857,-0.304142,0.38770657,237584.0389,422414.6994 +42,36.39894254,127.4188196,41.63571167,25.431,67.06671167,-0.32328833,0.06541824,0.38870657,237571.3097,422393.8807 +43,36.39849481,127.4184778,42.18122101,25.431,67.61222101,0.22222101,0.61092758,0.38870657,237540.8628,422344.0644 +44,36.39797347,127.4180797,42.58108521,25.43,68.01108521,0.62108521,1.01079178,0.38970657,237505.4003,422286.058 +45,36.3970081,127.4172903,43.31628799,25.427,68.74328799,1.35328799,1.74599456,0.39270657,237435.0469,422178.6272 +46,36.39618146,127.4166454,43.1414299,25.426,68.5674299,1.1774299,1.57113647,0.39370657,237377.5885,422086.6474 +47,36.39570053,127.4163161,42.93940353,25.426,68.36540353,0.97540353,1.3691101,0.39370657,237348.2767,422033.1525 +48,36.39552093,127.4162071,43.17940521,25.426,68.60540521,1.21540521,1.60911178,0.39370657,237338.584,422013.1806 +49,36.39498443,127.4159034,43.6729126,25.426,69.0989126,1.7089126,2.10261917,0.39370657,237311.5949,421953.5293 +50,36.39486176,127.415852,43.27485657,25.426,68.70085657,1.31085657,1.70456314,0.39370657,237307.0423,421939.8971 +51,36.39422826,127.415751,47.34189224,25.426,72.76789224,5.37789224,5.77159881,0.39370657,237298.2839,421869.5604 +52,36.39416952,127.4157416,47.3711853,25.427,72.7981853,5.4081853,5.80089187,0.39270657,237297.4687,421863.0385 +53,36.39399658,127.4156931,47.49637604,25.427,72.92337604,5.53337604,5.92608261,0.39270657,237293.2002,421843.8291 +54,36.39340395,127.4156253,47.80435562,25.427,73.23135562,5.84135562,6.23406219,0.39270657,237287.4006,421778.0405 +55,36.39313563,127.4155946,47.86821365,25.428,73.29621365,5.90621365,6.29792022,0.39170657,237284.7746,421748.2539 +56,36.39056499,127.4153107,49.17352295,25.431,74.60452295,7.21452295,7.60322952,0.38870657,237260.5313,421462.8877 +57,36.39036762,127.415278,48.63658905,25.431,74.06758905,6.67758905,7.06629562,0.38870657,237257.6917,421440.9735 +58,36.38926813,127.4151777,49.91009521,25.433,75.34309521,7.95309521,8.33980178,0.38670657,237249.2176,421318.9276 +59,36.38915052,127.4151608,50.16888809,25.433,75.60188809,8.21188809,8.59859466,0.38670657,237247.7574,421305.8702 +60,36.38863739,127.4151122,50.6071434,25.434,76.0411434,8.6511434,9.03684997,0.38570657,237243.6418,421248.9109 +61,36.38740675,127.4150429,50.97354889,25.436,76.40954889,9.01954889,9.40325546,0.38370657,237238.0111,421112.3237 +62,36.38691536,127.4150766,52.17303467,25.437,77.61003467,10.22003467,10.60274124,0.38270657,237241.269,421057.8086 +63,36.3860389,127.4151238,51.46143341,25.438,76.89943341,9.50943341,9.89113998,0.38170657,237245.9219,420960.5686 +64,36.38526003,127.4152376,50.78461838,25.44,76.22461838,8.83461838,9.21432495,0.37970657,237256.504,420874.1836 +65,36.38505349,127.4152947,59.9564476,25.441,85.3974476,18.0074476,18.38615417,0.37870657,237261.7258,420851.2865 +66,36.38419502,127.4155889,85.33042908,25.443,110.7734291,43.38342908,43.76013565,0.37670657,237288.5325,420756.1382 +67,36.38366997,127.4157498,72.45119476,25.444,97.89519476,30.50519476,30.88090133,0.37570657,237303.22,420697.9371 +68,36.38339045,127.4159008,64.00402832,25.445,89.44902832,22.05902832,22.43373489,0.37470657,237316.9021,420666.9779 +69,36.38314509,127.4160974,58.09113693,25.446,83.53713693,16.14713693,16.5208435,0.37370657,237334.6596,420639.827 +70,36.38224378,127.4172973,58.28813934,25.452,83.74013934,16.35013934,16.71784591,0.36770657,237442.7542,420540.2758 +71,36.38170252,127.4183588,59.54457474,25.457,85.00157474,17.61157474,17.97428131,0.36270657,237538.2598,420480.6259 +72,36.38104417,127.4199764,59.53992844,25.466,85.00592844,17.61592844,17.96963501,0.35370657,237683.7213,420408.2006 +73,36.38096833,127.4201627,59.42315292,25.467,84.89015292,17.50015292,17.85285949,0.35270657,237700.4744,420399.8576 +74,36.38087942,127.4203608,58.8523941,25.468,84.3203941,16.9303941,17.28210067,0.35170657,237718.2926,420390.0688 +75,36.38074153,127.4205989,58.97137451,25.469,84.44037451,17.05037451,17.40108108,0.35070657,237739.7237,420374.8606 +76,36.38024182,127.4214679,56.49552536,25.473,81.96852536,14.57852536,14.92523193,0.34670657,237817.9401,420319.7492 +77,36.38022753,127.4214818,56.49552536,25.474,81.96952536,14.57952536,14.92523193,0.34570657,237819.1943,420318.1689 +78,36.38012786,127.4216204,50.14168167,25.474,75.61568167,8.22568167,8.57138824,0.34570657,237831.6791,420307.1631 +79,36.38006521,127.4216876,50.59542847,25.475,76.07042847,8.68042847,9.02513504,0.34470657,237837.7393,420300.2373 +80,36.38006399,127.4216889,50.59542847,25.475,76.07042847,8.68042847,9.02513504,0.34470657,237837.8565,420300.1025 +81,36.37988367,127.4219199,57.89454651,25.476,83.37054651,15.98054651,16.32425308,0.34370657,237858.6715,420280.1834 +82,36.3798252,127.4219776,57.80186081,25.476,83.27786081,15.88786081,16.23156738,0.34370657,237863.8773,420273.7178 +83,36.37978972,127.4220173,57.65145874,25.476,83.12745874,15.73745874,16.08116531,0.34370657,237867.4567,420269.7962 +84,36.37962201,127.4222052,54.06899643,25.477,79.54599643,12.15599643,12.498703,0.34270657,237884.3984,420251.2597 +85,36.37956504,127.4222487,48.96678162,25.478,74.44478162,7.05478162,7.39648819,0.34170657,237888.3293,420244.9549 +86,36.37938553,127.4224278,48.86730576,25.479,74.34630576,6.95630576,7.29701233,0.34070657,237904.4871,420225.1055 +87,36.37932247,127.4224717,53.37725067,25.479,78.85625067,11.46625067,11.80695724,0.34070657,237908.4569,420218.1252 +88,36.37916017,127.4226259,56.55082321,25.48,82.03082321,14.64082321,14.98052978,0.33970657,237922.3721,420200.1758 +89,36.37902074,127.4227186,56.09943008,25.48,81.57943008,14.18943008,14.52913665,0.33970657,237930.7579,420184.74 +90,36.3787154,127.4229403,56.83562851,25.482,82.31762851,14.92762851,15.26533508,0.33770657,237950.7996,420150.9445 +91,36.37839053,127.4231056,56.23346329,25.483,81.71646329,14.32646329,14.66316986,0.33670657,237965.7901,420114.9596 +92,36.37794511,127.423297,55.92332077,25.484,81.40732077,14.01732077,14.35302734,0.33570657,237983.1813,420065.6079 +93,36.37764983,127.4233969,51.13707352,25.484,76.62107352,9.23107352,9.56678009,0.33570657,237992.2892,420032.8809 +94,36.37761956,127.4234117,50.7040329,25.485,76.1890329,8.7990329,9.13373947,0.33470657,237993.632,420029.5278 +95,36.37740043,127.4234464,53.27496719,25.485,78.75996719,11.36996719,11.70467376,0.33470657,237996.8523,420005.2252 +96,36.37735955,127.4234526,55.02401352,25.485,80.50901352,13.11901352,13.45372009,0.33470657,237997.4285,420000.6913 +97,36.37689308,127.4235306,54.34658813,25.486,79.83258813,12.44258813,12.7762947,0.33370657,238004.6546,419948.9593 +98,36.37680543,127.423525,54.22592926,25.486,79.71192926,12.32192926,12.65563583,0.33370657,238004.1948,419939.2308 +99,36.37669421,127.4235331,54.29218292,25.486,79.77818292,12.38818292,12.72188949,0.33370657,238004.9757,419926.8923 +100,36.37638873,127.4235552,54.00867844,25.486,79.49467844,12.10467844,12.43838501,0.33370657,238007.1074,419893.0028 +101,36.37628055,127.423563,54.09650803,25.486,79.58250803,12.19250803,12.5262146,0.33370657,238007.86,419881.0015 +102,36.37616516,127.4235585,54.11535645,25.486,79.60135645,12.21135645,12.54506302,0.33370657,238007.5123,419868.1952 +103,36.37610291,127.4235459,54.13011551,25.486,79.61611551,12.22611551,12.55982208,0.33370657,238006.412,419861.2826 +104,36.37586476,127.4235339,53.88108063,25.486,79.36708063,11.97708063,12.3107872,0.33370657,238005.451,419834.8511 +105,36.37579755,127.423535,53.98939514,25.486,79.47539514,12.08539514,12.41910171,0.33370657,238005.5824,419827.3935 +106,36.37573713,127.4235288,54.19614792,25.486,79.68214792,12.29214792,12.62585449,0.33370657,238005.0555,419820.6864 +107,36.37571155,127.423522,53.85792923,25.486,79.34392923,11.95392923,12.2876358,0.33370657,238004.4577,419817.8452 +108,36.37549001,127.423501,54.22356796,25.486,79.70956796,12.31956796,12.65327453,0.33370657,238002.681,419793.2533 +109,36.37541847,127.4234946,54.19550323,25.486,79.68150323,12.29150323,12.6252098,0.33370657,238002.1415,419785.3122 +110,36.37538552,127.4234902,54.16474533,25.486,79.65074533,12.26074533,12.5944519,0.33370657,238001.7627,419781.6541 +111,36.37536502,127.4234877,54.13046646,25.486,79.61646646,12.22646646,12.56017303,0.33370657,238001.5484,419779.3783 +112,36.37532988,127.4234841,54.13046646,25.486,79.61646646,12.22646646,12.56017303,0.33370657,238001.2424,419775.4775 +113,36.37514465,127.423456,54.04568863,25.486,79.53168863,12.14168863,12.4753952,0.33370657,237998.811,419754.9121 +114,36.37506757,127.4234428,54.01882553,25.486,79.50482553,12.11482553,12.4485321,0.33370657,237997.6639,419746.3536 +115,36.37503558,127.4234333,53.98856735,25.486,79.47456735,12.08456735,12.41827392,0.33370657,237996.827,419742.8 +116,36.37500016,127.4234283,53.96323395,25.486,79.44923395,12.05923395,12.39294052,0.33370657,237996.3956,419738.8676 +117,36.37496874,127.4234238,53.96323395,25.486,79.44923395,12.05923395,12.39294052,0.33370657,237996.007,419735.3792 +118,36.37495222,127.4234191,53.93666458,25.486,79.42266458,12.03266458,12.36637115,0.33370657,237995.5933,419733.5442 +119,36.37483107,127.4233925,53.77856445,25.486,79.26456445,11.87456445,12.20827102,0.33370657,237993.2653,419720.0901 +120,36.37472913,127.4233604,53.7809639,25.486,79.2669639,11.8769639,12.21067047,0.33370657,237990.4343,419708.7655 +121,36.37419181,127.4232687,53.59219742,25.486,79.07819742,11.68819742,12.02190399,0.33370657,237982.4668,419649.1048 +122,36.37418735,127.4232673,53.59219742,25.486,79.07819742,11.68819742,12.02190399,0.33370657,237982.3433,419648.6093 +123,36.37409419,127.4232387,53.48587036,25.486,78.97187036,11.58187036,11.91557693,0.33370657,237979.8221,419638.2604 +124,36.37396916,127.4232126,54.04447937,25.486,79.53047937,12.14047937,12.47418594,0.33370657,237977.5408,419624.3759 +125,36.37389533,127.4231911,56.30555725,25.486,81.79155725,14.40155725,14.73526382,0.33370657,237975.6473,419616.1748 +126,36.37337734,127.4230781,55.09450912,25.486,80.58050912,13.19050912,13.52421569,0.33370657,237965.7588,419558.6507 +127,36.37329854,127.4230637,54.96466064,25.486,80.45066064,13.06066064,13.39436721,0.33370657,237964.5048,419549.9008 +128,36.37294774,127.4229921,45.18955231,25.485,70.67455231,3.28455231,3.61925888,0.33470657,237958.2501,419510.9455 +129,36.37284214,127.4229663,53.25004959,25.485,78.73504959,11.34504959,11.67975616,0.33470657,237955.9861,419499.2173 +130,36.37266553,127.4229029,53.61932373,25.485,79.10432373,11.71432373,12.0490303,0.33470657,237950.3825,419479.5945 +131,36.37238859,127.4228433,53.58890533,25.485,79.07390533,11.68390533,12.0186119,0.33470657,237945.1686,419448.84 +132,36.37221666,127.4228004,53.70202637,25.485,79.18702637,11.79702637,12.13173294,0.33470657,237941.4023,419429.7446 +133,36.37189658,127.4227334,53.49817657,25.485,78.98317657,11.59317657,11.92788314,0.33470657,237935.5452,419394.2 +134,36.37172442,127.4226916,53.52459335,25.485,79.00959335,11.61959335,11.95429992,0.33470657,237931.8777,419375.0796 +135,36.37152283,127.4226431,53.41849518,25.485,78.90349518,11.51349518,11.84820175,0.33470657,237927.6232,419352.6907 +136,36.37146718,127.4226286,53.41088104,25.484,78.89488104,11.50488104,11.84058761,0.33570657,237926.349,419346.5097 +137,36.37134071,127.4225957,53.45143509,25.484,78.93543509,11.54543509,11.88114166,0.33570657,237923.4579,419332.4629 +138,36.37132619,127.4225919,53.45143509,25.484,78.93543509,11.54543509,11.88114166,0.33570657,237923.124,419330.8501 +139,36.37114463,127.422546,53.31612778,25.484,78.80012778,11.41012778,11.74583435,0.33570657,237919.093,419310.685 +140,36.37088129,127.4224792,53.46446228,25.484,78.94846228,11.55846228,11.89416885,0.33570657,237913.2262,419281.4368 +141,36.3708327,127.4224669,53.47537994,25.484,78.95937994,11.56937994,11.90508651,0.33570657,237912.1459,419276.0401 +142,36.37075141,127.4224429,53.46264648,25.484,78.94664648,11.55664648,11.89235305,0.33570657,237910.0316,419267.0102 +143,36.37056365,127.4223929,53.47391891,25.484,78.95791891,11.56791891,11.90362548,0.33570657,237905.6357,419246.1554 +144,36.3703695,127.4223379,53.34194183,25.484,78.82594183,11.43594183,11.7716484,0.33570657,237900.7941,419224.5896 +145,36.37024013,127.4223006,53.54463196,25.484,79.02863196,11.63863196,11.97433853,0.33570657,237897.5095,419210.2192 +146,36.37002104,127.4222041,53.2318573,25.483,78.7148573,11.3248573,11.66156387,0.33670657,237888.9557,419185.8697 +147,36.36998007,127.4221915,53.21572113,25.483,78.69872113,11.30872113,11.6454277,0.33670657,237887.8449,419181.3184 +148,36.36986554,127.4221565,53.491539,25.483,78.974539,11.584539,11.92124557,0.33670657,237884.7594,419168.5957 +149,36.36964157,127.4220867,53.58861542,25.483,79.07161542,11.68161542,12.01832199,0.33670657,237878.6041,419143.7151 +150,36.36963046,127.422083,53.58861542,25.483,79.07161542,11.68161542,12.01832199,0.33670657,237878.2774,419142.4808 +151,36.3695557,127.4220581,53.59433365,25.483,79.07733365,11.68733365,12.02404022,0.33670657,237876.0791,419134.1752 +152,36.36954338,127.4220544,53.59433365,25.483,79.07733365,11.68733365,12.02404022,0.33670657,237875.753,419132.8066 +153,36.36948571,127.422037,53.56835175,25.483,79.05135175,11.66135175,11.99805832,0.33670657,237874.2194,419126.4003 +154,36.36926853,127.4219859,53.58152771,25.483,79.06452771,11.67452771,12.01123428,0.33670657,237869.7389,419102.2805 +155,36.36923386,127.4219776,53.60071564,25.483,79.08371564,11.69371564,12.03042221,0.33670657,237869.0108,419098.4301 +156,36.36898828,127.421916,53.26034164,25.483,78.74334164,11.35334164,11.69004821,0.33670657,237863.6017,419071.1547 +157,36.36889178,127.4218858,53.27832031,25.482,78.76032031,11.37032031,11.70802688,0.33770657,237860.9382,419060.4346 +158,36.36863091,127.4218064,53.42208862,25.482,78.90408862,11.51408862,11.85179519,0.33770657,237853.939,419031.4556 +159,36.36852491,127.4217728,53.25052261,25.482,78.73252261,11.34252261,11.68022918,0.33770657,237850.975,419019.6799 +160,36.368275,127.4216997,53.42486954,25.482,78.90686954,11.51686954,11.85457611,0.33770657,237844.5358,418991.9196 +161,36.36811583,127.4216423,53.20927429,25.482,78.69127429,11.30127429,11.63898086,0.33770657,237839.4616,418974.2345 +162,36.36809035,127.4216331,53.20927429,25.482,78.69127429,11.30127429,11.63898086,0.33770657,237838.6483,418971.4035 +163,36.36794963,127.4215823,53.27620697,25.482,78.75820697,11.36820697,11.70591354,0.33770657,237834.1575,418955.7684 +164,36.36785171,127.421547,53.64022446,25.482,79.12222446,11.73222446,12.06993103,0.33770657,237831.0369,418944.8887 +165,36.36781128,127.4215299,53.65616226,25.482,79.13816226,11.74816226,12.08586883,0.33770657,237829.5219,418940.3956 +166,36.36773201,127.4215061,53.46281433,25.482,78.94481433,11.55481433,11.8925209,0.33770657,237827.4244,418931.59 +167,36.36744901,127.4214266,53.37786484,25.481,78.85886484,11.46886484,11.80757141,0.33870657,237820.4267,418900.1553 +168,36.3673742,127.4214036,53.50073242,25.481,78.98173242,11.59173242,11.93043899,0.33870657,237818.3988,418891.8448 +169,36.36727257,127.4213725,53.53074646,25.481,79.01174646,11.62174646,11.96045303,0.33870657,237815.6569,418880.5551 +170,36.36697951,127.4212821,53.46721268,25.481,78.94821268,11.55821268,11.89691925,0.33870657,237807.6858,418847.9998 +171,36.36678367,127.421224,53.54465866,25.481,79.02565866,11.63565866,11.97436523,0.33870657,237802.5664,418826.2454 +172,36.36649705,127.421134,53.74835205,25.481,79.22935205,11.83935205,12.17805862,0.33870657,237794.6279,418794.4049 +173,36.36622746,127.4210474,53.50355148,25.481,78.98455148,11.59455148,11.93325805,0.33870657,237786.9863,418764.4555 +174,36.36617757,127.4210351,53.47144699,25.481,78.95244699,11.56244699,11.90115356,0.33870657,237785.9066,418758.9146 +175,36.36599476,127.4209757,53.389328,25.481,78.870328,11.480328,11.81903457,0.33870657,237780.6641,418738.6055 +176,36.36592042,127.4209598,53.53152847,25.481,79.01252847,11.62252847,11.96123504,0.33870657,237779.273,418730.35 +177,36.36557559,127.4208556,53.51815033,25.481,78.99915033,11.60915033,11.9478569,0.33870657,237770.0882,418692.0447 +178,36.36543876,127.4208146,53.28448486,25.481,78.76548486,11.37548486,11.71419143,0.33870657,237766.4747,418676.8451 +179,36.36538894,127.420799,53.44216156,25.481,78.92316156,11.53316156,11.87186813,0.33870657,237765.0987,418671.3106 +180,36.36528417,127.4207745,53.3886528,25.481,78.8696528,11.4796528,11.81835937,0.33870657,237762.9505,418659.675 +181,36.36510399,127.4207183,53.25595474,25.481,78.73695474,11.34695474,11.68566131,0.33870657,237757.9938,418639.6591 +182,36.36499276,127.4206764,53.24317551,25.481,78.72417551,11.33417551,11.67288208,0.33870657,237754.2871,418627.2999 +183,36.36484026,127.4206282,53.37047958,25.481,78.85147958,11.46147958,11.80018615,0.33870657,237750.035,418610.3587 +184,36.36475767,127.4205959,53.42734146,25.481,78.90834146,11.51834146,11.85704803,0.33870657,237747.1761,418601.1813 +185,36.36418056,127.4203704,53.45589828,25.48,78.93589828,11.54589828,11.88560485,0.33970657,237727.2166,418537.0533 +186,36.36402718,127.4203104,53.42592239,25.48,78.90592239,11.51592239,11.85562896,0.33970657,237721.9058,418520.0098 +187,36.3637957,127.4202041,53.32323456,25.48,78.80323456,11.41323456,11.75294113,0.33970657,237712.4772,418494.2817 +188,36.36369089,127.420156,53.40998459,25.48,78.88998459,11.49998459,11.83969116,0.33970657,237708.2109,418482.6325 +189,36.36309743,127.4198833,53.41979218,25.479,78.89879218,11.50879218,11.84949875,0.34070657,237684.0226,418416.6719 +190,36.36212117,127.4194139,53.68809891,25.478,79.16609891,11.77609891,12.11780548,0.34170657,237642.3645,418308.1567 +191,36.36157235,127.4191454,53.42456818,25.478,78.90256818,11.51256818,11.85427475,0.34170657,237618.5306,418247.1514 +192,36.36142831,127.4190749,53.41180038,25.477,78.88880038,11.49880038,11.84150695,0.34270657,237612.2725,418231.1404 +193,36.36055967,127.4187004,53.5123024,25.477,78.9893024,11.5993024,11.94200897,0.34270657,237579.0783,418134.6046 +194,36.36037084,127.4186082,53.36859131,25.476,78.84459131,11.45459131,11.79829788,0.34370657,237570.8939,418113.615 +195,36.36011013,127.4184809,53.29519272,25.476,78.77119272,11.38119272,11.72489929,0.34370657,237559.5937,418084.6354 +196,36.36007387,127.4184644,53.29519272,25.476,78.77119272,11.38119272,11.72489929,0.34370657,237558.1302,418080.6053 +197,36.35847655,127.4177903,46.75944519,25.475,72.23444519,4.84444519,5.18915176,0.34470657,237498.3941,417903.0945 +198,36.35821646,127.4176806,51.53353119,25.474,77.00753119,9.61753119,9.96323776,0.34570657,237488.6728,417874.1906 +199,36.358179,127.4176583,51.53353119,25.474,77.00753119,9.61753119,9.96323776,0.34570657,237486.6892,417870.0251 +200,36.35781773,127.417527,51.11881256,25.474,76.59281256,9.20281256,9.54851913,0.34570657,237475.0776,417829.8853 +201,36.35750462,127.4174362,50.66068649,25.474,76.13468649,8.74468649,9.09039306,0.34570657,237467.0778,417795.1054 +202,36.35745961,127.4174231,50.5848732,25.474,76.0588732,8.6688732,9.01457977,0.34570657,237465.9236,417790.1057 +203,36.35715403,127.4173535,50.41460037,25.474,75.88860037,8.49860037,8.84430694,0.34570657,237459.823,417756.1696 +204,36.35680229,127.4172756,49.77857971,25.474,75.25257971,7.86257971,8.20828628,0.34570657,237452.9996,417717.1081 +205,36.35668056,127.4172486,49.61360931,25.474,75.08760931,7.69760931,8.04331588,0.34570657,237450.6344,417703.5896 +206,36.35645932,127.4172542,49.47008896,25.475,74.94508896,7.55508896,7.89979553,0.34470657,237451.2431,417679.0416 +207,36.3563789,127.4172551,49.41373444,25.475,74.88873444,7.49873444,7.84344101,0.34470657,237451.3624,417670.118 +208,36.35601512,127.4172589,49.23891449,25.475,74.71391449,7.32391449,7.66862106,0.34470657,237451.8777,417629.7521 +209,36.3556022,127.4172727,48.82962036,25.476,74.30562036,6.91562036,7.25932693,0.34370657,237453.3142,417583.9371 +210,36.35511251,127.4173598,47.97132111,25.477,73.44832111,6.05832111,6.40102768,0.34270657,237461.3668,417529.6317 +211,36.35454842,127.4174923,47.38679123,25.478,72.86479123,5.47479123,5.8164978,0.34170657,237473.5301,417467.088 +212,36.35426029,127.4175824,47.28036118,25.479,72.75936118,5.36936118,5.71006775,0.34070657,237481.7556,417435.1502 +213,36.35407392,127.4176626,47.15336227,25.479,72.63236227,5.24236227,5.58306884,0.34070657,237489.0436,417414.5005 +214,36.35379022,127.4178076,46.89318466,25.48,72.37318466,4.98318466,5.32289123,0.33970657,237502.1949,417383.0755 +215,36.3534406,127.4180014,47.07096863,25.482,72.55296863,5.16296863,5.5006752,0.33770657,237519.7581,417344.3546 +216,36.35305816,127.4182339,46.76593781,25.483,72.24893781,4.85893781,5.19564438,0.33670657,237540.811,417302.0069 +217,36.35244835,127.4186406,46.82806015,25.486,72.31406015,4.92406015,5.25776672,0.33370657,237577.6098,417234.4965 +218,36.35188261,127.419022,47.00273514,25.489,72.49173514,5.10173514,5.43244171,0.33070657,237612.117,417171.8667 +219,36.35088673,127.4197025,47.42319489,25.494,72.91719489,5.52719489,5.85290146,0.32570657,237673.68,417061.6225 +220,36.35048928,127.4199994,47.70178986,25.496,73.19778986,5.80778986,6.13149643,0.32370657,237700.5223,417017.6346 +221,36.35001437,127.4203669,48.15553284,25.498,73.65353284,6.26353284,6.58523941,0.32170657,237733.7397,416965.079 +222,36.34968947,127.4206222,48.69305801,25.5,74.19305801,6.80305801,7.12276458,0.31970657,237756.8134,416929.1257 +223,36.3494895,127.4207875,48.82459641,25.501,74.32559641,6.93559641,7.25430298,0.31870657,237771.7481,416907.0003 diff --git a/pythonsource/streamlined_tuner.spec b/pythonsource/streamlined_tuner.spec new file mode 100644 index 0000000..533e4e4 --- /dev/null +++ b/pythonsource/streamlined_tuner.spec @@ -0,0 +1,45 @@ +# -*- mode: python ; coding: utf-8 -*- +from PyInstaller.utils.hooks import collect_all + +datas = [] +binaries = [] +hiddenimports = [] +tmp_ret = collect_all('pyproj') +datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2] + + +a = Analysis( + ['advanced_tuner_v2.py'], + pathex=[], + binaries=binaries, + datas=datas, + hiddenimports=hiddenimports, + hookspath=[], + hooksconfig={}, + runtime_hooks=[], + excludes=[], + noarchive=False, + optimize=0, +) +pyz = PYZ(a.pure) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.datas, + [], + name='streamlined_tuner', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=False, + disable_windowed_traceback=False, + argv_emulation=False, + target_arch=None, + codesign_identity=None, + entitlements_file=None, +) diff --git a/pythonsource/캡처.png b/pythonsource/캡처.png new file mode 100644 index 0000000000000000000000000000000000000000..0470c11585a0436978fadcf923c329ecdbb2297d GIT binary patch literal 81400 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 G|NjE&iKE8= literal 0 HcmV?d00001 diff --git a/storage/baeksong.json b/storage/baeksong.json new file mode 100644 index 0000000..4f67412 --- /dev/null +++ b/storage/baeksong.json @@ -0,0 +1 @@ +{"poi":{"title":"백송 아파트","category":"지장물","lat":36.380154,"lon":127.42062,"z":22.22890515,"type":"poi"},"frames":[{"frame":13328,"time":444.26666666666665,"bearingDiff":2.416515832319874,"elevationDiff":15.419007353837134,"distance":378.8223157131149,"pixelX":0.5327708508378821,"pixelY":0.2097877348126167,"groupSize":10523,"groupStart":13328,"groupEnd":3877},{"frame":372,"time":12.4,"bearingDiff":-0.3950378036713573,"elevationDiff":28.313526733811663,"distance":2466.701205588134,"pixelX":0.49464281393637277,"pixelY":0,"groupSize":1993,"groupStart":372,"groupEnd":254}]} \ No newline at end of file diff --git a/storage/baeksong2.json b/storage/baeksong2.json new file mode 100644 index 0000000..2b4326c --- /dev/null +++ b/storage/baeksong2.json @@ -0,0 +1 @@ +{"poi":{"title":"백송 아파트","category":"지장물","lat":36.380154,"lon":127.42062,"z":22.22890515,"type":"poi"},"frames":[{"frame":13328,"time":444.26666666666665,"bearingDiff":2.416515832319874,"elevationDiff":15.419007353837134,"distance":378.8223157131149,"pixelX":0.5327708508378821,"pixelY":0.2097877348126167,"groupSize":5696,"groupStart":8612,"groupEnd":14315}]} \ No newline at end of file diff --git a/storage/geo_result.json b/storage/geo_result.json new file mode 100644 index 0000000..4613e65 --- /dev/null +++ b/storage/geo_result.json @@ -0,0 +1 @@ +{"poi":{"title":"회덕역","category":"역사","lat":36.402299,"lon":127.421303,"z":8.626823852,"type":"poi"},"frames":[{"frame":2999,"time":99.96666666666667,"bearingDiff":-0.9585235927831377,"elevationDiff":0.06681769990423447,"distance":163.52956276077978,"pixelX":0.48700127130823234,"pixelY":0.4987423758482745,"groupSize":1070,"groupStart":2999,"groupEnd":2355}]} \ No newline at end of file diff --git a/storage/pois.json b/storage/pois.json new file mode 100644 index 0000000..f1a7987 --- /dev/null +++ b/storage/pois.json @@ -0,0 +1 @@ +[{"title":"한국철도공사대전조차장역","category":"지장물","lat":36.371101,"lon":127.421776,"z":14.93833585,"type":"poi"},{"title":"공업사","category":"지장물","lat":36.380398,"lon":127.422422,"z":17.43774457,"type":"poi"},{"title":"음식점","category":"지장물","lat":36.379428,"lon":127.423479,"z":25.45520444,"type":"poi"},{"title":"교회","category":"지장물","lat":36.378866,"lon":127.423721,"z":22.83119626,"type":"poi"},{"title":"공장","category":"지장물","lat":36.378592,"lon":127.421883,"z":11.92308469,"type":"poi"},{"title":"음식점","category":"지장물","lat":36.377671,"lon":127.422335,"z":12.88381619,"type":"poi"},{"title":"오성우산 대전물류센터","category":"지장물","lat":36.377714,"lon":127.42416,"z":14.40417523,"type":"poi"},{"title":"쌍용더플래티넘네이처아파트","category":"지장물","lat":36.37701,"lon":127.424777,"z":18.89580197,"type":"poi"},{"title":"창원기전","category":"지장물","lat":36.374582,"lon":127.423243,"z":14.899754,"type":"poi"},{"title":"삼표산업 대전공장","category":"지장물","lat":36.372438,"lon":127.423178,"z":14.87806363,"type":"poi"},{"title":"삼표레미콘","category":"지장물","lat":36.372081,"lon":127.423092,"z":14.83134885,"type":"poi"},{"title":"대전캐노픽스","category":"지장물","lat":36.391715,"lon":127.415962,"z":23.5801167,"type":"poi"},{"title":"보명폴딩도어","category":"지장물","lat":36.391248,"lon":127.415945,"z":27.74913449,"type":"poi"},{"title":"삼보목재","category":"지장물","lat":36.39071,"lon":127.414704,"z":2.79518933,"type":"poi"},{"title":"아이엘케이","category":"지장물","lat":36.390094,"lon":127.414781,"z":3.599010894,"type":"poi"},{"title":"대우사료공장","category":"지장물","lat":36.388126,"lon":127.41469,"z":1.855225036,"type":"poi"},{"title":"88자원","category":"지장물","lat":36.381059,"lon":127.420448,"z":21.30201382,"type":"poi"},{"title":"백송 아파트","category":"지장물","lat":36.380154,"lon":127.42062,"z":22.22890515,"type":"poi"},{"title":"회덕화물역","category":"지장물","lat":36.402127,"lon":127.42177,"z":3.29909558,"type":"poi"},{"title":"대덕자원","category":"지장물","lat":36.401742,"lon":127.421464,"z":2.56787152,"type":"poi"},{"title":"대전철거","category":"지장물","lat":36.399513,"lon":127.419798,"z":1.260082671,"type":"poi"},{"title":"경부고속도로","category":"지장물","lat":36.398305,"lon":127.418372,"z":3.734718749,"type":"poi"},{"title":"국도17호선(대전로)","category":"지장물","lat":36.379226,"lon":127.421877,"z":10.2714848,"type":"poi"},{"title":"신대천교(복)","category":"교량","lat":36.399342,"lon":127.419143,"z":2.016098449,"type":"poi"},{"title":"장등천교(상)","category":"교량","lat":36.380092,"lon":127.421508,"z":13.34468503,"type":"poi"},{"title":"장등천교(하)","category":"교량","lat":36.380324,"lon":127.421714,"z":13.66731305,"type":"poi"},{"title":"회덕제1가도교(상)","category":"교량","lat":36.379443,"lon":127.422186,"z":12.39197583,"type":"poi"},{"title":"회덕제1가도교(하)","category":"교량","lat":36.379655,"lon":127.422603,"z":13.37028546,"type":"poi"},{"title":"회덕제1가도교(인상)","category":"교량","lat":36.379602,"lon":127.422495,"z":12.97475476,"type":"poi"},{"title":"회덕천교(상)","category":"교량","lat":36.377442,"lon":127.423126,"z":13.50943036,"type":"poi"},{"title":"회덕천교(하)","category":"교량","lat":36.377617,"lon":127.423975,"z":15.0617146,"type":"poi"},{"title":"회덕천교(상인상)","category":"교량","lat":36.377443,"lon":127.423284,"z":13.51244778,"type":"poi"},{"title":"회덕천교(하인상)","category":"교량","lat":36.377673,"lon":127.423649,"z":14.89475293,"type":"poi"},{"title":"법동가도교(하)","category":"교량","lat":36.373047,"lon":127.423932,"z":9.542900512,"type":"poi"},{"title":"법동가도교(상,인상,고속)","category":"교량","lat":36.373021,"lon":127.422035,"z":8.17662091,"type":"poi"},{"title":"법동가도교(인상)","category":"교량","lat":36.373061,"lon":127.423138,"z":8.746838043,"type":"poi"},{"title":"회덕터널(상)","category":"터널","lat":36.384931,"lon":127.415133,"z":16.18040272,"type":"poi"},{"title":"회덕터널(하)","category":"터널","lat":36.384852,"lon":127.415525,"z":22.58381459,"type":"poi"},{"title":"회덕역","category":"역사","lat":36.402299,"lon":127.421303,"z":8.626823852,"type":"poi"},{"title":"대전조차장역","category":"역사","lat":36.36963,"lon":127.422083,"z":21.01832242,"type":"poi"},{"title":"157K900","category":"측점","lat":36.40296455,"lon":127.4218765,"z":0.023576703,"type":"station"},{"title":"158K000","category":"측점","lat":36.40222619,"lon":127.4212379,"z":-0.148290668,"type":"station"},{"title":"158K100","category":"측점","lat":36.40149981,"lon":127.4206448,"z":-0.756826434,"type":"station"},{"title":"158K200","category":"측점","lat":36.40075303,"lon":127.4200911,"z":-0.707216296,"type":"station"},{"title":"158K300","category":"측점","lat":36.40000028,"lon":127.4195565,"z":-0.678056751,"type":"station"},{"title":"158K400","category":"측점","lat":36.39923934,"lon":127.4190353,"z":-0.312562976,"type":"station"},{"title":"158K500","category":"측점","lat":36.39849457,"lon":127.4184776,"z":0.611021008,"type":"station"},{"title":"158k600","category":"측점","lat":36.39775789,"lon":127.4179034,"z":1.283609357,"type":"station"},{"title":"158k700","category":"측점","lat":36.39703149,"lon":127.4173094,"z":1.284124341,"type":"station"},{"title":"158k800","category":"측점","lat":36.39629528,"lon":127.4167342,"z":1.834588971,"type":"station"},{"title":"158k900","category":"측점","lat":36.39553306,"lon":127.4162145,"z":1.609205212,"type":"station"},{"title":"159k000","category":"측점","lat":36.39472513,"lon":127.4158302,"z":4.270502057,"type":"station"},{"title":"159k100","category":"측점","lat":36.39386389,"lon":127.4156779,"z":6.019655194,"type":"station"},{"title":"159k200","category":"측점","lat":36.39299675,"lon":127.4155792,"z":6.22390553,"type":"station"},{"title":"159k300","category":"측점","lat":36.3921294,"lon":127.4154835,"z":6.181451764,"type":"station"},{"title":"159k400","category":"측점","lat":36.39126205,"lon":127.4153877,"z":6.39105412,"type":"station"},{"title":"159k500","category":"측점","lat":36.39039554,"lon":127.4152826,"z":7.06638905,"type":"station"},{"title":"159k600","category":"측점","lat":36.38952728,"lon":127.4152013,"z":8.676607098,"type":"station"},{"title":"159k700","category":"측점","lat":36.38865941,"lon":127.4151143,"z":8.931806531,"type":"station"},{"title":"159k800","category":"측점","lat":36.38778955,"lon":127.4150644,"z":9.882272687,"type":"station"},{"title":"159k900","category":"측점","lat":36.3869199,"lon":127.4150763,"z":10.60283467,"type":"station"},{"title":"160k000","category":"측점","lat":36.38604992,"lon":127.4151232,"z":9.891233411,"type":"station"},{"title":"160k100","category":"측점","lat":36.38518637,"lon":127.4152579,"z":10.30196568,"type":"station"},{"title":"160k200","category":"측점","lat":36.38434553,"lon":127.4155373,"z":38.92352864,"type":"station"},{"title":"160k300","category":"측점","lat":36.3835108,"lon":127.4158358,"z":32.04822346,"type":"station"},{"title":"160k400","category":"측점","lat":36.38284078,"lon":127.4165025,"z":15.85750004,"type":"station"},{"title":"160k500","category":"측점","lat":36.38224812,"lon":127.4172915,"z":16.71793934,"type":"station"},{"title":"160k600","category":"측점","lat":36.3817827,"lon":127.4182016,"z":17.92084691,"type":"station"},{"title":"160k700","category":"측점","lat":36.38137859,"lon":127.4191547,"z":17.75181004,"type":"station"},{"title":"160k800","category":"측점","lat":36.38098707,"lon":127.4201167,"z":17.63405415,"type":"station"},{"title":"160k900","category":"측점","lat":36.38050443,"lon":127.4210112,"z":16.61579701,"type":"station"},{"title":"161k000","category":"측점","lat":36.37994943,"lon":127.4218357,"z":15.94836613,"type":"station"},{"title":"161k100","category":"측점","lat":36.37927713,"lon":127.4225148,"z":14.58936116,"type":"station"},{"title":"161k200","category":"측점","lat":36.37852031,"lon":127.4230395,"z":14.00062367,"type":"station"},{"title":"161k300","category":"측점","lat":36.37769537,"lon":127.4233815,"z":10.50074574,"type":"station"},{"title":"161k400","category":"측점","lat":36.37683495,"lon":127.4235269,"z":12.68091389,"type":"station"},{"title":"161k500","category":"측점","lat":36.37596609,"lon":127.423539,"z":12.3589153,"type":"station"},{"title":"161k600","category":"측점","lat":36.37509924,"lon":127.4234482,"z":12.44862553,"type":"station"},{"title":"161k700","category":"측점","lat":36.3742403,"lon":127.423277,"z":12.05753514,"type":"station"},{"title":"161k800","category":"측점","lat":36.37338461,"lon":127.4230796,"z":13.52430912,"type":"station"},{"title":"161k900","category":"측점","lat":36.37253087,"lon":127.4228739,"z":12.0263538,"type":"station"},{"title":"162k000","category":"측점","lat":36.37167446,"lon":127.4226795,"z":11.82195851,"type":"station"},{"title":"162k100","category":"측점","lat":36.37082138,"lon":127.4224635,"z":11.91039082,"type":"station"},{"title":"162k200","category":"측점","lat":36.36998007,"lon":127.4221915,"z":11.64552113,"type":"station"},{"title":"162k300","category":"측점","lat":36.36909361,"lon":127.4219424,"z":11.83502003,"type":"station"}] \ No newline at end of file