数据库相关操作说明:
//连接数据库
sqlite3_open_v2 (argv[1], &handle, SQLITE_OPEN_READONLY, NULL);
cache = spatialite_alloc_connection ();
spatialite_init_ex (handle, cache, 0);
//初始化空间数据库
strcpy (sql, "SELECT InitSpatialMetadata(1)");
ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
//创建表
strcpy (sql, "CREATE TABLE test (");
strcat (sql, "PK INTEGER NOT NULL PRIMARY KEY)");
ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
//添加几何列
strcpy (sql, "SELECT AddGeometryColumn('test', 'geom', 3003, 'POINT', 2)");
ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
//创建空间索引
strcpy (sql, "SELECT CreateSpatialIndex('test', 'geom')");
ret = sqlite3_exec (handle, sql, NULL, NULL, &err_msg);
//插入数据,批量插入数据前后需要有begin和commit操作
strcpy (sql, "INSERT INTO test (pk, geom) VALUES (?, ?)");
ret = sqlite3_prepare_v2 (handle, sql, strlen (sql), &stmt, NULL);
/* preparing the geometry to insert */
geo = gaiaAllocGeomColl();
geo->Srid = 3003;
gaiaAddPointToGeomColl(geo, x, y);
/* transforming this geometry into the SpatiaLite BLOB format */
gaiaToSpatiaLiteBlobWkb(geo, &blob, &blob_size);
/* we can now destroy the geometry object */
gaiaFreeGeomColl(geo);
/* binding parameters to Prepared Statement */
ret = sqlite3_bind_int64(stmt, 1, pk);
ret = sqlite3_bind_blob(stmt, 2, blob, blob_size, SQLITE_TRANSIENT);
/* performing actual row insert */
ret = sqlite3_step(stmt);