增强多边形序列化

2024-04-16

我在我的项目中使用增强几何体,并且需要序列化多边形。我一直在使用 boost 序列化,对于许多 boost 数据类型都没有问题,但 boost 几何似乎当前不支持序列化,因为我在序列化文件夹中找不到任何标头。

有没有众所周知的方法来实现这一目标?

Thanks.

编辑:二进制序列化示例:Boost 多边形序列化:环 https://stackoverflow.com/questions/21438732/boost-polygon-serialization-ring


我同意,奇怪的是 Boost.Geometry 不支持 Boost.Serialization。可能很难支持所有可能的模板参数组合,或者可能他们不关心,因为 WKT 已经提供了。

至少在“默认”容器类型的情况下,添加此类功能很简单。下面的代码实现了它并且功能齐全。

下面我假设您使用自定义类(来自 Qt 的 QPoint)作为点类。其他点类型的代码几乎与我的相同。

首先,为 Point 类添加序列化:

#include <QPoint>

#include <boost/geometry/geometry.hpp>
#include <boost/geometry/geometries/register/point.hpp>

BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(QPoint, int, cs::cartesian, x, y, setX, setY);
typedef QPoint MyPoint;


namespace  boost {
namespace serialization {

template<class Archive>
void serialize(Archive & ar, MyPoint& pt, const unsigned int version) {
    ar &  boost::serialization::make_nvp("x", pt.rx() );
    ar &  boost::serialization::make_nvp("y", pt.ry() );
}
} //namespace serialization
} //namespace boost

接下来,您将添加环和多边形的序列化。在这里,我使用了以下事实:Ring 和 Polygon 本质上分别是点和环的 std::vector,并且 std::vector 的序列化内置于 Boost.Serialization 中。

#include <boost/serialization/vector.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/ring.hpp>

//change template flags as you are pleased but ring and polygon has to be
//in correspondence w.r.t. to "closed" and "clockwise" policies
typedef boost::geometry::model::ring<MyPoint, false, true> MyRing;
typedef boost::geometry::model::polygon<MyPoint, false, true> MyPolygon; 

namespace  boost {
namespace serialization {

//Default ring<MyPoint> simply inherits from std::vector<MyPoint>, 
//its serialization is trivial and no implementation is needed. 

//Default polygon<MyPoint> gives direct access to outer ring and the container of inner rings
template<class Archive>
void serialize(Archive & ar, MyPolygon& poly, const unsigned int version) {
    ar &  boost::serialization::make_nvp("outer", poly.outer());
    ar &  boost::serialization::make_nvp("inners", poly.inners());
}


} //namespace serialization
} //namespace boost

就是这样,你已经完成了,现在你可以像任何其他类一样使用 MyPolygon 和 Boost.Serialize :

#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>

void foo_out(std::ostream & oss, const MyPolygon & poly)
{
    boost::archive::xml_oarchive oa(oss);
    oa & BOOST_SERIALIZATION_NVP(poly);
}

void foo_in(std::istream & iss, MyPolygon & poly)
{
    boost::archive::xml_iarchive ia(iss);
    ia & BOOST_SERIALIZATION_NVP(poly);
}

Enjoy!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

增强多边形序列化 的相关文章

