文文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 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果