Friday, June 8, 2018

Tutorial C# Rotate GMAP.NET Marker from Heading IMU or digital Compass

If you have a marker on Google Map which moves on a flight path/ road track but you want it to rotate when it turns. To rotate the image marker Icon from GMap.NET C#, in first create new class, add public class function named "GMapMarkerPlane"


For icon picture, create the icon and add it into resource folder.


              private readonly Bitmap icon = Resources.planetracker;

In the declaration, create new layer name from GMapOverlay:

             public static GMapOverlay routesoverlay;

Next, in main form create new layer and add it to the gmap:

            routesoverlay = new GMapOverlay("routes");
            gMap.Overlays.Add(routesoverlay);

and then, add the code below in the GPS heading function (use timer 1 second or more):

            routesoverlay.Markers.Clear();

            // Get the most up-to-date data received from the sensor.
            var curMeas = vn200.CurrentMeasurements;

            PointLatLng point = new PointLatLng((float)curMeas.LatitudeLongitudeAltitude.X,
                                                                           (float)curMeas.LatitudeLongitudeAltitude.Y);
            gMap.Position = point;

            var plane = new GMapMarkerPlane(point, (float)curMeas.YawPitchRoll.YawInDegs);
            routesoverlay.Markers.Add(plane);

and finally, the Plane Marker heading will following your heading data sensor.


Keyword: Rotate GMap.NET marker, C#, heading Marker, IMU, google map marker, GPS tracking heading marker.

Tuesday, May 22, 2018

Tutorial Offline Google Map API using GMAP.NET Cached Maps


Pemrograman berbasis peta google map sering dibutuhkan bersamaan dengan penggunaan GPS untuk plotting posisi di peta. Dan juga untuk pemakaian di lapangan menggunakan laptop diperlukan sistem standalone yang tidak perlu terhubung dengan internet, karena kondisi di lapangan yang terkadang sulit untuk mendapatkan sinyal 3G Internet yang bagus.

Pertama kali download data citra dari googlemap menggunakan software Mission Planner pada saat PC masih terkoneksi dengan Internet. Jalankan software "Mission Planner" - pilih tab "Flight Plan" - klik kanan mouse pada center map - pilih "MP Tool" - pilih "Prefetch". Kemudian pilih area yang akan disimpan offline map nya dengan menekan tombol "ALT" + "cursor selected area".

Hasil citra offline map nya secara otomatis akan disimpan di "C:\Program Files (x86)\Mission Planner\gmapcache\TileDBv3". Kemudian copy hasil citra dari offline map ini ke working directory program windows form yang akan digunakan.



Langkah berikutnya adalah menginstal library GMap.NET, ini adalah library yang digunakan untuk menampilkan peta google map yang responsif pada aplikasi pemrograman berbasis web ataupun desktop. Silahkan download library dan source code GMap.NET disini: https://github.com/radioman/greatmaps atau disini untuk mendownload file .zip yang berisi file komponen DLL dan source code yang dibutuhkan: https://codeplexarchive.blob.core.windows.net/archive/projects/greatmaps/greatmaps.zip
 
GMap.NET merupakan library yang sangat bagus dan powerfull, open source/ gratis, bisa digunakan di lintas platform, dan .NET control. Pengguna dapat menggunakan routing, geocoding, dan peta dari Google, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yandex, Mapy.cz pada pemrograman Windows Form & Presentation, support caching dan bisa dijalankan pada windows mobile.

GMap.NET yang digunakan disini adalah versi 1.7, source code juga diberikan pada link diatas, tetapi masih banyak beberapa error perlu untuk didebug supaya bisa jalan normal librarynya. Library DLL yang bisa langsung dipakai adalah "GMap.NET.Core.dll" dan "GMap.NET.WindowsForm.dll". Untuk pertama kali buat project Windows Form pada Visual Studio, di dalam project tersebut buat subfolder baru dan copy DLL diatas kedalamnya.



Kemudian supaya project windows form ini bisa menggunakan komponen baru GMap.NET, anda harus menghubungkan reference project ke file DLL dari GMap.NET. Klik-kanan tab "Reference" di dalam "Solution Explorer" dan pilih "Add Reference". Di dalam dialog "Reference Manager" gunakan "Browse" untuk mencari file DLL dari GMap.NET, dan tambahkan reference tersebut.


Reference baru dari GMap.NET akan muncul sekarang di "Solution Explorer". Sekarang anda sudah siap untuk menggunakan kontrol kode instance dari GMap.NET, akan tetapi GMap.NET Control belum muncul di Toolbox, sehingga belom bisa digunakan pada WinForm.


Untuk menambah GMap.NET ke dalam Toolbox, klik-kanan pada "Toolbox" dan pilih tab "Choose Item". 



Pada dialog "Choose Toolbox", tab ".NET Framework Components", klik "browse" untuk memasukkan file "GMap.NET.WindowsForms.dll" (file GMap.NET DLL yang lainnya tidak perlu)



Setelah itu DLL tersebut akan muncul di list dalam tab ".NET Framework Components". Perhatikan bahwa versi target Framework dari project WinForm ini harus sama dengan versi target Framework dari DLL yang diinstall.


Dalam contoh ini file DLL GMap.NET menggunakan target framework versi ".NET.Framework 4.5", sehingga setting project WinForm harus dipilih target framework versi ".NET.Framework 4.5" juga. Apabila versi target framework tidak sama, akan muncul error message seperti dibawah ini:

 
Untuk merubah versi ".NET framework", pada tab "Solution Explorer" pilih tab "Property", kemudian rubah target framework agar sama dengan target framework nya GMap.NET file DLL yang digunakan.


