文文wwww 2022-12-27 19:10 采纳率: 100%
浏览 152
已结题

spatialite 数据查询c++

我在使用spatialite时想要查询表中的geometry字段

void LnyxMapToCsmapConverter::GetGeometryPoints(sqlite3_stmt *stmt, int index, std::vector<Point3d> &points) {
    u_char *pBolb = (u_char *)sqlite3_column_blob(stmt, index);
        if (pBolb != nullptr) {
        int count = sqlite3_column_bytes(stmt, index);

        gaiaGeomCollPtr geo = nullptr;
        geo = gaiaFromSpatiaLiteBlobWkb(pBolb,count);
        if (geo != nullptr) {
            if (geo->DimensionModel == GAIA_XY_Z) {
                int geoType = gaiaGeometryType(geo);
                if (geoType == GAIA_POINTZ) {
                    gaiaPointPtr p = geo->FirstPoint;
                    if (p != nullptr) {
                        if (p->DimensionModel == GAIA_XY_Z) {
                            Point3d pt;
                            pt.set_x(p->X);
                            pt.set_y(p->Y);
                            pt.set_z(p->Z);
                            points.emplace_back(pt);
                        }
                        p = p->Next;
                        

                    }
                }

这是一部分代码,pblob指针无法获取值,到底用什么方法可以查询geometry字段

  • 写回答

6条回答 默认 最新

  • |__WhoAmI__| 2022-12-27 19:21
    关注

    可以使用 SQLite 的 sqlite3_column_blob 函数来获取查询结果中 geometry 字段的值。这个函数用于获取当前记录中指定列的二进制字段值。

    u_char *pBolb = (u_char *)sqlite3_column_blob(stmt, index);
    

    其中stmt 是你使用的 SQLite 预处理语句的指针,index 是你要获取的字段的索引(从 0 开始)。

    如果获取成功,函数会返回二进制字段的指针,否则会返回 null。
    还可以使用 Spatialite 库中的其他函数来处理这个几何对象。例如可以使用 gaiaGeometryType 函数来获取几何对象的类型,使用 gaiaPointPtr 函数来获取几何对象的首个点,以及使用 Next 属性来遍历所有的点。

    while (p != nullptr) {
        Point3d pt;
        pt.set_x(p->X);
        pt.set_y(p->Y);
        pt.set_z(p->Z);
        points.emplace_back(pt);
        p = p->Next;
    }
    

    这段代码会从几何对象中取出每一个点,然后将其转换为一个 Point3d 对象,并把它加入到 points 向量中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月29日
  • 已采纳回答 12月29日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)