티스토리 뷰
"""
안녕하세요, doriri입니다.
기상청 API를 사용하려면 일반 위도, 경도가 아닌 행정구역을 나누는 X, Y (GRID) 좌표를 사용해서 변환이 필요한데요,
이 부분에 대하여 기상청에서 Open Source로 제공하고 있어서 그 부분만 가져와서 포스팅해봅니다!
"""
오픈소스 주소 : http://www.kma.go.kr/weather/forecast/digital_forecast.jsp
ex ) http://www.kma.go.kr/weather/forecast/digital_forecast.jsp?x=60&y=127
Python
import math
def grid(v1, v2) :
RE = 6371.00877 # 지구 반경(km)
GRID = 5.0 # 격자 간격(km)
SLAT1 = 30.0 # 투영 위도1(degree)
SLAT2 = 60.0 # 투영 위도2(degree)
OLON = 126.0 # 기준점 경도(degree)
OLAT = 38.0 # 기준점 위도(degree)
XO = 43 # 기준점 X좌표(GRID)
YO = 136 # 기1준점 Y좌표(GRID)
DEGRAD = math.pi / 180.0
RADDEG = 180.0 / math.pi
re = RE / GRID;
slat1 = SLAT1 * DEGRAD
slat2 = SLAT2 * DEGRAD
olon = OLON * DEGRAD
olat = OLAT * DEGRAD
sn = math.tan(math.pi * 0.25 + slat2 * 0.5) / math.tan(math.pi * 0.25 + slat1 * 0.5)
sn = math.log(math.cos(slat1) / math.cos(slat2)) / math.log(sn)
sf = math.tan(math.pi * 0.25 + slat1 * 0.5)
sf = math.pow(sf, sn) * math.cos(slat1) / sn
ro = math.tan(math.pi * 0.25 + olat * 0.5)
ro = re * sf / math.pow(ro, sn);
rs = {};
ra = math.tan(math.pi * 0.25 + (v1) * DEGRAD * 0.5)
ra = re * sf / math.pow(ra, sn)
theta = v2 * DEGRAD - olon
if theta > math.pi :
theta -= 2.0 * math.pi
if theta < -math.pi :
theta += 2.0 * math.pi
theta *= sn
rs['x'] = math.floor(ra * math.sin(theta) + XO + 0.5)
rs['y'] = math.floor(ro - ra * math.cos(theta) + YO + 0.5)
string = "http://www.kma.go.kr/wid/queryDFS.jsp?gridx={0}&gridy={1}".format(
str(rs["x"]).split('.')[0], str(rs["y"]).split('.')[0])
return string
if __name__ == "__main__" :
print grid(37.566826005485716, 126.9786567859313)
"""
감사합니다!
궁금점 및 피드백 사항은 댓글로 달아주세요~
"""
'Python' 카테고리의 다른 글
[Python] 보글 게임 (BOGGLE) (1) | 2016.04.25 |
---|---|
[Python] URL Encoding & Decoding (0) | 2016.04.12 |
[Python] 16진수(Hex) < - > 문자열(String) 변환 (0) | 2016.04.11 |
[Python] 2진수, 8진수, 10진수, 16진수 변환 (0) | 2016.04.11 |
[Python] Open API 활용 ( 역별 승하차 정보 ) (3) | 2016.01.29 |
댓글