Setelah proses diatas selesai dan berhasil, tidak ada pesan error lagi yang muncul, maka Toolbox Control baru akan muncul di tab Toolbox, dan siap untuk di drag ke dalam Form.


Langkah selanjutnya adalah menampilkan peta di windows Form. Dari toolbox, pilih "GMapControl" dan drag ke project Form anda, dan peta kosong siap untuk ditampilkan pada project Form. GMap Control hanya menampilkan tanda plus merah kecil di project Form, belum ada peta nya. Dibutuhkan beberapa koding inisialisasi untuk sampai mengeluarkan gambar peta.



Pada window "Property", kita bisa mendefinisikan nama toolbox ini agar lebih sederhana yaitu "gmap", dari nama defaultnya "gMapControl1". Pada property "gmap" ini bisa mengkonfigurasikan pengaturan luar dari peta, tapi bukan pengaturan isi petanya.


Berikut ini adalah beberapa konfigurasi yang bisa dilakukan pada "property" :
  • Bearing - property ini akan memutar peta senilai angka yang disetting ke arah kiri.
  • CanDragMap - apabila diset "true", maka user dapat men "drag" /seret peta menggunakan tombol klik kanan mouse. Defaultnya adalah diset "true".
  • EmptyTileColor - porperty ini untuk memberi warna tile pada gmap apabila tidak mendapatkan gambar dari providernya peta.
  • MarkersEnabled - apabila diset "true",  maka akan ditampilkan semua marker yang didefinisikan user. Defaultnya adalah diset "true". Apabila diset "false" maka meskipun user sudah mendefinisikan marker, dipeta tidak akan muncul markernya.
  • PolygonsEnabled - sama seperti diatas untuk polygon.
  • RoutesEnabled - sama seperti diatas untuk routes.
  • ShowTileGridLines - apabila diset "true", maka GMap.NET akan menampilkan nilai koordinat pada masing-masing tiles.
  • Zoom, MinZoom, dan MaxZoom - Level Zoom pada peta yang bernilai milai 0 (level global) sampai 18 (level jalan kecil). Zoom adalah setting untuk normal zoom level (level 5 untuk level negara), sedangkan MinZoom dan MaxZoom bisa diset dari 0 ke 18 untuk user apabila ingin merubah nilai zoomnya. Zoom dirubah oleh user menggunakan mouse wheel.
Setelah ini barulah masuk ke coding.  Tambahkan code dibawah ini di awal program:

     using GMap.NET.WindowsForms;
     using GMap.NET;
     using GMap.NET.MapProviders;


Kemudian pada awal inisialisasi masukkan kode berikut untuk menentukan lokasi cache file, yaitu lokasi peta google yang sudah tersimpan offline di CPU.


           GMap.NET.GMaps.Instance.PrimaryCache = new SavedOfflineCache();


Selanjutnya masukkan map provider yg sesuai dengan map provider yang sudah disave sewaktu online:


            myGMAP1.MapProvider = GMapProviders.GoogleMap;


Dan kemudian pilih mode aksess ke map provider. Ada tiga pilihan, yaitu "ServerAndCache", "ServerOnly", dan "CacheOnly". Untuk akses ke offline Map, pilih "CacheOnly".


            myGMAP1.Manager.Mode = AccessMode.CacheOnly;

Kemudian lanjut setting posisi awal saat map dibuka, max zoom, min zoom, dan zoom awal saat map dibuka.

            myGMAP1.Position = new PointLatLng(-6.342751, 106.8566351);
            myGMAP1.MinZoom = 0;
            myGMAP1.MaxZoom = 24;
            myGMAP1.Zoom = 18;


Dan project Windows Form siap dijalankan tanpa perlu koneksi internet untuk akses peta Google map nya.


Silahkan ber experiment... apabila ada kendala silahkan diskusi disini....



Keyword: C# GMap.NET offline, GMap.NET Tutorial, cached maps, Offline Map API for C# Desktop, GMap.NET, gmapcache folder, Google Map Tiles, Google Map Offline, google map prefetch offline map, Visual Studio 2012, Windows Form, google map tile prefetch, Caching Google Maps Tiles Locally, Prefetch Offline maps, prefetch a map tile database to the local storage, for use as offline maps.


Wednesday, April 25, 2018

Convert GPS Time of Week and GPS Week Number to Current Datetime (Year, Month, Day, Weekday)


Sistem kalender di GPS menggunakan jumlah minggu (week number) dan jumlah detik dalam seminggu (time second of week) , dihitung sejak waktu "Epoch". Waktu GPS Epoch adalah 6 Januari 1980 waktu 00:00:00. Selanjutnya GPS akan menghitung jumlah setiap minggunya dari waktu "Epoch". Satu minggu "GPS week" ditetapkan mulai hari Minggu. CATATAN: 6 Januari 1980 adalah hari minggu pertama di tahun 1980.

Sistem kalender di komputer UNIX memiliki waktu Epoch 1 Januari 1970 waktu 00:00:00, ISO mendefinisikan minggu pertama tahun ini sebagai "Satu waktu yang berisi hari keempat Januari, yang setara dengan mengatakan bahwa itu adalah minggu pertama yang tumpang tindih dengan tahun baru setidaknya empat hari ".

