boost Geometry
boost::Geometry
boost作为C++中最常用的第三方库,Geometry库里面拥有大量的开源算法。
函数 | 作用 |
---|---|
get | 获取几何图形(通常为点)的坐标值 |
get (with index) | 获取框或段的坐标值 |
set | 设置几何图形(通常为点)的坐标值 |
set (with index) | 设置Box / Segment的坐标值 |
exterior_ring | 获取多边形的外接多边形 |
interior_rings | 获取多边形的内接多边形 |
bg::model::polygon<point> poly;
bg::exterior_ring(poly) = boost::assign::tuple_list_of(0, 0)(0, 3)(3, 3)(3, 0)(0, 0);bg::model::polygon<point> poly;
bg::interior_rings(poly) = boost::assign::tuple_list_of(0, 0)(0, 3)(3, 3)(3, 0)(0, 0);
Boost.Array:适用于 Boost.Geometry中不同的点类型
Boost.Fusion:自定义不同的点的结构并适配 Boost.Geometry点的处理方法,因此,可以调用许多Boost.Geometry算法
Boost.Tuple:组成的点集也可以使用算术运算,元素可以用作 Boost.Geometry 内部的点
Boost.Polygon
函数 | 作用 |
---|---|
point_data | Boost.Polygon点类型(boost::polygon::point_data) |
rectangle_data | Boost.Polygon矩形类型 |
polygon_data | Boost.Polygon多边形类型 |
polygon_with_holes_data | Boost.Polygon多边形类型 |
Boost.Range
函数 | 作用 |
---|---|
filtered | 过滤不符合条件的数据 |
reversed | 反转数据 |
sliced | 指定在数据中切出一定部分的数据 |
strided | 指定在数据以n为步长间接取值 |
area
函数 | 作用 |
---|---|
area | 计算几何图形的面积 |
area (with strategy) | 使用指定的策略计算几何图形的面积 |
assign
函数 | 作用 |
---|---|
assign | 将一个几何图形指定给另一个几何图元 |
assign_inverse | 利用assign_ inverse和expand方便地确定两点的边界三维框 |
assign_points | 为 linestring, ring 或 polygon指定一系列点 |
assign_values | 为几何图形指定两个坐标(通常为二维点,三维点和四维点这三种情况) |
assign_zero | assign_zero函数初始化坐标为零的二维或三维点或框 |
append | 将一个或多个点附加到linestring, ring, polygon, multi-geometry中 |
buffer
自由函数缓冲区计算几何体的缓冲区(多边形是距离几何体指定最大距离内的空间点集集合)。下图显示了策略在生成的缓冲区中的作用
return_buffer
return_ buffer函数计算几何体的缓冲区(多边形是距离几何体指定最大距离内的空间点集集合)。这个带有return_前缀的版本返回缓冲区,因此必须在调用中指定模板参数。这个个人感觉功能性没有buffer好
centroid
centroid
使用指定的策略计算几何图形的质心
return_centroid
使用指定的策略计算几何图形的质心。这两个求质心的方式类似。
Densify
线段插值
vector<Point2f> Densify(const Segment2f& seg, int num) {CHECK_GT(num, 0);CHECK(!bg::intersects(seg.s, seg.e));vector<Point2f> pts{seg.s};pts.reserve(num);boost::geometry::line_interpolate(seg, bg::length(seg) / num, pts);pts.emplace_back(seg.e);return pts;
}
部分函数
函数 | 作用 |
---|---|
clear | 清除 linestring, ring 或者 polygon (exterior+interiors) 和 multi* |
convert | 将一个几何图形转换为另一个几何图元 |
convex_hull | 计算几何体的凸包 |
correct | 纠正几何图形:所有相对于其预期方向错误定向的环都将反转。对于所有没有闭点且按其应有类型键入的环,将附加第一个点。也可以校正框。 |
covered_by | 使用指定的策略检查第一个几何图形是否位于第二个几何图形的内部或边界上 |
crosses | 检查两个几何图形是否相交 |
densify | 使用指定的策略加密几何体 |
difference | 计算两种几何图形的差异.通过差分计算两种几何的空间集合论差分 |
discrete_frechet_distance | 使用指定的策略计算两个几何图形之间的离散Frechet距离(目前适用于LineString) |
discrete_hausdorff_distance | 使用指定的策略计算两个几何图形之间的离散Hausdorff距离(目前适用于 LineString-LineString, MultiPoint-MultiPoint, Point-MultiPoint, MultiLineString-MultiLineString) |
disjoint | 检查两个几何图形是否不相交 |
equals | 检查几何体在空间上是否相等 |
expand | 使用长方体来框选多个几何图形(长方体、点)的边界框 |
intersection | 计算两个几何图形的交点 |
intersects | 检查几何图形是否至少有一个交点(相交或自相切) |
is_empty | 检查几何图形是否为空集 |
is_simple | 检查几何图形是否简单 |
is_valid | 检查几何图形是否有效(在OGC意义上) |
length | 函数长度计算几何体的长度(连续点之间的距离之和)。它使用基于几何体坐标系的默认策略。 |
line_interpolate | 返回沿LineString方向插值的一个或多个点 |
make | 构造几何图形 |
make_inverse | 用逆无穷坐标构造一个长方体 |
make_zero | 构造一个坐标初始化为零的几何体 |
num_geometries | 计算几何图形的几何图形数 |
num_interior_rings | 计算几何图形的内解多边形数 |
num_points | 计算几何图形的点数 |
num_segments | 计算几何图形的线段数(segments) |
overlaps | 检查两个几何图形是否重叠 |
perimeter | 计算几何图形的周长 |
relate | 检查由遮罩定义的一对几何图形之间的关系 |
relation | 计算DE-9IM中定义的一对几何图形之间的关系 |
reverse | 反转几何图形中的点 |
simplify | 简化几何图形 |
sym_difference | 计算两种几何体的对称差 |
touches | 检查几何图形是否至少有一个接触点(自相切) |
transform | 使用策略从一个几何图形转换到另一个几何图元 |
union_ | 组合两个相互关联的几何图形 |
unique | 计算几何图形的最小集 |
within | 检查第一个几何体是否完全位于第二个几何体内部 |
distance
comparable_distance
使用指定的策略计算两个几何图形的可比距离测量值,点在多边形内部,可以使用comparable_distance
double cmpDst = boost::geometry::comparable_distance(segment,pt);
distance
使用指定的策略计算两个几何图形之间的距离。distance可以正确处理多边形外部的点,但是似乎将多边形视为实体。因此,多边形内的每个点到多边形的距离显然为0。
double cmpDst = boost::geometry::distance(segment,pt);
envelope
envelope
自由函数包络计算几何体的包络(也称为轴对齐边界框、aabb或最小边界矩形、mbr)
return_envelope
自由函数return_envelope计算几何体的包络(也称为轴对齐边界框、aabb或最小边界矩形、mbr)。这个带有return_前缀的版本返回信封,因此必须在调用中指定模板参数
点云处理
函数 | 作用 |
---|---|
add_point | 将一个点添加到另一个点 |
add_value | 将相同的值添加到点的每个坐标 |
assign_point | 用另一个点指定一个点 |
assign_value | 为点的每个坐标指定相同的值 |
cross_product | 计算两个向量的叉积 |
divide_point | 将一点除以另一点 |
divide_value | 将同一点的每个坐标除以一个值 |
dot_product | 计算2个矢量(点)的点积(或标量积) |
multiply_point | 将一个点乘以另一个点 |
multiply_value | 将点的每个坐标乘以相同的值 |
subtract_point | 将一点减去另一点 |
subtract_value | 将相同的值减去点的每个坐标 |
常数控制
函数 | 作用 |
---|---|
min_corner | 指示要获取、设置或处理的框的最小角 |
max_corner | 指示要获取、设置或处理的框的最大角 |
坐标系转换
函数 | 作用 |
---|---|
cs::cartesian | 笛卡尔坐标系 |
cs::spherical | 球面(极坐标)坐标系,以度或弧度表示 |
cs::spherical_equatorial | 球面赤道坐标系,以度或弧度表示 |
cs::geographic | 地理坐标系,以度或弧度表示 |
核心元函数
函数 | 作用 |
---|---|
closure | 将值定义为指定几何图形类型的闭包(顺时针、逆时针)的函数 |
coordinate_system | 函数将类型定义为构成指定几何类型的点类型的坐标系(笛卡尔坐标系、球面坐标系等) |
coordinate_type | 函数将类型定义为构成指定几何类型的点类型的坐标类型(int、float、double等) |
cs_tag | 函数返回任意几何体的坐标系标记(cs族) |
degree | 定义球面坐标系的平面角单位的标记。此标记指定坐标的定义单位为度(-180…180)。必须为某些坐标系指定它 |
dimension | 将值定义为构成指定几何图形类型的点类型的函数 |
interior_type | 将类型定义为指定几何类型的interior_ type(内环的容器类型)的函数 |
point_order | 将值定义为指定几何图形类型的点顺序(顺时针、逆时针)的函数 |
point_type | 将类型定义为指定几何体类型的point_ type的元函数 |
radian | 平面角单位:弧度 |
ring_type | 将类型定义为指定几何体类型的环_类型的函数 |
tag | 将类型定义为指定几何体类型的标记的函数 |
tag_cast | 标记转换,标记可以相互继承。例如,multi_ point继承multi_。通常,行为可以在不同的几何图形类型之间共享。由metafunction标记找到的标记可以转换为更基本的标记,然后由该标记分派 |
模型
函数 | 作用 |
---|---|
model::point | 基点类,具有以中性方式定义的坐标 |
model::d2::point_xy | 笛卡尔坐标系中的二维点 |
model::d3::point_xyz | 笛卡尔坐标系中的三维点 |
model::linestring | linestring(由OGC命名)是点的集合(默认为向量) |
model::polygon | 多边形包含一个外圈和零个或多个内圈 |
model::multi_point | multi_point,点的集合 |
model::multi_linestring | multi_line,linestring的集合 |
model::multi_polygon | multi_ polygon,多边形的集合 |
model::box | 类框:定义由两个描述点组成的框 |
model::ring | 环(也称为线性环)是一条不应自相交的闭合线 |
model::segment | 在几何学中,线段是由两个不同端点限定的直线的一部分,包含其端点之间直线上的每个点 |
model::referring_segment | 类段:包含两个(模板化)点引用的小类 |
空间索引
boost::geometry::index::rtree
函数 | 作用 |
---|---|
rtree() | rtree的构造函数 |
~rtree() | rtree的析构函数 |
operator=(rtree const &) | 赋值运算符 |
swap(rtree &) | 交换两个RTree的内容 |
insert(value_type const &) | 在索引中插入一个值 |
remove(value_type const &) | 从容器中删除值 |
query(Predicates const &, OutIter) | 此查询函数执行空间和k近邻搜索。它允许传递一组数据。仅当满足所有数据时才会返回值 |
qbegin(Predicates const &) | 返回指向查询范围开头的查询迭代器 |
qend() | 返回一个指向查询范围末尾的查询迭代器 |
begin() | 返回指向rtree值范围开头的迭代器 |
end() | 返回指向rtree值范围末尾的迭代器 |
size() | 返回存储值的数目 |
empty() | 查询容器是否为空 |
clear() | 删除存储在容器中的所有值 |
bounds() | 返回能够包含容器中存储的所有值的框 |
count(ValueOrIndexable const &) | 对于indexable_type,它返回可索引的值的数目等于参数。对于value_type,它返回等于参数的值的数量 |
parameters() | 返回参数 |
indexable_get() | 返回从值检索可索引的函数 |
value_eq() | 返回比较值的函数 |
get_allocator() | 返回rtree使用的分配器 |
R-tree parameters (boost::geometry::index)
函数 | 作用 |
---|---|
boost::geometry::index::linear | 线性r树创建算法参数 |
boost::geometry::index::quadratic | 二次r树生成算法参数 |
boost::geometry::index::rstar | R*-树创建算法参数 |
boost::geometry::index::dynamic_linear | 线性r树创建算法参数-运行时版本 |
boost::geometry::index::dynamic_quadratic | 二次r树创建算法参数-运行时版本 |
boost::geometry::index::dynamic_rstar | R*-树创建算法参数-运行时版本 |
其他函数
函数 | 作用 |
---|---|
boost::geometry::index::indexable | 从值中提取可索引的函数对象,这个是override转换 |
boost::geometry::index::equal_to | 函数对象比较值,这个是override转换 |
inserter(Container &) | 插入迭代器生成器,这个是override转换 |
queried(Predicates const &) | 查询索引适配器生成器 |
Predicates (boost::geometry::index)
Predicates (boost::geometry::index) 下面的这些都是与前文同名函数相同的意思,只是是适用于RTree的函数
函数 |
---|
contains(Geometry const &) |
covered_by(Geometry const &) |
covers(Geometry const &) |
disjoint(Geometry const &) |
intersects(Geometry const &) |
overlaps(Geometry const &) |
within(Geometry const &) |
satisfies(UnaryPredicate const &) |
nearest(Geometry const &, unsigned) |
Geometry策略方式
函数 | 作用 |
---|---|
strategy::area::cartesian | 笛卡尔面积计算 |
strategy::area::spherical | 球面面积计算 |
strategy::area::geographic | 地理区域计算 |
strategy::buffer::join_round | 让缓冲区创建圆角 |
strategy::buffer::join_miter | 让缓冲区创建锐角 |
strategy::buffer::end_round | 让缓冲区创建圆角端点 |
strategy::buffer::end_flat | 让缓冲区创建平端 |
strategy::buffer::distance_symmetric | 让缓冲区算法创建具有相同距离的缓冲区 |
strategy::buffer::distance_asymmetric | 让缓冲区是不对称 |
strategy::buffer::point_circle | 围绕点创建圆形缓冲区 |
strategy::buffer::point_square | 围绕点创建方形缓冲区 |
strategy::buffer::geographic_point_circle | 在地球上的一个点周围创建一个圆形缓冲区 |
strategy::buffer::side_straight | 让缓冲区沿线段使用直边(默认) |
strategy::centroid::average | 质心计算取点的平均值 |
strategy::centroid::bashein_detmer | 使用Bashein/Detmer算法计算质心 |
strategy::convex_hull::graham_andrew | Graham扫描策略计算凸包 |
strategy::densify::cartesian | 笛卡尔线段的致密化 |
strategy::densify::geographic | 地理段的致密化,对应了上文的densify方法 |
strategy::densify::spherical | 球形段的致密化,对应了上文的densify方法 |
strategy::distance::pythagoras | 计算两点之间距离的策略,对应了上文的distance方法 |
strategy::distance::pythagoras_box_box | 计算两个盒子之间距离的策略,对应了上文的distance方法 |
strategy::distance::pythagoras_point_box | 计算点与长方体之间距离的策略,对应了上文的distance方法 |
strategy::distance::haversine | 使用哈弗斯线计算完美球体上球坐标的距离 |
strategy::distance::projected_point | 点到线段的距离策略 |
strategy::distance::cross_track | 用于点到线段距离计算的策略函数 |
strategy::distance::cross_track_point_box | 用于计算点到框的距离的策略函数 |
strategy::line_interpolate::cartesian | 在笛卡尔线段上插值点,对应了上文的line_interpolate方法 |
strategy::line_interpolate::geographic | 插值地理线段上的点,对应了上文的line_interpolate方法 |
strategy::line_interpolate::spherical | 在球面段上插值点,对应了上文的line_interpolate方法 |
strategy::side::side_by_triangle | 检查点位于线段的哪一侧:线段左侧(>0),线段右侧(<0),线段上(0) |
strategy::side::side_by_cross_track | 检查大圆线段的哪一侧有一个点位于线段左侧(>0),线段右侧(<0),线段(0) |
strategy::side::spherical_side_formula | 检查大圆线段的哪一侧有一个点位于线段左侧(>0),线段右侧(<0),线段(0)上 |
strategy::side::geographic | 检查线段的哪一侧有一个点位于线段左侧(>0)、右侧(<0)和线段(0)上 |
strategy::simplify::douglas_peucker | 实现简化算法 |
strategy::transform::inverse_transformer | 在笛卡尔坐标系中进行逆变换的变换策略 |
strategy::transform::map_transformer | 从一个笛卡尔坐标系映射到另一个笛卡儿坐标系的转换策略 |
strategy::transform::rotate_transformer | 笛卡尔坐标系中的旋转变换策略 |
strategy::transform::scale_transformer | 笛卡尔系统中的尺度变换策略 |
strategy::transform::translate_transformer | 笛卡尔系统中的平移变换策略 |
strategy::transform::matrix_transformer | 笛卡尔系统中的仿射变换策略 |
strategy::within::winding | 在使用缠绕规则的检测范围内。根据点的坐标系选择内部使用的边策略。 |
strategy::within::franklin | 在使用交叉计数的检测范围内 |
strategy::within::crossings_multiply | 在使用交叉计数的检测范围内 |
示例
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/foreach.hpp>
#include <boost/assign/list_of.hpp>
namespace bg = boost::geometry;
typedef bg::model::d2::point_xy<double> Point;
typedef bg::model::segment<Point> Segment;
typedef bg::model::linestring<Point> LineString;
typedef bg::model::box<Point> Box;
typedef bg::model::ring<Point, false> Ring;
typedef bg::model::polygon<Point, false> Polygon;int main()
{Point pt0(100, 100);Point pt1(200, 200);Segment sg0(pt0, pt1);double Distance = 0;//1、点到点的距离Distance = bg::distance(pt0, pt1); // 141.421//2、点到线段的距离,如果点到直线的垂足不在线段上,所计算的距离为(点到直线的距离、线段到垂足延长的距离之和)Distance = bg::distance(Point(200, 100), sg0); // 70.7107Distance = bg::distance(Point(100, 0), sg0); // 100//3、判断线段是否相交Segment sg1(Point(0, 100), Point(100, 0));Segment sg2(Point(100, 200), Point(200, 100));bool bIntersect = false;bIntersect = bg::intersects(sg0, sg1); // 0bIntersect = bg::intersects(sg0, sg2); // 1//4、求线段与线段的交点std::list<Point> lstPoints;bg::intersection(sg0, sg1, lstPoints);lstPoints.clear();bg::intersection(sg0, sg2, lstPoints); // (150, 150)//5、判断box是否相交Box rc(Point(0, 0), Point(200, 200));Box rc0(Point(250, 250), Point(450, 450));Box rc1(Point(100, 100), Point(300, 300));bIntersect = bg::intersects(rc, rc0); // 0bIntersect = bg::intersects(rc, rc1); // 1//6、判断box是否与LineString相交LineString line0;line0.push_back(Point(10, 250));line0.push_back(Point(100, 100));line0.push_back(Point(120, -10));line0.push_back(Point(210, 200));bIntersect = bg::intersects(rc, line0); // 1bIntersect = bg::intersects(rc0, line0); // 0//7、求box与linestring的交点std::list<LineString> lstLines;bg::intersection(rc, line0, lstLines); // (40, 200),(100, 100),(118.18, 0), (124, 0),(200, 176.67)//8、点是否在box内Box rc7(Point(0, 0), Point(100, 100));bool bInside = false;bInside = bg::within(Point(50, 50), rc7); // 1bInside = bg::within(Point(0, 0), rc7); // 0//9、判断LineString与LineString是否相交LineString line1, line2, line3;line1.push_back(Point(50, 50));line1.push_back(Point(150, 50));line1.push_back(Point(50, 200));line1.push_back(Point(150, 200));line2.push_back(Point(100, 0));line2.push_back(Point(70, 100));line2.push_back(Point(150, 210));line3.push_back(Point(200, 0));line3.push_back(Point(200, 200));bIntersect = bg::intersects(line1, line2); // 1bIntersect = bg::intersects(line1, line3); // 0//10、求LineString与LineString的交点lstPoints.clear();bg::intersection(line1, line2, lstPoints); // (85, 50), (94.35, 133.48), (142.72, 200)lstPoints.clear();bg::intersection(line1, line3, lstPoints);//11、判断ring与ring是否相交Point arDPoint0[6] = {Point(0, 0), Point(100, 0), Point(200, 100), Point(100, 200), Point(0, 200), Point(0, 0)};Point arDPoint1[6] = {Point(100, 100), Point(200, 0), Point(300, 0), Point(300, 200), Point(200, 200), Point(100, 100)};Ring r0(arDPoint0, arDPoint0 + 6);Ring r1(arDPoint1, arDPoint1 + 6);bIntersect = bg::intersects(r0, r1); // 1//12、求ring与ring的交点lstPoints.clear();bg::intersection(r0, r1, lstPoints); // (150, 30), (150, 150)Polygon poly1;Polygon poly2;Polygon poly3;auto lstOf = boost::assign::list_of(Point(0, 0))(Point(200, 0))(Point(200, 200))(Point(0, 200))(Point(0, 0));poly1.outer().assign(lstOf.begin(), lstOf.end());lstOf = boost::assign::list_of(Point(50, 50))(Point(150, 50))(Point(150, 150))(Point(50, 150))(Point(50, 50));poly1.inners().push_back(lstOf);lstOf = boost::assign::list_of(Point(100, 0))(Point(120, 0))(Point(120, 200))(Point(100, 200))(Point(100, 0));poly2.outer().assign(lstOf.begin(), lstOf.end());lstOf = boost::assign::list_of(Point(100, 60))(Point(120, 60))(Point(120, 140))(Point(100, 140))(Point(100, 60));poly3.outer().assign(lstOf.begin(), lstOf.end());//13、判断polygon与polygon是否相交bIntersect = bg::intersects(poly1, poly2); // 1bIntersect = bg::intersects(poly1, poly3); // 0//14、求polygon与polygon相交的区域std::list<Polygon> lstPolygon;bg::intersection(poly1, poly2, lstPolygon);lstPolygon.clear();bg::intersection(poly1, poly3, lstPolygon);//15、判断点是否在polygon内bInside = bg::within(Point(100, 100), poly1); // 0bInside = bg::within(Point(25, 25), poly1); // 1return 0;
}
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/foreach.hpp>
#include <boost/assign/list_of.hpp>int main()
{typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;polygon green, blue;boost::geometry::read_wkt("POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)""(4.0 2.0, 4.2 1.4, 4.8 1.9, 4.4 2.2, 4.0 2.0))", green);boost::geometry::read_wkt("POLYGON((4.0 -0.5 , 3.5 1.0 , 2.0 1.5 , 3.5 2.0 , 4.0 3.5 , 4.5 2.0 , 6.0 1.5 , 4.5 1.0 , 4.0 -0.5))", blue);std::deque<polygon> output;boost::geometry::intersection(green, blue, output);int i = 0;std::cout << "green && blue:" << std::endl;BOOST_FOREACH(polygon const& p, output){std::cout << i++ << ": " << boost::geometry::area(p) << std::endl; // 0: 2.50205}return 0;
}
相关文章:

boost Geometry
boost::Geometry boost作为C中最常用的第三方库,Geometry库里面拥有大量的开源算法。 函数作用get获取几何图形(通常为点)的坐标值get (with index)获取框或段的坐标值set设置几何图形(通常为点)的坐标值set (with i…...

凉鞋的 Unity 笔记 201. 第三轮循环:引入变量
201. 第三轮循环:引入变量 在这一篇,我们进行第三轮 编辑-测试 循环。 在之前我们编写了 输出 Hello Unity 的脚本,如下: using System.Collections; using System.Collections.Generic; using UnityEngine;public class FirstGameObject …...

小魔推短视频裂变工具,如何帮助实体行业降本增效?
在如今的互联网时代,大多数的实体老板都在寻找不同的宣传方法来吸引客户,现在短视频平台已经成为重中之重的获客渠道之一,而如何在这个日活用户超7亿的平台获取客户,让更多人知道自己的门店、自己的品牌,泽成为了不少老…...

VBA技术资料MF71:查找所有空格并替换为固定字符
我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。我的教程一共九套,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到…...

c++小知识
内联函数 inline 用来替换宏函数 不能分文件编辑 在c语言中#define NULL 0在c中使用nullptr表示空指针class内存的大小计算规则使用的是内存对齐 没有成员,但是还有1个字节,我们使用这个来标记他是个类 类成员函数不存在于类中 为什么每个对象使用的…...

C#上位机序列9: 批量读写+事件广播
1. 读取配置文件及创建变量信息(点位名称,地址,数据类型(bool/short/int/float/long/double)) 2. 读任务&写任务,数据有变化时事件广播通知 using HslCommunication; using HslCommunication.Core; usi…...

ARM +FPGA GPIB IP核实现
目前在数据发生其技术上居领先的是美国的 Tektronix 公司和 Agilent 公司。 Agilent 公司的台式脉冲 / 数据发生器家族的最高时钟频率达 3GHz (定 时发生器),数据发生器 E81200 在通道数为 8CH 时数据速率为 660Mb/s, 即可以产…...

有消息称苹果Vision Pro会有廉价版
据外媒爆料,苹果公司苹果正在研发的头显产品Vision Pro,将会有廉价版。据透露,这款产品预计售价在1500美元至2500美元之间,虽然仍不算低,但较现有的Vision Pro 3499美元的起售价,还是有明显降低。 透露廉价…...

jenkins整合gerrit
背景 公司项目之前使用jenkins整合了gitlab,后面代码迁移到gerrit,所以需要修改jenkins配置。下面就简单的介绍一下jenkins如何整合gerrit。 环境 服务器:linux 环境:docker、jenkins 代码仓库:gerrit 前提 docke…...

PMP考完后应该考什么?
PMP(项目管理专业)认证是全球范围内最受认可和尊重的项目管理资格证书之一。通过PMP考试的人已经展示了他们在项目管理领域的知识和技能。然而,项目管理是一个不断发展和变化的领域,持续学习和进一步提升自己的能力是非常重要的。…...

科技资讯|苹果Vision Pro可通过手势ID检测不同用户
近日,美国专利局公布了苹果公司的一项专利申请,该专利申请涉及基于手部特征验证用户身份的技术。苹果指出,可能是多个家庭成员都想使用 Apple Vision Pro,系统必须识别不同的手势以控制 visionOS。在另一个示例中,苹果…...

CUDA编程模型- 层次结构
层次结构的划分 在GPU上,为了满足其大规模并行处理的特性,执行模型采用了大量并行化的轻量级线程。当我们谈到CUDA编程模型时,我们首先要考虑的是其线程执行层次结构。这种层次结构起始于一个被称为kernel的函数,当它在GPU上执行…...

国际站阿里云服务器无法安装程序怎么办?
阿里云服务器是阿里云推出的一种云核算产品,它能够帮助企业和个人快速建立、扩展和管理网络服务。可是,有时候在运用阿里云服务器时,或许会遇到无法装置程序的问题。本文将具体介绍如何处理这个问题。 阿里云服务器无法装置程序或许是由多种原…...

基于Vue+webpack之H5打包资源优化
前言 基于公司的业务以及今年接触到的项目大部分都是APP混合开发,即原生Android/ios H5页面开发APP。项目从产品需求的评审到方案的评审再到开发提测...这一套流程下来让我收货颇多。总想找个时间好好记录一番,大概还是自己懒惰了,一直拖到现…...

C#中DataAdapter对象
目录 一、DataAdapter对象概述 二、Fill()方法填充数据集DataSet 1.举例 2.源码 3.生成效果 三、Update()方法 1.Update()方法更新数据源 2.设置数据库主键 3.源码 4.生成效果 一、DataAdapter对象概述 DataAdapter对象是一个数据适配器对象,是DataSet与…...

Nginx正向代理,反向代理,负载均衡
Nginx正向代理,反向代理,负载均衡 Nginx当中有两种代理方式: 七层代理(http协议) 四层代理(tcp/udp流量转发) 七层代理:七层代理,代理的是http的请求和响应 客户端请求…...

安防视频监控平台EasyCVR出现视频流播放卡顿情况,如何优化?
视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能/大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼…...

VRRP基础
1.VRRP概述 VRRP( Virtual Router Redundancy Protocol,虚拟路由器冗余协议)既能够实现网关的备份,又能解决多个网关之间互相冲突的问题,从而提高网络可靠性。 通过把几台路由设备联合组成一台虚拟的“路由设备”&…...

虚实融合 智兴百业 | 赵捷副市长莅临拓世科技集团筹备展台指导,本月19号!拓世科技集团与您相约世界VR产业大会
新时代科技革命中,虚拟现实技术、5G和“元宇宙”概念崛起,助力全球范围内的数字经济和产业转型。我国也正迈向高质量发展攻坚阶段,在中部腹地的江西,政府结合全球技术趋势和自身发展需求,选择虚拟现实为新的经济增长点…...

2000-2023年省市县人工智能企业数量数据
2000-2023年省市县人工智能企业数量数据 1、时间:2000-2023年7月 2、指标:所属年度、所属省份、所属城市、所属区县、人工智能企业数量(省人工智能企业数量、地级市人工智能企业数量、区县人工智能企业数量) 3、来源࿱…...

CSP模拟58联测20 牵着她的手
题目大意 考虑所有 n n n行 m m m列的矩阵,矩阵中每个元素的值都在 1 1 1到 k k k之间。对于这样的矩阵 A A A,按照下面规则构造序列 x 1 , x 2 , ⋯ , x n m x_1,x_2,\cdots,x_{nm} x1,x2,⋯,xnm: 对于 1 ≤ i ≤ n 1\leq i\leq n …...

电脑版便签软件下载用哪个?
在面对每天繁忙的工作日程,电脑是许多上班族不可或缺的工作助手,而一款得心应手的电脑便签软件,更是可以帮助大家记录、提醒、督促各项任务按时完成的得力助手。那么,究竟在众多的电脑便签软。件中,哪一位能够真正成为…...

别再卷组件库了,Vue 拖拽库都断代了!
前言 最近在测试 Tailwind CSS 和 Uno CSS 这两种原子化 CSS 工具是否能够有效减少打包后的文件体积时,先开始分析这些工具的优缺点,然后再直接上数据,最后做了一款经典的 TodoList 来进行测试,文章都写好了就差最后的数据了。 …...

利用服务器打造创新的在线社区
在这个数字化时代,服务器是实现创意项目的关键工具之一。虽然有许多用途,但其中最引人注目的是将服务器用于构建创新的在线社区。 为什么选择在线社区? 在线社区是连接人们、促进互动和分享知识的强大工具。它们可以围绕共同的兴趣、目标或…...

CSS动画实现节流
目录 介绍: 实现代码: 介绍: 节流指的避免过于频繁的执行一个函数,例如:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,不然会频繁的请求接口,之前基本上是通过js去控制节…...

Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞
文章目录 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)1.1 漏洞描述1.2 漏洞复现1.2.1 环境启动1.2.2 漏洞验证1.2.3 漏洞利用 1.3 加固建议 Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 1.1 漏洞描述…...

视口 css
视口是浏览器上显示网页的一块区域,大小并不局限于浏览器可视区域范围。PC端和移动端视口差别很大。PC端中视口宽度始终与浏览器窗口宽度一致,移动端视口与浏览器窗口宽度完全独立。 PC端 PC端视口大小等于浏览器窗口可视区域大小,无论浏览…...

Puppeteer记录操作过程及优秀的开源插件(五)
Puppeteer记录操作过程及优秀的开源插件(五) Puppeteer记录操作过程及优秀的开源插件(五)一、简介二、自动生成测试代码三、优秀的开源插件四、参考案例 一、简介 本节我们将介绍通过浏览器工具记录用户的实际操作,并…...
联邦学习+梯度+梯度剪枝
联邦学习需要参与者在每一次的本地训练后,上传所更新的模型参数并与其他参与者共享,而参数更新中仍有可能包含所有者的敏感信息 解决方案: 加密方法(安全多方计算、同态加密)通过将明文编码为密文的方式,…...

提高研发效率还得看Apipost
随着数字化转型的加速,API(应用程序接口)已经成为企业间沟通和数据交换的关键。而在API开发和管理过程中,API文档、调试、Mock和测试的协作显得尤为重要。Apipost正是这样一款一体化协作平台,旨在解决这些问题…...