Referensi | : | Dulu saya ambil dari sini tapi sekarang kok sdh nggak ada. |
Platform | : | Excel |
Lokasi File | : | ada di sini |
Saat pertama kali menulis program ini pada 21 April 2006, tujuannya adalah membuat UDF (User Defined Function) di excel untuk memproyeksi koordinat Lintang Bujur ke North, East dan sebaliknya dari beberapa macam datum dan type sistem proyeksi.
Sampai saat ini baru sampai pada sistem proyeksi traverse mercator, mungkin dari rekan2 sekalian ingin mengembangkan lebih lanjut silahkan.
Pada file excel terlampir dalam project VBA terdapat satu module “mdlProjection” dan satu class “clsTranverseMercator”.
mdlProjection berisi fungsi untuk mendefinisikan parameter transformasi seperti :
Dim FalseEasting As Double, FalseNorthing As Double
Dim k0 As Double, a_ellips As Double, inv_f As Double
Dim LebarZone As Double
Sedangkan clsTranverseMercator berisi fungsi-fungsi proyeksi koordinat dalam Metode TraverseMercator dengang input atau masukan parameter dari module “mslProjectin”
Kode yang ada di “clsTransverseMercator”:
Option Explicit Function GetCentralMeridian(Bujur As Double, ByVal WidthZone As Double) As Double GetCentralMeridian = WidthZone * (Int(Bujur / WidthZone) + 0.5) End Function Function DegreeToRadian(AngleDegree As Double) As Double |
Sengaja dalam fungsi konversi degree ke radian atau sebaliknya tidak menggunakan fungsi bawaan excel =DEGREES() atau =RADIANS() karena apabila program ini dipakai atau dicopy ke visual basic yang bukan excel masih bisa berfungsi.
Fungsi untuk memproyeksi Lintang Bujur ke North, East
Sub TransverseMercator( _ CentralMeridian As Double, LATITUDE As Double, LONGITUDE As Double, _ ScaleFactor As Double, a_ellips As Double, inv_f As Double, _ FalseEast As Double, FalseNorth As Double, _ North As Double, East As Double) Dim Lr As Double, Lg As Double ‘Lr:Latitude in radian,Lg:Longitude in Radian Dim T As Double, C As Double, A As Double, M As Double Dim MA As Double, MB As Double, MC As Double, MD As Double Dim A2 As Double, A3 As Double, A4 As Double, A5 As Double, A6 As Double Y = ScaleFactor * (M + v * Tan(Lr) * (A2 / 2 + Y1 + Y2)) North = FalseNorth + Y |
Fungsi untuk memproyeksikan North, East ke Lintang, Bujur adalah:
Sub InversTransverseMercator(CentralMeridian As Double, LATITUDE As Double, LONGITUDE As Double, _ ScaleFactor As Double, a_ellips As Double, inv_f As Double, _ FalseEast As Double, FalseNorth As Double, _ North As Double, East As Double) Dim f As Double, e2 As Double, e4 As Double, e6 As Double f = 1 / inv_f e2 = 2 * f – f ^ 2 e4 = e2 * e2 e6 = e4 * e2 Dim M1 As Double, MiuA As Double, Miu As Double M1 = (North – FalseNorth) / ScaleFactor MiuA = 1 – e2 / 4 – (3 * e4) / 64 – (5 * e6) / 256 Miu = M1 / (a_ellips * MiuA) Dim e_ As Double, e_2 As Double, e_3 As Double, e_4 As Double e_ = (1 – Sqr(1 – e2)) / (1 + Sqr(1 – e2)) e_2 = e_ * e_ e_3 = e_2 * e_ e_4 = e_3 * e_ Dim Lf As Double, LfA As Double, LfB As Double, LfC As Double, LfD As Double LfA = ((3 * e_ / 2) – (27 * e_3 / 32)) * Sin(2 * Miu) LfB = ((21 * e_2 / 16) – (55 * e_4 / 32)) * Sin(4 * Miu) LfC = ((151 * e_3 / 96)) * Sin(6 * Miu) LfD = ((1097 * e_4 / 512)) * Sin(8 * Miu) Lf = Miu + LfA + LfB + LfC + LfD Dim v_ As Double, p_ As Double Dim D2 As Double, D3 As Double, D4 As Double, D5 As Double, D6 As Double dB = DegreeToRadian(CentralMeridian) LONGITUDE = RadianToDegree(Lg) End Sub |
Contoh penggunaan kedua fungsi tersebut, silahkan buka file terlampir
“semoga bermanfaat”
One thought on “[XLS-MAP-02]: Rumus Proyeksi Traverse Mercator dengan VBA Excel (Macro)”