Arduino library Timelib.h dari PaulStoffregen menggunakan UNIX Epoch Time (01 Jan 1970) , sedangkan GPS Epoch Time adalah 06 January 1980. Untuk itu ditambahkan offset 315964800 detik. Tambahkan lagi offset 7 jam untuk Zona Waktu Lokal Jakarta yaitu WIB, UTC +7.

Data yang diterima dari IMU adalah GPS Week dan  GPS Time of Week in Second. Rubah GPS Week ke second, dengan mengalikan GPS Week x 7 x 24 x 60 x 60. Kemudian tambahkan "GPS Week" yang sudah dalam satuan detik dengan "GPS Time of Week in Second"



Sample Streams  http://www.gpsinformation.org/dale/nmea.htm

 Garmin etrex summit outputs


$GPRMC,002454,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W,A*3F
$GPRMB,A,,,,,,,,,,,,A,A*0B
$GPGGA,002454,3553.5295,N,13938.6570,E,1,05,2.2,18.3,M,39.0,M,,*7F
$GPGSA,A,3,01,04,07,16,20,,,,,,,,3.6,2.2,2.7*35
$GPGSV,3,1,09,01,38,103,37,02,23,215,00,04,38,297,37,05,00,328,00*70
$GPGSV,3,2,09,07,77,299,47,11,07,087,00,16,74,041,47,20,38,044,43*73
$GPGSV,3,3,09,24,12,282,00*4D
$GPGLL,3553.5295,N,13938.6570,E,002454,A,A*4F
$GPBOD,,T,,M,,*47
$PGRME,8.6,M,9.6,M,12.9,M*15
$PGRMZ,51,f*30
$HCHDG,101.1,,,7.1,W*3C
$GPRTE,1,1,c,*37
$GPRMC,002456,A,3553.5295,N,13938.6570,E,0.0,43.1,180700,7.1,W,A*3D
 

Some observations as compared to the G-12:

  • Information is buffered. It is all for the same second.
  • Information is only updated every two seconds at 4800 b/s.
  • Lat/Lon numbers have an extra digit.
  • This is NMEA 2.3 data as indicated by the extra A at the end of RMC, RMB and GLL.
  • Note that the satellites in use have been shoved to the left of the GSA message instead of the slot location.
  • The RMC sentence starts the sequence.
  • Note the HCHDG sentence for the built in compass.
  • Except for the compass output this sentence list is similar for most Garmin units designed around the time of the Summit receivers, beginning with the emap. 

NMEA sentences

NMEA consists of sentences, the first word of which, called a data type, defines the interpretation of the rest of the sentence. Each Data type would have its own unique interpretation and is defined in the NMEA standard. The GGA sentence (shown below) shows an example that provides essential fix data. Other sentences may repeat some of the same information but will also supply new data. Whatever device or program that reads the data can watch for the data sentence that it is interested in and simply ignore other sentences that is doesn't care about. In the NMEA standard there are no commands to indicate that the gps should do something different. Instead each receiver just sends all of the data and expects much of it to be ignored. Some receivers have commands inside the unit that can select a subset of all the sentences or, in some cases, even the individual sentences to send. There is no way to indicate anything back to the unit as to whether the sentence is being read correctly or to request a re-send of some data you didn't get. Instead the receiving unit just checks the checksum and ignores the data if the checksum is bad figuring the data will be sent again sometime later.
There are many sentences in the NMEA standard for all kinds of devices that may be used in a Marine environment. Some of the ones that have applicability to gps receivers are listed below: (all message start with GP.)
  • AAM - Waypoint Arrival Alarm
  • ALM - Almanac data
  • APA - Auto Pilot A sentence
  • APB - Auto Pilot B sentence
  • BOD - Bearing Origin to Destination
  • BWC - Bearing using Great Circle route
  • DTM - Datum being used.
  • GGA - Fix information
  • GLL - Lat/Lon data
  • GRS - GPS Range Residuals
  • GSA - Overall Satellite data
  • GST - GPS Pseudorange Noise Statistics
  • GSV - Detailed Satellite data
  • MSK - send control for a beacon receiver
  • MSS - Beacon receiver status information.
  • RMA - recommended Loran data
  • RMB - recommended navigation data for gps
  • RMC - recommended minimum data for gps
  • RTE - route message
  • TRF - Transit Fix Data
  • STN - Multiple Data ID
  • VBW - dual Ground / Water Spped
  • VTG - Vector track an Speed over the Ground
  • WCV - Waypoint closure velocity (Velocity Made Good)
  • WPL - Waypoint Location information
  • XTC - cross track error
  • XTE - measured cross track error
  • ZTG - Zulu (UTC) time and time to go (to destination)
  • ZDA - Date and Time
Some gps receivers with special capabilities output these special messages.
  • HCHDG - Compass output
  • PSLIB - Remote Control for a DGPS receiver

Decode of selected position sentences

The most important NMEA sentences include the GGA which provides the current Fix data, the RMC which provides the minimum gps sentences information, and the GSA which provides the Satellite status data.


GGA - essential fix data which provide 3D location and accuracy data.
 $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

Where:
     GGA          Global Positioning System Fix Data
     123519       Fix taken at 12:35:19 UTC
     4807.038,N   Latitude 48 deg 07.038' N
     01131.000,E  Longitude 11 deg 31.000' E
     1            Fix quality: 0 = invalid
                               1 = GPS fix (SPS)
                               2 = DGPS fix
                               3 = PPS fix
          4 = Real Time Kinematic
          5 = Float RTK
                               6 = estimated (dead reckoning) (2.3 feature)
          7 = Manual input mode
          8 = Simulation mode
     08           Number of satellites being tracked
     0.9          Horizontal dilution of position
     545.4,M      Altitude, Meters, above mean sea level
     46.9,M       Height of geoid (mean sea level) above WGS84
                      ellipsoid
     (empty field) time in seconds since last DGPS update
     (empty field) DGPS station ID number
     *47          the checksum data, always begins with *
