矢量数据结构
在地理信息系统原理中大家都学习过可以用矢量数据模型和栅格数据模型来定义,存储和展示空间对象,这里先看下矢量数据模型
矢量数据模型定义了点、线和面三种不同的类型在二维空间表达现实世界的对象,例如,在下图中,使用它们来表示同一个区域的三个数据集:(1) 以点形式表示的检修孔盖、(2) 下水道管线、(3) 宗地面和 。为了正确的表达出这三种对象,在计算机世界中又是如何存储和管理这些数据的呢?分别看下。
点的存储
如果将地图的右上角记为坐标原点,可以通过保存点距右上角的水平距离和垂直距离来实现点的位置存储,并通过读取该坐标对实现点在地图中的重新绘制
点的坐标数据
建筑物1 | 4 | 3 |
建筑物2 | 5 | 2 |
建筑物3 | 9 | 5 |
实现代码
private void button1_Click(object sender, EventArgs e)
{
string str_oleConn = $@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path()};Extended Properties=dBASE IV;";
OleDbConnection myconnn = new OleDbConnection(str_oleConn);
myconnn.Open();
string mysql_0 = "Create Table Points(X double,Y double)";
string mysql_1 = "Insert Into Points values(4,3)";
string mysql_2 = "Insert Into Points values(5,2)";
string mysql_3 = "Insert Into Points values(9,5)";
OleDbCommand mycmd_0 = new OleDbCommand(mysql_0,myconnn);
OleDbCommand mycmd_1 = new OleDbCommand(mysql_1, myconnn);
OleDbCommand mycmd_2 = new OleDbCommand(mysql_2, myconnn);
OleDbCommand mycmd_3 = new OleDbCommand(mysql_3, myconnn);
mycmd_0.ExecuteNonQuery();
mycmd_1.ExecuteNonQuery();
mycmd_2.ExecuteNonQuery();
mycmd_3.ExecuteNonQuery();
}
private void button2_Click(object sender, EventArgs e)
{
string str_oleConn = $@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path()};Extended Properties=dBASE IV;";
OleDbConnection myconn = new OleDbConnection(str_oleConn);
myconn.Open();
string sql_0 = "select * from Points";
OleDbDataAdapter mycmd = new OleDbDataAdapter(sql_0, myconn);
DataTable dt = new DataTable();
mycmd.Fill(dt);
Graphics g = this.CreateGraphics();
g.Clear(Color.White);
Brush a = new SolidBrush(Color.Red);
for(int i = 0; i < dt.Rows.Count; i++)
{
g.FillRectangle(a, Convert.ToInt32(dt.Rows[i][0])*10, Convert.ToInt32(dt.Rows[i][1])*10, 5, 5);
}
}