MapObject shape数据操作

  利用MO 的GeoDataset  、DataConnection  Recordset 进行数据操作

 在MO中。使用GeoDataset对象和DataConnection 对象来连接和读取地理数据。

   GeoDataset: 是表达一个图层的地利数据的对象

 DatasetConnection对象指定一个和地理数据文件的连接,用Database 属性表示数据文件的地址。

Recordset 是Geodataset的记录集合或者查询后的数据集合

下面给一段 他们的使用  主要用于加载shp数据集并通过遍历获取线的每个节点

 

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 MapObjects2;

namespace mo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public MapObjects2.MapLayer AddShape(string basepath, string fileName, bool mHasMeasure)
        {
            DataConnection dCon = new DataConnection();
            GeoDataset gSet;
            mHasMeasure = false;

            dCon.Database = basepath;

            if (dCon.Connect())
            {
                gSet = dCon.FindGeoDataset(fileName);
                if (gSet == null)
                {
                    MessageBox.Show("打开shape文件异常");
                    return null;
                }
                else
                {
                    MapLayer newLayer = new MapLayer();
                    newLayer.GeoDataset = gSet;
                    mHasMeasure = gSet.HasMeasure;
                    dCon = null;
                    gSet = null;
                    MessageBox.Show(newLayer.Records.Count.ToString());
                    return newLayer;
                }
            }
            else
            {
                dCon = null;
                gSet = null;
                return null;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
           
           
        }
        //  h获取 图层中的每个节点 
        public void getLine(string mPath, string Name,bool fea)
        {
            Application.DoEvents();
            string txt = null;
            MapObjects2.MapLayer mLay;
            MapObjects2.Recordset mrec;
            Line mline = new Line();
            MapObjects2.Point mpt = new MapObjects2.Point(); ;
            mLay = AddShape(mPath, Name, false);
            mrec = mLay.Records;
            do
            {
                //从第一条数据开始处理
                //MessageBox.Show(mrec.Fields.Item("shape").);
                mline = mrec.Fields.Item("shape").Value ;
                MessageBox.Show(mline.Parts.Count.ToString());
               
                String mlxdm = mrec.Fields.Item("roadcode").Value.ToString();
                MessageBox.Show(mlxdm);
                if (mline.Parts.Count < 1)
                {
                    MessageBox.Show("line is nothing");
                    break;
                }
                for (int i = 0; i < mline.Parts.Count; i++)
                {
                    MapObjects2.Points   pt=   mline.Parts.Item(i) as MapObjects2.Points;

                    for (int j = 0; j < pt.Count;j++ )
                    {
                        richTextBox1.Text =  "x=" + pt.Item(j).X.ToString() + " y=" + pt.Item(j).Y.ToString() + " z=" + pt.Item(j).Z.ToString() + "\n" +richTextBox1.Text ;
                        //MessageBox.Show("x=" + pt.Item(i).X.ToString() + " y=" + pt.Item(i).Y.ToString() + " z=" + pt.Item(i).Z.ToString());
                        // MessageBox.Show( pt.ToString());
                    }
                  
                 
                   

                }
                mrec.MoveNext();
            } while (!mrec.EOF);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            getLine(Application.StartupPath + "\\layerdata", "nmg_route", true);
        }
    }
}


 

 

posted @ 2013-07-08 15:13  爱生活,爱编程  阅读(528)  评论(0编辑  收藏  举报