If the height of geoid is missing then the altitude should be suspect. Some non-standard implementations report altitude with respect to the ellipsoid rather than geoid altitude. Some units do not report negative altitudes at all. This is the only sentence that reports altitude.



RMC - NMEA has its own version of essential gps pvt (position, velocity, time) data. It is called RMC, The Recommended Minimum, which will look similar to:
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A

Where:
     RMC          Recommended Minimum sentence C
     123519       Fix taken at 12:35:19 UTC
     A            Status A=active or V=Void.
     4807.038,N   Latitude 48 deg 07.038' N
     01131.000,E  Longitude 11 deg 31.000' E
     022.4        Speed over the ground in knots
     084.4        Track angle in degrees True
     230394       Date - 23rd of March 1994
     003.1,W      Magnetic Variation
     *6A          The checksum data, always begins with *




HCHDG - Compass output is used on Garmin etrex summit, vista , and 76S receivers to output the value of the internal flux-gate compass. Only the magnetic heading and magnetic variation is shown in the message.
  $HCHDG,101.1,,,7.1,W*3C

where:
     HCHDG    Magnetic heading, deviation, variation
     101.1    heading
     ,,       deviation (no data)
     7.1,W    variation
 

HDG Heading–Deviation & Variation

       1 2 3 4 5 6
       | | | | | |
$--HDG,x.x,x.x,a,x.x,a*hh
1) Magnetic Sensor heading in degrees
2) Magnetic Deviation, degrees
3) Magnetic Deviation direction, E = Easterly, W = Westerly
4) Magnetic Variation degrees
5) Magnetic Variation direction, E = Easterly, W = Westerly
6)checksum
 

HDT Heading–True

       12 3
       || |
$--HDT,x.x,T*hh
1) Heading Degrees, true
2) T = True
3) Checksum
 
 

HPRTransducer Measurements (proprietary data)

1234 567
|||||||
$PTNTHPR,x.x,a,x.x,a,x.x,a*hh
1)Heading
2)N for Number
3)Pitch in degrees
4)N for Number
5)Roll in degrees
6)N for Number
7)checksum

Checksum

The checksum is the 8-bit exclusive OR (no start or stop bits)of all charactersin the sentence, including “,” and “^” delimiters, between but not including “$” or “!” and the “*” delimiters. The hexadecimal value of the most significant and least significant 4 bits of the result isconverted to two
ASCII characters (0-9, A-F (upper case)) for transmission. The most significant character is transmitted first.
 
 http://u88.n24.queensu.ca/exiftool/forum/index.php?topic=3870.0
 http://diy.torrens.org/HowTo/solmetalog.html
 http://www.tronico.fi/OH6NT/docs/NMEA0183.pdf
http://www.kontest.ru/datasheet/honeywell/hmr3000d00232.pdf 

Tuesday, March 20, 2018

Tutorial menggunakan library reference SHARPKML pada C# .NET Visual Studio 2012

SharpKML adalah implementasi dari Open Geospatial Consortium (OGC) KML 2.2 standar yang dikembangkan di C#, mampu membaca / menulis file KML dan file KMZ.

Library ini dibuat berdasarkan pada implementasi standar Google C++  (libkml), namun, daripada menggunakan binding SWIG, library ini ditulis untuk memberikan kemudahan pada developer C#, dengan menggunakan property, metode ekstensi dan built in Xml handling. pada .NET Framework.

Untuk menggunakan library ini, cara yang paling mudah adalah dengan menginstall "SharpKml.Core NuGet package", atau bisa juga dengan mendownload source code nya pada link berikut ini:
https://github.com/samcragg/sharpkml

Untuk lebih detail tentang seluruh sintak element KML, dengan penjelasan dan diagram cara penggunaannya ada di link berikut ini: https://developers.google.com/kml/documentation/kmlreference

Pada Visual Studio 2012 C# .NET pilih menu "Project" , "Manage NuGet Packages..." , kemudian search online "SharpKml.Core".

Setelah itu keluar ada beberapa pilihan library SharpKml, pilih yg "versi 3.0.4", created by "Samuel Cragg". Klik "INSTALL", dan kemudian cek "references" pada project anda akan keluar library "SharpKml.Core".





Kemudian  pada Form.cs tambahkan statemen berikut ini untuk memudahkan pemanggilan class library dari SharpKml.

Selanjutnya yang perlu diperhatikan dalam penyusunan file KML ini adalah urutan prosedur dibawah ini:


1. Buat element baru berupa "Placemark"

    var placemark = new Placemark();

   atau bisa ditulis seperti dibawah ini:

      Placemark placemark = new Placemark(); 

2. Beri nama dari placemark yang telah dibuat tadi.

    placemark.Name = "tokek";

3. Tambahkan style yang lebih spesifik pada placemark tadi:

     placemark.StyleUrl = new Uri("#RoadStyle", UriKind.Relative);

4. Isi posisi koordinat Placemark sesuai dengan data dari GPS:

    placemark.Geometry = new SharpKml.Dom.Point
   {
                Coordinate = new Vector(-6.34329602, 106.85848160)
    };

