티스토리 뷰
728x90
반응형

지도 모델링 위에 , 위도경도 맴핑할거.
1. geo - python


import hou
import csv
import os
# =========================================================================
# [설정 1] CSV 파일 경로 (방금 만든 파일 경로로 꼭 확인해주세요!)
file_path = "/Users/l.smin/Downloads/test.csv"
# [설정 2] 제주도 기준값
CENTER_LON = 126.53
CENTER_LAT = 33.50
LON_SCALE = 92700.0 # 경도 1도당 미터
LAT_SCALE = 110900.0 # 위도 1도당 미터
# [설정 3] 유니티 스케일 팩터
UNITY_SCALE = 0.199
# =========================================================================
node = hou.pwd()
geo = node.geometry()
geo.clear()
# -------------------------------------------------------------------------
# 1. 속성 생성 (새로운 컬럼 place_of_death 추가됨)
# -------------------------------------------------------------------------
geo.addAttrib(hou.attribType.Point, "pscale", 0.0) # 점 크기(불확실성)
geo.addAttrib(hou.attribType.Point, "curve_u", 0.0) # 진행률 (0~1)
geo.addAttrib(hou.attribType.Prim, "ID", "") # 문자열 ID
geo.addAttrib(hou.attribType.Prim, "Name", "") # 이름
geo.addAttrib(hou.attribType.Prim, "place_of_death", "") # 사망장소 (새로 추가)
geo.addAttrib(hou.attribType.Prim, "Date_of_death", 0) # 사망날짜 (정수)
# -------------------------------------------------------------------------
# 2. 파일 읽기 및 생성
# -------------------------------------------------------------------------
if not os.path.exists(file_path):
print("❌ 파일 경로 에러: 파일을 찾을 수 없습니다 -> " + file_path)
else:
with open(file_path, 'r', encoding='utf-8-sig') as f:
reader = csv.reader(f)
header = next(reader, None) # 헤더 건너뛰기
# [인덱스 매핑] 총 10개 컬럼
# 0:ID, 1:Name, 2:Start_Lat, 3:Start_Lon, 4:End_Lat, 5:End_Lon
# 6:Uncertainty_Origin, 7:Uncertainty_Death, 8:place_of_death, 9:Date_of_death
count = 0
for row in reader:
# 빈 줄이거나 데이터가 10개 미만이면 건너뜀
if not row or len(row) < 10:
continue
try:
# 좌표 파싱
s_lat = float(row[2])
s_lon = float(row[3])
e_lat = float(row[4])
e_lon = float(row[5])
# 끝점이 0,0이면 데이터 없는 것으로 간주하고 패스
if e_lat == 0.0 and e_lon == 0.0: continue
# 불확실성 데이터 파싱
uncert_origin = float(row[6]) # 시작점 불확실성
uncert_death = float(row[7]) # 끝점 불확실성 (pscale로 사용)
# 추가 정보 파싱
place_val = str(row[8]) # 장소
date_val = int(row[9]) # 날짜
# -------------------------------------------------
# [좌표 변환] 미터 변환 -> 유니티 스케일 적용
# -------------------------------------------------
x1 = (s_lon - CENTER_LON) * LON_SCALE * UNITY_SCALE
z1 = (s_lat - CENTER_LAT) * LAT_SCALE * -1 * UNITY_SCALE
x2 = (e_lon - CENTER_LON) * LON_SCALE * UNITY_SCALE
z2 = (e_lat - CENTER_LAT) * LAT_SCALE * -1 * UNITY_SCALE
# -------------------------------------------------
# [지오메트리 생성] 선 긋기
# -------------------------------------------------
poly = geo.createPolygon()
poly.setIsClosed(False)
# 시작점
pt1 = geo.createPoint()
pt1.setPosition((x1, 2000 * UNITY_SCALE, z1))
pt1.setAttribValue("curve_u", 0.0)
pt1.setAttribValue("pscale", uncert_origin * UNITY_SCALE) # 시작점 불확실성 적용
poly.addVertex(pt1)
# 도착점
pt2 = geo.createPoint()
pt2.setPosition((x2, 2000 * UNITY_SCALE, z2))
pt2.setAttribValue("curve_u", 1.0)
pt2.setAttribValue("pscale", uncert_death * UNITY_SCALE) # 끝점 불확실성 적용
poly.addVertex(pt2)
# -------------------------------------------------
# [정보 입력] Primitive Attribute
# -------------------------------------------------
poly.setAttribValue("ID", row[0])
poly.setAttribValue("Name", row[1])
poly.setAttribValue("place_of_death", place_val)
poly.setAttribValue("Date_of_death", date_val)
count += 1
except ValueError as e:
print(f"데이터 변환 오류 발생: {row} / 사유: {e}")
continue
print(f"✅ 성공: 총 {count}개의 경로를 생성했습니다.")
비율과 모델링. 매칭이 억지스럽다.
match size 중심맞추기
ray 모델링에 쏘기. 이게다임
샘플csv 파일
P01 동쪽이동 33.5300 126.9000 33.4000 126.8500 10 50 구좌읍 19481115
P02 서쪽피난 33.2000 126.2000 33.3000 126.3000 20 100 대정읍 19481201728x90
반응형
'후디니' 카테고리의 다른 글
| houdini to unity 좌표값 보내기 (0) | 2025.12.01 |
|---|---|
| Houdini to Unity : 벡터 필드(Vector Field)/SDF(Signed Distance Field) (1) | 2025.12.01 |
| Houdini(Data Visualization) _ GEO : .shp 데이터 불러오기 / .geoJson (0) | 2025.11.06 |
| houdini - stable diffusion (0) | 2024.02.25 |
| houdini_기초 (1) | 2024.02.25 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Arduino
- DeepLeaning
- sequelize
- opencv
- Unity
- 4d guassian splatting
- krea
- docker
- MCP
- 4dgs
- three.js
- Java
- houdini
- opticalflow
- node.js
- colab
- Python
- VR
- VFXgraph
- 라즈베리파이
- 후디니
- OpenClaw
- TouchDesigner
- Midjourney
- MQTT
- CNC
- Express
- RNN
- 유니티
- AI
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함
반응형

