DotSpatial_创建Spatialite空间数据库
//坐标系 EPSG码
//xian 1980 3 Degree GK CM 123 2386
//xian 1980 3 Degree GK CM 126 2387
//xian 1980 3 Degree GK CM 129 2388
//xian 1980 3 Degree GK CM 132 2389
//xian 1980 3 Degree GK CM 135 2390
//xian 1980 3 Degree GK Zone 41 2365
//xian 1980 3 Degree GK Zone 42 2366
//xian 1980 3 Degree GK Zone 43 2367
//xian 1980 3 Degree GK Zone 44 2368
//xian 1980 3 Degree GK Zone 45 2369
//xian 1980 GK CM 123 2346
//xian 1980 GK CM 129 2347
//xian 1980 GK CM 135 2348
//xian 1980 GK Zone 21 2335
//xian 1980 GK Zone 22 2336
//xian 1980 GK Zone 23 2337
//CGCS2000 3 Degree GK CM 123 4550
//CGCS2000 3 Degree GK CM 126 4551
//CGCS2000 3 Degree GK CM 129 4552
//CGCS2000 3 Degree GK CM 132 4553
//CGCS2000 3 Degree GK CM 135 4554
//CGCS2000 3 Degree GK Zone 41 4529
//CGCS2000 3 Degree GK Zone 42 4530
//CGCS2000 3 Degree GK Zone 43 4531
//CGCS2000 3 Degree GK Zone 44 4532
//CGCS2000 3 Degree GK Zone 45 4533
//CGCS2000 GK CM 123 4510
//CGCS2000 GK CM 126 4511
//CGCS2000 GK CM 129 4512
//CGCS2000 GK Zone 21 4499
//CGCS2000 GK Zone 22 4500
//CGCS2000 GK Zone 23 4501
//创建Spatialite数据库库
private void toolStripButtonCreateSpatialiteDB_Click(object sender, EventArgs e)
{
string dbFile = Application.StartupPath + "\\Data\\Test.sqlite";
string dbConnStr = "Data Source=" + dbFile;
//创建库
//SQLiteConnection.CreateFile(dbFile);
//增加图层
string msg = "";
//创建表
using (SQLiteConnection conn = new SQLiteConnection(dbConnStr))
{
conn.Open();
using (SQLiteCommand cmd = conn.CreateCommand())
{
string sql = "";
conn.LoadExtension("mod_spatialite.dll");
//sql = "SELECT load_extension('mod_spatialite.dll');";
sql = "select InitSpatialMetaData()";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#region 创建点层
sql = "CREATE TABLE Dian (PK_UID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,meas_value DOUBLE NOT NULL)";
cmd.CommandText = sql;
try
{
cmd.ExecuteNonQuery();
}
catch(Exception exc)
{
}
//bRet = ExecuteSql(sql, conn);
/* 添加图形列 */
sql = "SELECT AddGeometryColumn('Dian', 'GEOMETRY',2346, 'POINT', 'XY')"; //2346 为EPSG码
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 添加空间索引 */
sql = "SELECT CreateSpatialIndex('Dian', 'GEOMETRY')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 通过OGC标准的WTK 文件描述格式插入一个点记录*/
sql = "INSERT INTO Dian(PK_UID, name, meas_value, GEOMETRY) VALUES (1, 'first point', 1.23456,GeomFromText('POINT(636000 5209340)',2346))";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 通过OGC标准的WTK 文件描述格式插入一个点记录*/
sql = "INSERT INTO Dian(GEOMETRY, meas_value, name, PK_UID) VALUES (GeomFromText('POINT(636100 5209340)',2346),11.123456789, 'eleventh point', 2)";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
#endregion
#region 创建线层
sql = "CREATE TABLE Xian (PK_UID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,meas_value DOUBLE NOT NULL)";
cmd.CommandText = sql;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exc)
{
}
//bRet = ExecuteSql(sql, conn);
/* 添加图形列 */
sql = "SELECT AddGeometryColumn('Xian', 'GEOMETRY',2346, 'LINESTRING', 2)"; //2346 为EPSG码
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 添加空间索引 */
sql = "SELECT CreateSpatialIndex('Xian', 'GEOMETRY')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 通过OGC标准的WTK 文件描述格式插入一个点记录*/
sql = "INSERT INTO Xian(PK_UID, name, meas_value, GEOMETRY) VALUES (1, 'line1', 1.23456,GeomFromText('LINESTRING(636000 5209340,633950 5212200,634400 5207800)',2346))";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 通过OGC标准的WTK 文件描述格式插入一个点记录*/
//sql = "INSERT INTO Xian(GEOMETRY, meas_value, name, PK_UID) VALUES (GeomFromText('POINT(636100 5209340)',2346),11.123456789, 'eleventh point', 2)";
//cmd.CommandText = sql;
//cmd.ExecuteNonQuery();
#endregion
#region 创建面层
sql = "CREATE TABLE Mian (PK_UID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT NOT NULL,meas_value DOUBLE NOT NULL)";
cmd.CommandText = sql;
try
{
cmd.ExecuteNonQuery();
}
catch (Exception exc)
{
}
//bRet = ExecuteSql(sql, conn);
/* 添加图形列 */
sql = "SELECT AddGeometryColumn('Mian', 'GEOMETRY',2346, 'POLYGON', 2)"; //2346 为EPSG码
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 添加空间索引 */
sql = "SELECT CreateSpatialIndex('Mian', 'GEOMETRY')";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 通过OGC标准的WTK 文件描述格式插入一个点记录*/
sql = "INSERT INTO Mian(PK_UID, name, meas_value, GEOMETRY) VALUES (1, 'Poly1', 1.23456,GeomFromText('POLYGON((636000 5209340,633950 5212200,634400 5207800,632409 5209760,636000 5209340))',2346))";
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
/* 通过OGC标准的WTK 文件描述格式插入一个点记录*/
//sql = "INSERT INTO Xian(GEOMETRY, meas_value, name, PK_UID) VALUES (GeomFromText('POINT(636100 5209340)',2346),11.123456789, 'eleventh point', 2)";
//cmd.CommandText = sql;
//cmd.ExecuteNonQuery();
#endregion
}
}
//打开或创建Spatialite数据库
//DotSpatial.Plugins.SpatiaLite.SpatiaLiteHelper spatialiteHelper = DotSpatial.Plugins.SpatiaLite.SpatiaLiteHelper.Open(dbConnStr, out msg);
//SpatiaLiteHelper.SetEnvironmentVars();
//List<string> listTableNames = spatialiteHelper.GetTableNames();
//foreach (string tableName in listTableNames)
//{
// MessageBox.Show(tableName);
//}
//IFeatureSet fs = spatialiteHelper.ReadFeatureSet("t");
//mapMain.Layers.Add(fs);
//sql = "insert into TableName values(2, 0, MakePoint(-111.879206, 226.255935, 4326))";
}