5. Buat root element "Document" baru, kemudian masukkan element "Placemark" dan "Style" kedalam root element "Document".  Root element "Document" ini adalah KML element tipe container, digunakan untuk menampung element "Features" dan "Styles", ataupun sub "Document" didalam root element "Document". Selain itu bisa juga digunakan untuk menampung element "Shared Styles", "Schema",  atau untuk menampung lebih dari satu "Feature" seperti "placemark" yang lebih dari satu.

Cara penulisannya di SharpKml C# adalah sebagai berikut:

                var document = new Document();
                document.AddFeature(placemark);
                document.AddStyle(style);

 Ada dua macam root element tipe container yang bisa digunakan disini, yaitu "Document" dan "Folder" keduanya memiliki fungsi yang sama dan bisa saling menggantikan. perbedaannya adalah "Document" bisa menampung/ memiliki element "Shared Styles" dan "Schema", sedangkan "Folder" tidak bisa.

Cara penulisannya di SharpKml C# adalah sebagai berikut:

                var folder = new Folder();
                folder.AddFeature(placemark);
                folder.AddStyle(style);

6. Kemudian tetapkan kml.feature baru dari node yang telah dicreate diatas:

                var kml = new Kml();
                kml.Feature = document;

7. Terakhir, setelah semua data dimasukkan dalam node, dan dimasukkan dalam kml.Feature, maka data siap dituliskan dalam file kml:

                KmlFile kmlFile = KmlFile.Create(kml, true);
                using (var stream = System.IO.File.OpenWrite("kmlFileName.kml"))
                {
                    kmlFile.Save(stream);
                }

Dan finish, KML file dah selesai ditulis sesuai format standart, dan file kml siap dijalankan pada Google Earth untuk dicoba.

Apabila tidak memiliki program Google Earth, kode kml bisa dicoba dijalankan secara online pada link berikut ini: http://display-kml.appspot.com/


Berikut beberapa element yang bisa digunakan dalam penyusunan KML.

"LookAt" 

Digunakan untuk menentukan koordinat pengamatan atau eyepoint virtual kamera dari element "placemark", "Folder" atau "Ground Overlay". Element "LookAt" ini menempatkan camera terhubung dengan obyek yang sedang dilihat. Parameter yang ada pada "LookAt" adalah sebagai berikut:
  • "Longitude" : titik Longitude dari obyek yang dilihat. Nilai Barat Meridian adalah dari -180 s/d o derajat. Nilai Timur Meridian adalah dari 0 s/d 180 derajat.
  • "Latitude" :titik Latitude dari obyek yang dilihat.
  • "Altitude": Jarak ketinggian dari permukaan bumi.
  • "Heading" : Arah kompas kamera dalam derajat. Nilai dari 0 s/d 360 derajat.
  • "Tilt" : Sudut antara posisi camera "LookAt" dan garis normal. Lihat gambar dibawah.
  • "Range" : Jarak dalam meter dari titik yang ditentukan ke posisi camera "LookAt", Lihat gambar dibawah.
  • "AltitudeMode" : pilihan bagaimana ketinggian dilihat dari satu titik, pilihannya adalah:
  • "clampToGround" : abaikan nilai ketinggian, dan pasang lokasi "LookAt" diatas tanah.
  • "relativeToGround" : pasang ketinggian sesuai nilainya diatas tanah.
  • "absolute" : pasang ketinggian sesuai nilainya diatas level laut



Cara penulisannya di SharpKml C# adalah sebagai berikut:
Buat element baru "LookAt", kemudian masukkan nilai-nilai parameter yang dibutuhkan.

            var lookat = new LookAt();
            lookat.Longitude = 106.85848160;
            lookat.Latitude = -6.34329602;
            lookat.Altitude = 0;
            lookat.Heading = 0;
            lookat.Tilt = 45;
            lookat.Range = 400000;
            lookat.AltitudeMode = AltitudeMode.ClampToGround;

Setelah itu masukkan element "LookAt" kedalam root element "Folder":

            var folder = new Folder();
            folder.Viewpoint = lookat;

"Style"

Element ini menentukan alamat kelompok "Style" yang dapat direferensikan oleh element "styleMaps" dan "Feature". Element "Style" ini mempengaruhi secara Geometri penampilannya di 3D Viewer dan bagaimana "Feature" muncul di panel "Place" pada "ListView". "SharedStyle" dimasukkan dalam root element "Document" dan harus memiliki id yang ditentukan untuk mereka sehingga mereka dapat direferensikan oleh masing-masing "feature" yang menggunakannya.

Gunakan id untuk merujuk ke "Style" dari "StyleUrl"


Cara penulisannya di SharpKml C# adalah sebagai berikut:
Buat element baru "Stlye",  kemudian masukkan nama "id" nya.

            var style = new Style();
            style.Id = "default";

Setelah itu masukkan element "Style" kedalam root element "Folder":

            var folder = new Folder();
            folder.AddStyle(style);

Apabila direferensikan oleh "StyleUrl" pada Feature "Placemark" adalah sebagai berikut:

            placemark.StyleUrl = new Uri("#default1", UriKind.Relative);


"IconStyle"

Element ini adalah element spesifik untuk element "Style". Spesifik untuk menentukan bagaimana gambar Icon untuk poin "Placemark" digambarkan, baik pada panel "place" dan di "3D Viewer" dari Google Earth. Element "Icon" spesifik ke gambar Icon. Element "Scale" spesifik ke skala X dan Y dari Icon. Element "Color" spesifik pada warna dari Icon. Parameter yang ada didalam IconStyle adalah sebagai berikut:
  • "Scale" : untuk merubah skala ukuran dari Icon.
  • "Icon" : untuk memilih custom Icon dari link luar, dari alamat HTTP.
  • "Color" : untuk setting warna & tingkat kecerahan, range nilai nya 0-255, untuk tingkat kecerahan, 0 = full transparant, 255 = full gelap. Urutan settingnya adalah (aa,bb,gg,rr), dimana aa = tingkat kecerahan, bb = biru, gg = hijau, rr = merah.

