Showing posts with label INTEGRATED MAPPING. Show all posts
Showing posts with label INTEGRATED MAPPING. Show all posts

Sunday, January 23, 2011

Class Mapinfo Callback menggunakan Bahasa C#.

Jika kita mendownload applikasi MapBasic disini. Terdapat beberapa sample applikasi untuk menggunakan mepbasic dan applikasi integrated mapping menggunakan MapInfo melalui Bahasa programming (VB, DELPHI dan .NET).
Kemudian setelah dieksplorasi mapinfocallback class untuk applikasi .NET(VB net, C#), ternyata terjadi beberapa error disaat kita menjalankan perintah mapbasic untuk memanggil Dialog Box mapinfo, misal disaat kita ingin menampilkan Temathic Layer dengan perintah "Mapinfoapp.RunMenuCommand(307)", maka akan terjadi stack applikasi.
Untuk mengantisipasi hal ini, berikut beberapa modifikasi mapinfo callback class yang sudah terbukti berjalan baik....

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Text;

namespace Master
{
public interface IMapInfoCallback
{
// Methode untuk mamanggil mapinfo callback saat terjadi perubahan pada map window applikasi, misal nambah layer, atau geser map window
        int WindowContentsChanged(UInt32 windowID);


// Metode untuk memanggil mapinfo callback status bar, jadi fungsi status bar di mapinfo akan di embed secara penuh di status bar applikasi kita.
int SetStatusText(string message);
}
public interface ICallbackNotify : ISynchronizeInvoke
{
      
// Metode memanggil class perubahan status bar.
void OnStatusBarTextChanged(string text);


// Metode memanggil class perubahan yang terjadi di map window applikasi.
        void OnWindowContentsChanged(uint windowId);
}


[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
public class MapInfoCallBack : IMapInfoCallback
{
private ICallbackNotify _callbackClient;


public delegate void OnStatusBarTextChangedDelegate(string text);
public OnStatusBarTextChangedDelegate _onStatusBarTextChangedDelegate;

// Variabel yang digunakan untuk menangani error yang terjadi saat pemanggilan dialog box mapinfo, seperti dialog box Temathic layer.
        public static bool aman;


        public delegate void OnWindowContentsChangedDelegate(uint windowId);
        public OnWindowContentsChangedDelegate _onWindowContentsChangedDelegate;


public MapInfoCallBack(ICallbackNotify callbackClient)
{
_callbackClient = callbackClient;


_onStatusBarTextChangedDelegate = new OnStatusBarTextChangedDelegate(_callbackClient.OnStatusBarTextChanged);
            _onWindowContentsChangedDelegate = new OnWindowContentsChangedDelegate(_callbackClient.OnWindowContentsChanged);
}


        public int WindowContentsChanged(uint windowId)
        {
            if (_callbackClient != null)
            {


                if (_callbackClient.InvokeRequired)
                {
                    _callbackClient.Invoke(this._onWindowContentsChangedDelegate, new Object[] { windowId });
                }
                else
                {
                    _callbackClient.OnWindowContentsChanged(windowId);
                }
            }
            return 0;
        }


public int SetStatusText(string text)
{
            if (_callbackClient != null)
            {


                if (aman == true)
                {


                    if (_callbackClient.InvokeRequired)
                    {
                        _callbackClient.Invoke(this._onStatusBarTextChangedDelegate, new Object[] { text });
                    }
                    else
                    {
                        _callbackClient.OnStatusBarTextChanged(text);
                    }
                }
                else
                {
                    _callbackClient.OnStatusBarTextChanged(text);
                }
            }
                    return 0;
}

//Ini metode yang digunakan untuk mendapatkan informasi koordinat object
public void selectkoor(string commandInfo)
        {
            string[] spl = commandInfo.Split(',');
            Form1.sLastUserEventY = spl[1];
            Form1.PostMessage(Form1.hwndMain, Form1.WM_USER, 0, 0);
        }
}
}


mudah-mudahan bisa bermanfaat........

Friday, January 21, 2011

Embedding Mapinfo +COM in C# Programming

Mencoba untuk berbagi berkaitan dengan Source Code dan Design Applikasi Integrated Mapping (GIS).. untuk itu pada menu Integrated Mapping di samping kanan Blog ini, akan memuat semua class applikasi yang dibutuhkan dalam project ini..
Spesifikasi yang digunakan untuk project ini adalah:
  1. Engine Mapping menggunakan MapInfo
  2. Programming Language digunakan C#, dengan tool VS2010.
  3. MapBasic Programming
  4. etc..
Tahap awal penyusunan applikasi Integrated Mapping ini, berupa design nterface applikasi dan koneksi mapinfo serta koneksi database..  Berikut Preview awal Applikasi..

FORM GIS