随机推荐

  • Git:推送到多个远程

    Short 如果您将多个远程存储库链接到本地 文件 是否有一种方法可以同时推送到它们 Long 由于工作原因 我的代码必须使用gitlab和github遥控器 因此 一旦我进行了一些本地更改 我就想更新这两个存储库 我的 git confi
  • 重新渲染子视图后,主干事件会多次触发

    我们有一个由侧边栏和几个子视图组成的主干视图 为简单起见 我们决定让侧边栏和子视图由单个视图管理render功能 但是 那click edit单击侧边栏项目之一后 事件似乎会多次触发 例如 如果我从 常规 开始并单击 edit then h
  • Vim: set langmap=e;h 破坏 supertab 插件

    我是 Vim 新手 正在尝试设置一些插件 到目前为止我已经安装了 Pathogen pyflakes 和 supertab 后者似乎不起作用 紧迫tab而在插入模式下只需写入字符串
  • 如何从 UWP(又名 .NET Core)中的 Type 对象获取 Assembly

    Type 类在 NET Framework 中有一个Assembly 属性 然而 当您编写使用 NET Core 的 UWP 时 此属性就消失了 仅 AssemblyQualifiedName 属性可用 我怎样才能从这个名字进入Assemb
  • R:如何用文本框注释 ggplot?

    我希望添加一个小的白色文本框 并在 ggplot 绘图的正文中添加自定义文本 我要添加的文本是为了标识我要添加到绘图中的水平线 ggplot cb emp geom point aes x grossunits y rate color a
  • 在 StringTokenizer 中使用多个分隔符

    我想知道如何在 java 中使用 StringTokenizer 的多个分隔符 例如其中之一 将作为分隔符出现 而且一次只会有一个 Use the 有两个参数的构造函数 http docs oracle com javase 6 docs
  • r - 如何清除 rJava 使用的内存?

    我正在使用 xlsx 包创建工作簿 工作表 将数据写入工作表 然后保存工作簿 然而 当我多次重复这组操作时 我开始出现错误消息 gt Error in jcheck silent FALSE java lang OutOfMemoryErr
  • DbSet、模型构建器和 EF 导航属性

    我正在尝试实现一个多租户应用程序 在其中通过租户对象查询数据库 而不是直接从上下文中查询 在我拥有这个之前 public User GetUserByEmail string email using var db CreateContext
  • 为子域设置了 Cookie,但 IE 开发工具在根域显示 Cookie。我缺少什么?

    我们有许多网站挂在根域上 例如 dev mydomain co nz test mydomain co nz www mydomain co nz 我使用 Fiddler 监控与 dev mydomain co nz 的连接 并收到一个带有
  • Eclipse:无法加载 JNI 共享库“C:\Program Files(x86)\Java\jdk1.7.0_15\bin\..\jre\bin\client\jvm.dll

    我正在尝试安装 Eclipse 为了安装我已经完成了以下操作 安装JDK 7u15 64位 实际下载名称 jdk 7u15 windows i586 exe 在C Program Files x86 Java JDK 1 7 0 15 我在
  • 使用 Python 可视化 LDA 模型

    我有一个 LDA 模型 包含 10K 文档中 10 个最常见的主题 现在它只是对每个主题的单词及其相应概率分布的概述 我想知道 python 是否有可用的东西来可视化这些主题 pyLDAvis https pypi python org p
  • cudaMallocManaged() 返回“不支持的操作”

    在 CUDA 6 0 中尝试托管内存给了我operation not supported打电话时cudaMallocManaged include cuda runtime h include
  • 合理的密码强度正则表达式

    我们使用标准的 ASP NET 身份验证提供程序 恰好是 AspNetSqlMembershipProvider 默认密码强度要求对于我们的需求来说有点过高 我们要求用户输入至少由字母数字组成的密码 即 必须包含字母和至少一个数字 如果用户
  • 拒绝 git 推送

    To email protected cdn cgi l email protection xxx xxxxx git rejected master gt master non fast forward error failed to p
  • F# 类型函数和 [] 属性

    这两个 F 类型函数有什么区别 let defaultInstance1 lt a when a new unit gt a gt new a
  • 使用 Firebase 的 GoogleApiClient 中出现罕见的 NullPointerException

    我正在使用 GoogleApiClient 使用 Google 帐户登录用户 基本上 我使用 Firebase Auth 和 Google 登录 但我每天都会在某些设备上遇到这种崩溃 当我在自己的一些设备 OnePlus 3 Nexus 5
  • Spring应用程序不会在包之外启动

    我正在关注this https spring io guides gs scheduling tasks 使用 Spring 构建基本应用程序的教程 只要我遵循这个子目录结构 它就可以完美地工作 src main java hello 如果
  • WebRTC 和 Asp.Net Core

    我想将音频流从我的 Angular Web 应用程序录制到我的 Asp net Core Api 我认为 使用 SignalR 及其 websockets 是实现这一目标的好方法 通过这个打字稿代码 我可以获得一个 MediaStream
  • 如何从 AngularJS 模板中的嵌套 JSON 数组获取值?

    我下面有一些 JSON 数据 tracks album released 2013 href spotify album 3qGeRY1wt4rrLIt1YuSwHR name The Marshall Mathers LP2 Deluxe
  • 增强多边形序列化

    我在我的项目中使用增强几何体 并且需要序列化多边形 我一直在使用 boost 序列化 对于许多 boost 数据类型都没有问题 但 boost 几何似乎当前不支持序列化 因为我在序列化文件夹中找不到任何标头 有没有众所周知的方法来实现这一目