Cara penulisannya di SharpKml C# adalah sebagai berikut:
Buat element baru "IconStyle" didalam element "Style.Icon"
 
            style.Icon = new IconStyle();
            style.Icon.Scale = 0.2;
            style.Icon.Icon = new IconStyle.IconLink(new Uri("http://maps.google.com/mapfiles/kml/shapes/placemark_circle.png"));
            style.Icon.Color = new Color32(255, 0, 0, 255);


"Model"

Element ini digunakan untuk menampilkan placemark dalam bentuk gambar 3 dimensi. Pada KML, kita bisa mengimport model 3 dimensi - seperti bangunan, jembatan, monumen, patung, ataupun pesawat terbang - dalam format file COLLADA (file ekstensi *.dae). Gambar model 3 dimensi dibuat menggunakan aplikasi SketchUp, 3D Studio Max, Softimage XSI, atau Maya. Model yang sudah di load di Google Earth bisa dirubah posisi, ketinggian dan ukurannya menggunakan element spesifik. Contoh hasil tampilan "Model" di Gogle Earth adalah seperti gambar dibawah ini.



Element spesifik dari model adalah sebagai berikut:
  • "altitudeMode" : pilihan bagaimana ketinggian dilihat dari satu titik, pilihannya adalah:
    • "clampToGround" : abaikan nilai ketinggian, dan pasang lokasi "Model" diatas tanah.
    • "relativeToGround" : pasang ketinggian sesuai nilainya diatas tanah.
    • "absolute" : pasang ketinggian sesuai nilainya diatas level laut
  • "location" : menunjukkan posisi koordinat dari model di peta dalam "latitude", "longitude" dan "altitude". Pengukuran "Latitude" dan "Longitude" berdasarkan standard proyeksi lat-long dengan datum WGS84, "Altitude" adalah jarak diatas permukaan bumi, dalam meter, dan disesuaikan dengan pilihan "altitudeMode".
  • "Orientation" : menjelaskan posisi sistem koordinat rotasi dari model 3 dimensi pada obyek di Google Earth. Parameter yang ditentukan dalam orientasi ini adalah "roll", "tilt", dan "heading".
  •  "Scale" : menentukan skala perbesaran model pada masing - masing sumbu x,y, dan z.
  •  "Link" : menentukan lokasi file Model 3 dimensi yang mau diload dan pilihan tambahan refresh parameter.
Cara penulisannya di Windows Form C# adalah sebagai berikut:
Buat element baru "Model", kemudian tentukan element spesifik pendukung lainnya. Siapkan dulu nilai Element "Location" nya:

            SharpKml.Dom.Location loc = new SharpKml.Dom.Location();
            loc.Latitude = -6.34329602;
            loc.Longitude = 106.85848160;
            loc.Altitude = 50.00;


Setelah Element "Model" dideklarasikan, masukkan element "Location" dan "AltitudeMode"ke dalam element "Model" :

            SharpKml.Dom.Model model = new SharpKml.Dom.Model();

            model.Location = loc;
            model.AltitudeMode = AltitudeMode.Absolute;

Tentukan lokasi file 3 dimensi nya (*.dae)  yang mau ditampilkan di Google Earth ke dalam element "link", dan kemudian masukkan ke dalam Element "Model":

            SharpKml.Dom.Link link = new SharpKml.Dom.Link();
            link.Href = new Uri("block_plane_0.dae", UriKind.Relative);
            model.Link = link;

Setting ukuran skala model 3 dimensi yg mau ditampilkan kedalam Element "scale", dan kemudian masukkan ke dalam Element "Model":

            SharpKml.Dom.Scale sca = new SharpKml.Dom.Scale();
            sca.X = 50;
            sca.Y = 50;
            sca.Z = 50;

            model.Scale = sca;

Kemudian siapkan Element "Placemark" yang akan ditampilkan model 3 dimensinya, masukkan element "Model" ke dalam element Placemark -> Geometry :

            SharpKml.Dom.Placemark pmplane = new SharpKml.Dom.Placemark();
            pmplane.Geometry = model;

Hasil output KML nya akan seperti dibawah ini:

Wednesday, February 7, 2018

Prosedur Pendaftaran Haji Reguler di Jakarta Timur - Februari 2018

Pembukaan Tabungan Haji

Kantor Cabang BRI Syariah yang terdekat dengan alamat tinggal kami adalah :
BRI Syariah KCP Cibubur, (lokasi depan Pasar Jaya Cibubur,
sebelum RSKO Jakarta - kalau dari pertigaan lampu merah
Raya Bogor - Lapangan Tembak cibubur)
Jl. Raya Lapangan Tembak RT. 006 RW. 02 Cibubur Ciracas Jakarta Timur.
Telepon: (021) 87702501

Pertama kali buka Tabungan Haji di Bank BRI Syariah siapkan persaratan dibawah ini sebelum berangkat ke Bank:
  1. KTP asli
  2. NPWP asli
  3. Uang setoran awal minimal Rp. 50.000,-

