2009년 12월 7일 월요일

[ArcObjects]Save IMapControlDefault To Mxd File

Map Control을 이용한 Application 구현시 Map Control 또는 Map을 MXD 파일로 저장하는 코드이다.

만약 IMap을 MXD로 저장하고 싶다면 아래 코드에서 IMapControlDefault targetMapControl ==> IMap targetMap으로 변경해 주면 된다.

[code c#]
public bool SaveMapToMxd(IMapControlDefault targetMapControl, string fileName)
{
    bool bSuccess = false;

    if (string.IsNullOrEmpty(fileName)) return bSuccess;

    IMapDocument ipMapDocument = new MapDocumentClass();

    if (ipMapDocument.get_IsReadOnly(fileName))
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ipMapDocument);
        return bSuccess;
    }

    try
    {
        if (System.IO.File.Exists(fileName))
        {
            ipMapDocument.Open(fileName, string.Empty);
        }
        else
        {
            ipMapDocument.New(fileName);
        }

        IMxdContents ipMxdContents = (IMxdContents)targetMapControl;
        ipMapDocument.ReplaceContents(ipMxdContents);
        ipMapDocument.SetActiveView(targetMapControl.ActiveView);

        System.Windows.Forms.Cursor.Current = System.Windows.Forms.Cursors.WaitCursor;

        //bUseRelativePaths = true, bCreateThumnbail = false
        ipMapDocument.Save(true, false);

        ipMapDocument.Close();

        bSuccess = true;
    }
    catch (Exception Ex)           
    {
       
        System.Diagnostics.Debug.WriteLine(string.Format("MXD 저장오류 : {0}", Ex.Message));
    }
    finally
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(ipMapDocument);
    }
    System.Windows.Forms.Cursor.Current = Cursors.Default;

    return bSuccess;
}
[/code]