| 1510 | } |
| 1511 | |
| 1512 | bool sqliteOperation::insertObjectGeoms(hadmap::tx_object_geom_vec& geoms) { |
| 1513 | char sql[512]; |
| 1514 | sprintf(sql, |
| 1515 | "INSERT INTO %s(type, srs, dimension, style, color, text, size, image, geom) \ |
| 1516 | VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)", |
| 1517 | OBJECT_GEOM_TABLE); |
| 1518 | |
| 1519 | sqliteStmtPtr stmt(dbPtr, sql); |
| 1520 | if (!stmt.status()) { |
| 1521 | std::cerr << "failed to prepare insert object geometries." << std::endl; |
| 1522 | return false; |
| 1523 | } |
| 1524 | |
| 1525 | std::vector<double> sizes; |
| 1526 | hadmap::Points3d linestring; |
| 1527 | sqlite3_blob_data blob; |
| 1528 | sqlite3_exec(dbPtr, "begin;", 0, 0, 0); |
| 1529 | bool complete = true; |
| 1530 | for (hadmap::tx_object_geom_vec::iterator iter = geoms.begin(); iter != geoms.end(); ++iter) { |
| 1531 | int index = 0; |
| 1532 | sqlite3_bind_int(stmt, index + 1, iter->type); |
| 1533 | iter->srs = 4326; |
| 1534 | sqlite3_bind_int(stmt, index + 2, iter->srs); |
| 1535 | sqlite3_bind_int(stmt, index + 3, iter->dimension); |
| 1536 | sqlite3_bind_int(stmt, index + 4, iter->style); |
| 1537 | sqlite3_bind_int(stmt, index + 5, iter->color); |
| 1538 | sqlite3_bind_text(stmt, index + 6, iter->text, -1, SQLITE_TRANSIENT); |
| 1539 | if (iter->geom.size() > 0) { |
| 1540 | linestring.resize(iter->geom.size()); |
| 1541 | sizes.resize(iter->geom.size() * 2); |
| 1542 | for (size_t k = 0; k < iter->geom.size(); ++k) { |
| 1543 | linestring[k].x = iter->geom[k].x; |
| 1544 | linestring[k].y = iter->geom[k].y; |
| 1545 | linestring[k].z = iter->geom[k].z; |
| 1546 | sizes[k * 2] = iter->geom[k].w; |
| 1547 | sizes[k * 2 + 1] = iter->geom[k].h; |
| 1548 | } |
| 1549 | |
| 1550 | sqlite3_bind_blob(stmt, index + 7, &sizes[0], sizeof(double) * sizes.size(), SQLITE_TRANSIENT); |
| 1551 | sqlite3_bind_blob(stmt, index + 8, "", 0, SQLITE_TRANSIENT); |
| 1552 | createBlob(linestring, iter->srs, blob); |
| 1553 | sqlite3_bind_blob(stmt, index + 9, blob.data, blob.size, SQLITE_TRANSIENT); |
| 1554 | } |
| 1555 | int r = sqlite3_step(stmt); |
| 1556 | if (SQLITE_DONE != r) { |
| 1557 | std::cerr << "Insert Object Geom Error, Code " << r << std::endl; |
| 1558 | complete = false; |
| 1559 | } |
| 1560 | sqlite3_clear_bindings(stmt); |
| 1561 | sqlite3_reset(stmt); |
| 1562 | iter->pkid = sqlitePackage::getLastInsertedRowid(dbPtr); |
| 1563 | } |
| 1564 | sqlite3_exec(dbPtr, "commit;", 0, 0, 0); |
| 1565 | |
| 1566 | return true; |
| 1567 | } |
| 1568 | |
| 1569 | bool sqliteOperation::insertObjectGeomRels(hadmap::tx_object_geom_rel_vec& geom_rels) { |