矢量做图组件OTGisX的使用(类似Mapbase)

一:组件添加到工具栏

要在应用程序中应用OTGisX控件,首先要把所下载的OTGisX组件添加到.Net工程中。并将其添加到工具箱托盘
中。添加方式为:在工具箱上单击右键,选择“选择项”,会出现“选择工具箱项”对话框,在“COM组件”属性页,选择浏览,找到OTGisX.ocx添加到工具箱项。这时工具箱中会出现AxOTGisForm控件。在设计应
用程序界面时,可以将其拖入应用程序界面,系统会在代码中自动创建一个AxOTGisForm对象。

以管理员身份注册组件,就可以用了

二:如图

三:组件介绍

组件上有map对象,map对象上有layer对象,layer上有图元对象

四:实例

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OTGisX;

namespace OTGisX_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        #region 事件:运行自加载,准备显示
            private void Form1_Load(object sender, EventArgs e)
            {
                Otg.DoOnShow();
                cbx_Type.SelectedIndex = 0;
            }
        #endregion

        #region 事件:选中一个元素触发,选中井元素,将井号赋给文本框
            private void axOTGisForm1_OnSelectedOneElement(object sender, AxOTGisX.IOTGisFormEvents_OnSelectedOneElementEvent e)
            {
                txt_Jname.Text = "";
                OTMap _OTMap = this.Otg.GetActiveMap();
                OTElement _OTElement = _OTMap.GetSelectedElement(0);
                OTWell _OTWell;
                if (_OTElement != null && _OTElement.ElementClassCodeID == ElementType.etWell)
                {
                    _OTWell = (OTWell)_OTElement;
                    txt_Jname.Text = _OTWell.TextStr.Trim();
                }
            }
        #endregion

        #region 修改
            private void button1_Click(object sender, EventArgs e)
            {

                OTMap _OTMap = this.Otg.GetActiveMap();
                OTElement _OTElement = _OTMap.GetSelectedElement(0);

                if (_OTElement != null && _OTElement.ElementClassCodeID == ElementType.etWell)
                {
                    OTWell aOtwell = (OTWell)_OTElement;
                    if (txt_Jname.Text.Trim().Length > 0)
                    {
                        aOtwell.TextStr = txt_Jname.Text.Trim();
                        OTLayer _OTLayer = aOtwell.GetParentLayer();
                        aOtwell.UpDatePosInfo();
                        _OTMap.UpdateAllPosition();
                        Otg.Refresh();
                    }
                    else
                    {
                        MessageBox.Show("请输入更改的井号名!");
                    }
                }
            }
        #endregion

        #region 保存更改
        private void button2_Click(object sender, EventArgs e)
        {
            Otg.SaveCurrentFile();
        }

        #endregion

        #region 关闭
        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Otg.ClearUI();
            this.Dispose();
            this.Close();
        }
        #endregion

        #region 添加图件
        private void btn_add_tj_Click(object sender, EventArgs e)
        {
            try
            {
                if (string.IsNullOrEmpty(txt_tj_mc.Text.Trim()))
                {

                    MessageBox.Show("图件名称不能为空");
                    txt_tj_mc.Focus();
                    return;
                }
                if (string.IsNullOrEmpty(txt_blc.Text.Trim()))
                {
                    MessageBox.Show("比例尺不能为空");
                    txt_blc.Focus();
                    return;
                }
                if (string.IsNullOrEmpty(txt_zs_x.Text.Trim()))
                {

                    MessageBox.Show("左上X不能为空");
                    txt_zs_x.Focus();
                    return;
                }
                if (string.IsNullOrEmpty(txt_zs_y.Text.Trim()))
                {

                    MessageBox.Show("左上Y不能为空");
                    txt_zs_y.Focus();
                    return;
                }
                if (string.IsNullOrEmpty(txt_yx_x.Text.Trim()))
                {

                    MessageBox.Show("右下X不能为空");
                    txt_yx_x.Focus();
                    return;
                }
                if (string.IsNullOrEmpty(txt_yx_y.Text.Trim()))
                {

                    MessageBox.Show("右下Y不能为空");
                    txt_yx_y.Focus();
                    return;
                }
                
               
                    OTMap aOtmap = Otg.CreateNewMap();
                    aOtmap.MapName = txt_tj_mc.Text;
                    aOtmap.MapZoomRateX = double.Parse(txt_blc.Text);
                    aOtmap.MapZoomRateY = double.Parse(txt_blc.Text);
                    aOtmap.SetMapRect(double.Parse(txt_zs_x.Text), double.Parse(txt_zs_y.Text), double.Parse(txt_yx_x.Text), double.Parse(txt_yx_y.Text));//设置图件范围
                    aOtmap.SetProjection("XA_80", TOTProjectionType.TMR, TOTCoordinateType.Projection, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                    switch (cbx_Type.SelectedIndex)
                    {
                        case 0:
                            aOtmap.CoordinateType = TOTCoordinateType.User;
                            break;
                        case 1:
                            aOtmap.CoordinateType = TOTCoordinateType.LonLat;
                            break;
                        case 2:
                            aOtmap.CoordinateType = TOTCoordinateType.Projection;
                            break;
                        case 3:
                            aOtmap.CoordinateType = TOTCoordinateType.Geodesic;
                            break;

                    }
                    aOtmap.UpdateAllPosition();
               
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        } 
        #endregion

        #region 读取图件信息
            private void btn_read_tj_Click(object sender, EventArgs e)
            {
                OTMap aOtmap = Otg.GetActiveMap();
                double zx = 0, zy = 0, yx = 0, yy = 0;
                aOtmap.GetMapRect(out zx, out zy, out yx, out yy);
                string temp = "图件名称:" + aOtmap.MapName + Environment.NewLine;
                temp += "x轴比例尺是:" + aOtmap.MapZoomRateX + ",y轴比例尺是:" + aOtmap.MapZoomRateY + Environment.NewLine;
                temp += "图件的宽,高分别是:" + aOtmap.MapWidth.ToString() + "," + aOtmap.MapHight.ToString() + Environment.NewLine;
                temp += "图件坐标左边距,上边距分别是: " + aOtmap.MapLeft.ToString() + "," + aOtmap.MapHight.ToString() + Environment.NewLine;
                temp += "左上,右下坐标分别是:" + zx.ToString() + "," + zy.ToString() + "," + yx.ToString() + "," + yy.ToString() + Environment.NewLine;
                temp += "基准面列表是:" + aOtmap.GetProjectionParams();
                MessageBox.Show(temp);
            } 
        #endregion

        #region 添加图层
            private void btn_add_tc_Click(object sender, EventArgs e)
            {
                try
                {
                    if (string.IsNullOrEmpty(txt_tc_mc.Text.Trim()))
                    {

                        MessageBox.Show("图层名称不能为空");
                        txt_tc_mc.Focus();
                        return;
                    }

                    OTMap aOtmap = Otg.GetActiveMap();
                    MessageBox.Show("所属图件是:" + aOtmap.MapName);
                    OTLayer aOtlayer = aOtmap.CreateNewLayer(txt_tc_mc.Text);
                    aOtmap.UpdateAllPosition();
                    Otg.Refresh();
                    Otg.RefreshMapList();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            } 
        #endregion

        #region 添加井位图
                private void btn_add_ty_Click(object sender, EventArgs e)
                {
                    try
                    {
                        OTMap aOtmap = Otg.GetActiveMap();
                        int index = aOtmap.ActiveLayerIndex;//活动图层的索引
                        OTLayer aOtlayer = aOtmap.GetLayer(index);
                        MessageBox.Show("所属图层是:" + aOtlayer.LayerName);
                        OTWell aOtwell = aOtlayer.CreateNewWellElement(1, 1, 1);
                        aOtwell.TextStr = txt_ty_mc.Text;
                        aOtwell.TopSymID = 24430001;
                        aOtwell.TopSymSize = 50;
                        aOtwell.BottomSymID = 24430001;
                        aOtwell.BottomSymSize = 80;
                        aOtwell.TopPosX = double.Parse(txt_jkx.Text);
                        aOtwell.TopPosY = double.Parse(txt_jky.Text);
                        aOtwell.BottomPosX = double.Parse(txt_jdx.Text);
                        aOtwell.BottomPosY = double.Parse(txt_jdy.Text);
                        aOtwell.UpDatePosInfo();
                        aOtmap.UpdateAllPosition();

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
        #endregion
    }
}

刷新一口井的信息,控件和属性上的值

#region 编辑一口井的图像信息
            public void Edit_Well(object sender, EventArgs e)
            {
                try
                {
                    //10.17新增
                    CamlBuilder cb = new CamlBuilder();
                    cb.AddWhere(OperationSymbol.Contains, "jwty_point", ConstInfo.W_sort, ConstInfo.文本);
                    DataSet ds = OperatePort.SearchDataList(ConstInfo.ListName_Jwty, cb.GetCamlString(), null);
                    if (!Common.JudgeDs(ds))
                    {

                        OTMap aOtmap = axOtg.GetActiveMap();
                        OTElement _OTElement = aOtmap.GetSelectedElement(0);
                        if (_OTElement != null && _OTElement.ElementClassCodeID == ElementType.etWell)
                        {
                            OTWell aOtwell = (OTWell)_OTElement;
                            aOtwell.TextStr = ConstInfo.J_Number;
                            aOtwell.TopSymID = int.Parse(ds.Tables[0].Rows[0]["jkfhlx_id"].ToString());//井口符号类型ID;
                            aOtwell.TopSymSize = double.Parse(ds.Tables[0].Rows[0]["jkfhlxdx"].ToString());//井口符号大小;
                            aOtwell.BottomSymID = int.Parse(ds.Tables[0].Rows[0]["jdfhlx_id"].ToString());//井底符号类型ID;
                            aOtwell.BottomSymSize = double.Parse(ds.Tables[0].Rows[0]["jdfhdx"].ToString());//井底符号大小
                            aOtwell.TopPosX = ConstInfo.J_jkx - 19000000;
                            aOtwell.TopPosY = ConstInfo.J_jky;
                            aOtwell.BottomPosX = ConstInfo.J_jdx - 19000000;
                            aOtwell.BottomPosY = ConstInfo.J_jdy;
                            aOtwell.TextHeight = 10;
                            aOtwell.UpDatePosInfo();//更新井的信息
                            aOtmap.UpdateAllPosition();//跟新井的图像位置
                            //axOtg.RefreshMapList();
                            //axOtg.RefreshToolbarPosition();
                            this.axOtg.Refresh();//刷新井的名字
                            aOtwell.ShowProperty();//刷新属性
                        }
                       
                    }
                    else
                    {
                        sh.Message("不存在该井的类别!");
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());

                }
            } 
        #endregion

 删除某一层

 private void btn_Download_Click(object sender, EventArgs e)
        {
            SaveFileDialog sw = new SaveFileDialog();
            sw.Filter = "*.OTP|*.*";
            sw.FilterIndex = 2;
            sw.Title = this.Text;
            sw.RestoreDirectory = true;
            if (sw.ShowDialog() == DialogResult.OK)
            {
                string path = sw.FileName.ToString() + ".OTP";
                for (int j = 0; j < axOTGisForm1.Count(); j++)
                {
                    OTMap fMap = axOTGisForm1.GetMap(j);
                    for (int i = 0; i < fMap.Count(); i++)
                    {
                        OTLayer aOtlayer = fMap.GetLayer(i);
                        string layerN = aOtlayer.LayerName.ToString().Trim();
                        if (j == 1 && layerN.Length >= 4 && layerN.Substring(0, 4) == "1000")
                        {
                            fMap.RemoveLayer(i);
                        }
                        if (cmb_imageType.Text.Trim() == "黑白图" && layerN.Length >= 4 && layerN.Substring(3, 1) == "2")//去彩色线
                        {
                            fMap.RemoveLayer(i);
                        }
                        if (cmb_imageType.Text.Trim() == "彩色图" && layerN.Length >= 4 && layerN.Substring(3, 1) == "1")//去黑白线
                        {
                            fMap.RemoveLayer(i);
                        }
                    }
                    fMap.UpdateAllPosition();
                }
                int temp =axOTGisForm1.SaveToFile(path, 1);
                if (temp == 0)
                {
                    MessageBox.Show("保存成功", "温馨提示");
                    this.Close();
                }
                else 
                {
                    MessageBox.Show("保存异常", "温馨提示");
                }
            }
  
        }
原文地址:https://www.cnblogs.com/hongmaju/p/4271666.html