Untuk mendapatkan Nomor Validasi, pastikan dana yang terkumpul di rekening BRI Syariah anda total sebesar Rp.25.050.000,- karena saldo mengendap di Bank BRI Syariah yang tidak bisa diambil adalah sebesar Rp. 50.000,-

Dokumen yang dibutuhkan Bank BRI Syariah untuk cetak Nomor Validasi Bukti Setoran Awal BPIH adalah:
  1. KTP asli
  2. Pas Foto ukuran 3x4 (5 lembar) background putih, full face (request ke tukang foto untuk keperluan daftar haji,biasanya sudah tau)
  3. Pas Foto ukuran 4x6 (1 lembar) background putih, full face (request ke tukang foto untuk keperluan daftar haji,biasanya sudah tau)
  4. Materai 6000 masing-masing 2 buah
  5. Mengisi formulir di Bank ( Surat Pendaftaran Calon Jamaah Haji dan surat kuasa)

Berikut Tanda Bukti Setoran Awal BPIH (Biaya Penyelenggaraan Ibadah Haji) yang didalamnya terdapat Nomor Validasi (dilingkari merah, pojok kanan atas) yang nanti diserahkan ke kantor Kemenag Jakarta Timur.


Berikut bukti slip transfer ke rekening BPKH (Badan Pengelola Keuangan Haji), sebelumnya ke rekening Kemenag:

Pendaftaran Haji ke Kanwil Depag Jakarta Timur

Setelah mendapatkan Nomor Validasi Bukti Setoran Awal BPIH dari Bank, lanjut ke Kanwil Depag Jakarta Timur yang terletak di Jl. Terusan I Gusti Ngurah Rai, Pondok Kopi, Jakarta Timur. Batas waktu pendaftaran Haji adalah maksimal 5 hari kerja dari tanggal cetak Nomor Validasi Bukti Setoran Awal BPIH. Kalau lewat dari itu harus balik ke Bank untuk cetak nomor Validasi lagi.





Kantor ini melayani pendaftaran Haji mulai jam 08.00 dan tutup jam 15.00 setiap hari kerja. Dilihat dari websitenya kemenag adalah syaratnya seperti gambar dibawah ini. Akan tetapi dokumen-dokumen yang dibutuhkan kurang detail dijelaskan.



Berikut detail dokumen yang dibutuhkan untuk pendaftaran Haji ke Kanwil Depag Jakarta Timur adalah:
  1. Fotokopi KTP sebanyak 6 buah yang dicetak dalam kertas A4. Bagian depan dan belakang KTP harus dalam satu halaman dan diperbesar full ukuran A4. Bagian depan 50% dan bagian belakang 50%. Berikut dibawah ini contoh nya (gambar diambil dari Google):
  2. Fotokopi Kartu Keluarga / KK sebanyak 3 buah
  3. Fotokopi Buku Nikah / Akta Lahir / Ijazah sebanyak 3 buah
  4. Fotokopi Buku Tabungan BRI Syariah (2 halaman, halaman muka yg ada no. rekening, serta halaman yang ada saldo akhirnya) sebanyak 3 buah

  5. Bukti Pembayaran Pendaftaran Haji (SPPH) dari Bank
  6. Pas foto Muka 80% Background Putih (3×4) sebanyak 10 buah (gambar diambil dari Google)
  7. Pas foto Muka 80% Background Putih (4×6) sebanyak   6 buah
Masukkan dokumen-dokumen tersebut didalam map hijau polos. Di koperasi kemenag juga jual, tp lokasinya agak jauh disamping kantor kemenag dekat Masjid. Kalau bawa sendiri lebih baik, karena map nya bukan map khusus bertuliskan Haji, tapi map polos juga yang dijual disana.

Selanjutnya, berkas yang dibawa kemudian diperiksa kelengkapannya sesuai dengan persyaratan. Dan lanjutkan untuk mengisi form SPPH (Surat Pendaftaran Pergi Haji), masukkan form yang sudah diisi ke map hijau. Berikut form SPPH (Surat Pendaftaran Pergi Haji), silahkan didownload dan diisi sebelum berangkat ke kantor Kemenag.


Kemudian setelah itu, form dan berkas yang sudah lengkap tadi diserahkan ke loket berikutnya untuk pemberkasan dan entry data, petugas akan memasukkan data, menginput nomor validasi, serta mengambil foto & sidik jari pendaftar.


Setelah berkas berhasil diupload, pendaftar akan mendapatkan SPPH yang telah dilengkapi dengan nomor porsi. SPPH dicetak dan pendaftar tinggal tanda tangan 5 kali. Nomor porsi tersebut yang akan digunakan untuk mengecek kapan keberangkatan haji dan informasi pelunasan biaya haji.



Cek Jadwal Keberangkatan secara Online

Setelah itu, proses pendaftaran sudah selesai dan tinggal ditunggu kapan kepastian berangkat melalui sistem. Silahkan dicek jadwal keberangkatan secara berkala di website  https://haji.kemenag.go.id/v3/node/955358 ataupun melalui smartphone di aplikasi Playstore bernama ‘Haji Pintar‘.




Percepatan Keberangkatan Haji bagi Lansia 75 tahun keatas

