Showing posts with label Visual Studio 2012. Show all posts
Showing posts with label Visual Studio 2012. Show all posts

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.


Tuesday, September 3, 2013

Visual Studio CPP Building Error: " error LNK2028: unresolved token (0A000102) "extern "C" int __stdcall "

If you face the same problem with me about this error, please try this ones.
I'm using Visual Studio Ultimate 2012 with C++ CLR Console Application.

This is the Compiler error message:

1>------ Build started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
1>ConsoleApplication1.obj : error LNK2028: unresolved token (0A000102) "extern "C" int __stdcall McOpenDriver(char const *)" (?McOpenDriver@@$$J14YGHPBD@Z) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)
1>ConsoleApplication1.obj : error LNK2019: unresolved external symbol "extern "C" int __stdcall McOpenDriver(char const *)" (?McOpenDriver@@$$J14YGHPBD@Z) referenced in function "int __cdecl main(int,char * * const)" (?main@@$$HYAHHQAPAD@Z)
1>c:\users\laboptics\documents\visual studio 2012\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 0 failed, 0 skipped ==========







This error indicated that the compiler need to linked the program with the necessary windows library. The program cannot execute "extern "C" int __stdcall McOpenDriver(char const *)" because this is an extern C command and need to be linked with the imported library, in this case I'll using "multicam.lib" library.

Select from the menu:  "Project -> Properties " ( Alt+F7 )

In the property pages in the tree on the left select: Configuration Properties -> Linker -> Input

In the right hand pane check:  Additional Dependencies























It should contain these library already:
  • kernel32.lib 
  • user32.lib
  • gdi32.lib
  • winspool.lib
  • comdlg32.lib
  • advapi32.lib
  • shell32.lib
  • ole32.lib
  • oleaut32.lib
  • uuid.lib
  • odbc32.lib
  • odbccp32.lib
but  "int __stdcall McOpenDriver(char const *) " requires multicam.lib.


Now fill the " Additional Dependencies" tab with the required library:
        multicam.lib; %(AdditionalDependencies)