반응형
📄 기상청 Grid XY란?
한반도와 서해 5도를 포함한 우리나라와 인근 해역으로 남쪽으로는 이어도, 동쪽으로는 독도, 서쪽 끝으로는 백령도 까지 포함하고 있다. 이 영역은 5km×5km의 격자 간격으로 총 37,697개의 격자를 포함한다. (동서 149개 ×남북 253개).
📄 기상청 Grid XY Swift Source Code
fileprivate struct lamc_parameter
{
var Re:Float /* 사용할 지구반경 [Km] */
var grid:Float /* 격자간격 [Km] */
var slat1:Float /* 표준위도 [Degree] */
var slat2:Float /* 표준위도 [Degree] */
var olon:Float /* 기준점의 경도 [Degree] */
var olat:Float /* 기준점의 위도 [Degree] */
var xo:Float /* 기준점의 X좌표 [격자거리] */
var yo:Float /* 기준점의 Y좌표 [격자거리] */
init()
{
self.Re = 6371.00877 // 지도반경
self.grid = 5.0 // 격자간격 (km)
self.slat1 = 30.0 // 표준위도 1
self.slat2 = 60.0 // 표준위도 2
self.olon = 126.0 // 기준점 경도
self.olat = 38.0 // 기준점 위도
self.xo = 210/self.grid // 기준점 X좌표
self.yo = 675/self.grid // 기준점 Y좌표
}
}
class ConvertXY
{
fileprivate var x:Float = 0.0, y:Float = 0.0
fileprivate var map:lamc_parameter = lamc_parameter()
final func convertMap(lon:Double, lat:Double) -> (mapX:Int, mapY:Int)
{
var PI:Double, DEGRAD:Double
var re:Double, olon:Double, olat:Double, sn:Double, sf:Double, ro:Double
var slat1:Double, slat2:Double, ra:Double, theta:Double
PI = asin(1.0) * 2.0
DEGRAD = PI / 180.0
re = Double(self.map.Re / self.map.grid)
slat1 = Double(self.map.slat1) * DEGRAD
slat2 = Double(self.map.slat2) * DEGRAD
olon = Double(self.map.olon) * DEGRAD
olat = Double(self.map.olat) * DEGRAD
sn = tan(PI * 0.25 + slat2 * 0.5) / tan(PI * 0.25 + slat1 * 0.5)
sn = log(cos(slat1) / cos(slat2)) / log(sn)
sf = tan(PI * 0.25 + slat1 * 0.5)
sf = pow(sf, sn) * cos(slat1) / sn
ro = tan(PI * 0.25 + olat * 0.5)
ro = re * sf / pow(ro, sn)
ra = tan(PI * 0.25 + lat * DEGRAD * 0.5)
ra = re * sf / pow(ra, sn)
theta = lon * DEGRAD - olon
if theta > PI { theta -= 2.0 * PI }
if theta < -PI { theta += 2.0 * PI }
theta *= sn
self.x = Float(ra * sin(theta)) + self.map.xo
self.y = Float(ro - ra * cos(theta)) + self.map.yo
return (mapX:Int(self.x + 1.5), mapY:Int(self.y + 1.5))
}
}
🚀 REFERENCE
반응형
'# 애플 [Apple] > iOS' 카테고리의 다른 글
[iOS] 부스트코스 - iOS 프로그래밍 (0) | 2019.06.30 |
---|---|
[iOS] 화면 터치를 통한 Keyboard 내리기 (Close iOS Keyboard by touching anywhere using Swift) (0) | 2019.06.28 |
[iOS] 진동 및 시스템 효과음 (Vibration and System Sound) (0) | 2019.06.27 |
[iOS] UITableView 셀 크기의 맞춰 높이 동적 설정 (Resizing UITableView to fit content) (0) | 2019.06.23 |
[iOS] JSONEncoder / JSONDecoder (0) | 2019.05.01 |
댓글