Bagi calon jemaah haji usia 75 tahun atau lebih bisa diusulkan berangkat lebih awal dengan catatan, telah mempunyai porsi atau telah mendaftar 2 tahun sebelumnya per 1 Januari pada tahun diajukan Permohonan percepatan haji tersebut. 
Calon jamaah haji lansia dapat mengajukan surat permohonan percepatan pemberangkatan haji. Surat tersebut ditujukan kepada Pimpinan Kantor Kementerian Agama Urusan Haji kota/kabupaten asal pendaftar untuk selanjutnya diteruskan ke Kantor Kementerian Agama Provinsi dan Pusat. Data diri yang perlu disertakan dalam surat permohonan tersebut meliputi: nama, alamat, tempat dan tanggal lahir, usia, nomor pendaftaran haji, tanggal pendaftaran haji, serta nomor kontak yang dapat dihubungi.
Selain diberikan prioritas keberangkatan, calon jemaah haji lansia pun dapat berangkat ke Tanah Suci bersama seorang pendamping. Untuk masalah pendamping ini, Kementerian Agama pun memberlakukan syarat khusus. Syarat pertama, calon jemaah haji lansia diwajibkan membuat surat permohonan pendamping yang ditujukan kepada Kantor Kementerian Agama Kabupaten/Kota, lalu melakukan verifikasi berkas, untuk selanjutnya dibuatkan surat usulan Kanwil untuk dilanjutkan ke Dirjen Pelaksanaan Haji dan Umroh.

Syarat kedua, calon pendamping harus memiliki hubungan keluarga langsung, contohnya suami, istri, anak kandung, atau adik kandung. Syarat tersebut harus dibuktikan dengan menyertakan kartu keluarga, akta nikah, serta akta kelahiran. Kemudian, syarat terakhir yang harus dipenuhi calon pendamping adalah mendaftar di provinsi yang sama dengan jamaah lansia yang didampinginya.

Berikut syarat mempercepat keberangkatan Haji bagi Lansia:
  1. Calon Jamaah Haji Lansia harus memenuhi syarat istitaah atau syarat kelayakan berangkat haji;
  2. Mengirim Surat Permohonan Percepatan Keberangkatan Haji;
  3. Minimal umur 75 tahun keatas dan sudah terdaftar minimal 2 tahun;
  4. Untuk penggabungan suami istri (lampirkan bukti buku nikah) dan mahram sudah terdaftar minimal 2 tahun; Pendamping harus dalam 1 provinsi yang sama dengan lansia
  5. Untuk penggabungan anak orang tua (lampirkan bukti KK dan akte lahir) dan mahram sudah terdaftar minimal 2 tahun; Pendamping harus dalam 1 provinsi yang sama dengan lansia
  6. Fotocopy KTP;
  7. Fotocopy KK;
  8. Fotocopy Setoran Awal / Setoran Akhir dari Bank.

Jadi apabila anda atau orang tua anda sudah berumur 70-72 tahun, segera daftarkan diri anda dan Istri atau kedua orang tua anda untuk mendapatkan porsi Haji. Sehingga pas umur beliau sudah menginjak 75 tahun bisa langsung mengajukan permohonan percepatan Haji, bersama ibunya juga mengajukan penggabungan sebagai pendamping Haji Lansia. 

Berikut dibawah ini contoh surat permohonan percepatan keberngkatan Haji bagi Lansia:

Jakarta, … Februari 2018
Kepada Yth,
Pimpinan Kantor Kementerian Agama
Urusan Haji
Kota Jakarta Timur

Perihal : Permohonan Percepatan Keberangkatan
Calon haji usia diatas 75 tahun

Assalamu’alaikum Wr. Wb.

Mengingat usia saya yang sudah lanjut, maka dengan ini saya mengajukan permohonan untuk dapat diberangkatkan lebih awal dari jadwal keberangkatan yang sudah ditentukan.
Dengan ini saya mengajukan permohonan atas :
Nama : ……
Ayah kandung : …….
Alamat : …….
Tempat Tgl. Lahir : ……..
Usia : ……
No.Porsi : ……….
No. SPPH : ………..
No. Tlp : ……….
Demikian permohonan dari saya, besar harapan saya supaya permohonan ini dapat dikabulkan. Atas terkabulnya permohonan ini, saya ucapkan banyak terima kasih
Wassalamu’alaikum Wr. Wb.
Pemohon

(………….)



Thursday, February 1, 2018

Wednesday, January 3, 2018

Using Vectornav VN-200 in Visual Studio .NET



1. First determine the connection parameters for connecting to the VN-100 sensor. You will need to know the following information. 
- COM Port 
- COM Baud Rate (factory default of sensor is 115200)

2. Open Microsoft Visual Studio and create a new project by going to the menu File → New → Project.... Select the Visual C# project template of Console Application and name the project VisualStudioUsage. 

3.Browse to the location C:/Program Files/VectorNav .NET Library (or C:/Program Files (x86)/VectorNav .NET Library if you are on a 64-bit machine) and copy the files VectorNav.dll and VectorNav.xml into the directory where you saved your new Visual Studio project. Then add a reference to the assembly by right-clicking on the project icon in Visual Studio and from the context menu, select Add Reference.... The window Add Reference should now be displayed. Select the Browse tab and then browse and select the VectorNav.dll that you copied into your project folder. 

4. Under the project VisualStudioUsage, open the file Program.cs. You will now need to add a using VectorNav.Devices; statement to make the library's classes easily accessible. Your code should now look like the snippet below. 




5. Now we will add code statements to connect to the sensor, read data values from the sensor and display them on the screen for 10 seconds, and then disconnect from the sensor. The code to perform these steps are listed below and should be what the file Program.cs looks like.


6. Now to run the code, click the Play icon on the Visual Studio toolbar, or go to the menu Debug → Start Debugging. You should now see a console window pop-up and start displaying YawPitchRoll data from the sensor.