当前位置: 首页 > news >正文

第06章-几何构造函数

第06章:几何构造函数

6.1 几何构造函数概述

PostGIS 提供了丰富的几何构造函数,用于创建各种类型的空间几何对象。这些函数可以从坐标值、文本表示(WKT)、二进制表示(WKB)或其他几何对象创建新的几何。

6.1.1 构造函数分类

┌─────────────────────────────────────────────────────────────┐
│                    几何构造函数分类                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  基础构造函数                                                │
│  ├── ST_MakePoint       - 创建点                            │
│  ├── ST_MakeLine        - 创建线                            │
│  ├── ST_MakePolygon     - 创建多边形                        │
│  ├── ST_MakeEnvelope    - 创建矩形                          │
│  └── ST_MakeBox2D       - 创建边界框                        │
│                                                             │
│  文本解析函数                                                │
│  ├── ST_GeomFromText    - 从 WKT 创建                       │
│  ├── ST_GeomFromGeoJSON - 从 GeoJSON 创建                   │
│  ├── ST_GeomFromKML     - 从 KML 创建                       │
│  └── ST_GeomFromGML     - 从 GML 创建                       │
│                                                             │
│  二进制解析函数                                              │
│  ├── ST_GeomFromWKB     - 从 WKB 创建                       │
│  ├── ST_GeomFromEWKB    - 从 EWKB 创建                      │
│  └── ST_GeomFromTWKB    - 从 TWKB 创建                      │
│                                                             │
│  几何生成函数                                                │
│  ├── ST_Buffer          - 缓冲区                            │
│  ├── ST_ConvexHull      - 凸包                              │
│  ├── ST_ConcaveHull     - 凹包                              │
│  └── ST_Collect         - 几何集合                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

6.2 点的构造

6.2.1 ST_MakePoint

-- 语法
ST_MakePoint(x, y)
ST_MakePoint(x, y, z)
ST_MakePoint(x, y, z, m)-- 创建 2D 点
SELECT ST_MakePoint(116.4074, 39.9042);-- 创建带 SRID 的点
SELECT ST_SetSRID(ST_MakePoint(116.4074, 39.9042), 4326);-- 创建 3D 点(带高程)
SELECT ST_MakePoint(116.4074, 39.9042, 45.5);-- 创建 4D 点(带高程和测量值)
SELECT ST_MakePoint(116.4074, 39.9042, 45.5, 100.0);-- 批量创建点
SELECT id,ST_SetSRID(ST_MakePoint(longitude, latitude), 4326) AS geom
FROM csv_data;

6.2.2 ST_MakePointM

-- 创建带测量值的 2D 点(无 Z 值)
SELECT ST_MakePointM(116.4074, 39.9042, 1000.0);-- 应用场景:线性参考系统中的里程标记
CREATE TABLE road_markers (id SERIAL PRIMARY KEY,road_name VARCHAR(100),geom GEOMETRY(POINTM, 4326)
);INSERT INTO road_markers (road_name, geom) VALUES('京沪高速', ST_SetSRID(ST_MakePointM(116.4, 39.9, 0), 4326)),('京沪高速', ST_SetSRID(ST_MakePointM(117.0, 38.5, 150000), 4326)),('京沪高速', ST_SetSRID(ST_MakePointM(118.0, 36.0, 400000), 4326));

6.2.3 ST_Point (PostGIS 3.2+)

-- 简化的点创建函数(自动设置 SRID)
SELECT ST_Point(116.4074, 39.9042, 4326);-- 等价于
SELECT ST_SetSRID(ST_MakePoint(116.4074, 39.9042), 4326);-- 创建 3D 点
SELECT ST_Point(116.4074, 39.9042, 4326)::GEOMETRY(POINTZ);

6.2.4 从文本创建点

-- 从 WKT 创建
SELECT ST_GeomFromText('POINT(116.4074 39.9042)', 4326);
SELECT ST_GeomFromText('POINT Z(116.4074 39.9042 45.5)', 4326);
SELECT ST_GeomFromText('POINT M(116.4074 39.9042 1000)', 4326);
SELECT ST_GeomFromText('POINT ZM(116.4074 39.9042 45.5 1000)', 4326);-- 简写函数
SELECT ST_PointFromText('POINT(116.4074 39.9042)', 4326);-- 从 GeoJSON 创建
SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[116.4074,39.9042]}');-- 设置 SRID
SELECT ST_SetSRID(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[116.4074,39.9042]}'),4326
);

6.3 线的构造

6.3.1 ST_MakeLine

-- 从两点创建线
SELECT ST_MakeLine(ST_MakePoint(116.3, 39.8),ST_MakePoint(116.5, 40.0)
);-- 从点数组创建线
SELECT ST_MakeLine(ARRAY[ST_MakePoint(116.3, 39.8),ST_MakePoint(116.4, 39.9),ST_MakePoint(116.5, 40.0)
]);-- 从聚合点创建线(按顺序)
SELECT ST_MakeLine(geom ORDER BY timestamp)
FROM gps_points
WHERE device_id = 'device001'AND date_trunc('day', timestamp) = '2024-01-01';-- 创建 3D 线
SELECT ST_MakeLine(ST_MakePoint(0, 0, 0),ST_MakePoint(1, 1, 100)
);

6.3.2 ST_GeomFromText 创建线

-- 简单线
SELECT ST_GeomFromText('LINESTRING(116.3 39.8, 116.4 39.9, 116.5 40.0)', 4326);-- 3D 线
SELECT ST_GeomFromText('LINESTRING Z(0 0 0, 1 1 10, 2 2 20)', 4326);-- 带测量值的线
SELECT ST_GeomFromText('LINESTRING M(0 0 0, 1 1 100, 2 2 200)', 4326);-- 4D 线
SELECT ST_GeomFromText('LINESTRING ZM(0 0 0 0, 1 1 10 100, 2 2 20 200)', 4326);-- 多线
SELECT ST_GeomFromText('MULTILINESTRING((0 0, 1 1), (2 2, 3 3))', 4326);

6.3.3 ST_LineFromMultiPoint

-- 从多点创建线
SELECT ST_LineFromMultiPoint(ST_GeomFromText('MULTIPOINT((0 0), (1 1), (2 2))', 4326)
);-- 等价于
SELECT ST_MakeLine((SELECT array_agg(geom ORDER BY path[1]) FROM ST_DumpPoints(ST_GeomFromText('MULTIPOINT((0 0), (1 1), (2 2))', 4326)))
);

6.3.4 ST_LineFromEncodedPolyline

-- 从 Google 编码折线创建线
-- Google 编码折线是一种紧凑的折线表示方式
SELECT ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@');-- 添加 SRID
SELECT ST_SetSRID(ST_LineFromEncodedPolyline('_p~iF~ps|U_ulLnnqC_mqNvxq`@'),4326
);

6.4 多边形的构造

6.4.1 ST_MakePolygon

-- 从闭合线创建简单多边形
SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(0 0, 4 0, 4 4, 0 4, 0 0)', 4326)
);-- 创建带孔洞的多边形
SELECT ST_MakePolygon(-- 外环ST_GeomFromText('LINESTRING(0 0, 10 0, 10 10, 0 10, 0 0)', 4326),-- 内环数组ARRAY[ST_GeomFromText('LINESTRING(2 2, 8 2, 8 8, 2 8, 2 2)', 4326)]
);-- 多个孔洞
SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(0 0, 20 0, 20 20, 0 20, 0 0)', 4326),ARRAY[ST_GeomFromText('LINESTRING(2 2, 5 2, 5 5, 2 5, 2 2)', 4326),ST_GeomFromText('LINESTRING(10 10, 15 10, 15 15, 10 15, 10 10)', 4326)]
);-- 验证:线必须是闭合的
SELECT ST_IsClosed(ST_GeomFromText('LINESTRING(0 0, 4 0, 4 4, 0 4, 0 0)', 4326));

6.4.2 ST_MakeEnvelope

-- 创建矩形(边界框)
-- ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid)
SELECT ST_MakeEnvelope(116.3, 39.8, 116.5, 40.0, 4326);-- 不带 SRID
SELECT ST_MakeEnvelope(0, 0, 10, 10);-- 应用:创建网格
WITH grid_params AS (SELECT 116.0 AS x_min, 117.0 AS x_max,39.0 AS y_min, 40.0 AS y_max,0.1 AS cell_size
)
SELECT row_number() OVER () AS cell_id,ST_MakeEnvelope(x, y, x + cell_size, y + cell_size, 4326) AS geom
FROM grid_params,generate_series(x_min, x_max - cell_size, cell_size) AS x,generate_series(y_min, y_max - cell_size, cell_size) AS y;

6.4.3 ST_GeomFromText 创建多边形

-- 简单多边形
SELECT ST_GeomFromText('POLYGON((0 0, 4 0, 4 4, 0 4, 0 0))', 4326);-- 带孔洞的多边形
SELECT ST_GeomFromText('POLYGON((0 0, 10 0, 10 10, 0 10, 0 0), (2 2, 8 2, 8 8, 2 8, 2 2))',4326
);-- 多面
SELECT ST_GeomFromText('MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)), ((2 2, 3 2, 3 3, 2 3, 2 2)))',4326
);-- 3D 多边形
SELECT ST_GeomFromText('POLYGON Z((0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0))',4326
);

6.4.4 ST_BuildArea

-- 从闭合线组构建区域
SELECT ST_BuildArea(ST_Collect(ST_GeomFromText('LINESTRING(0 0, 10 0, 10 10, 0 10, 0 0)', 4326),ST_GeomFromText('LINESTRING(2 2, 8 2, 8 8, 2 8, 2 2)', 4326))
);-- 从已有边界构建多边形
SELECT ST_BuildArea(ST_ExteriorRing(ST_Buffer(ST_MakePoint(0, 0), 1)
));

6.4.5 ST_Polygonize

-- 从线集合构建多边形
SELECT ST_Polygonize(ST_Collect(ARRAY[ST_GeomFromText('LINESTRING(0 0, 4 0)', 4326),ST_GeomFromText('LINESTRING(4 0, 4 4)', 4326),ST_GeomFromText('LINESTRING(4 4, 0 4)', 4326),ST_GeomFromText('LINESTRING(0 4, 0 0)', 4326)])
);-- 从道路网络提取围合区域
SELECT (ST_Dump(ST_Polygonize(geom))).geom AS block
FROM roads
WHERE road_type = '主干道';

6.5 几何集合的构造

6.5.1 ST_Collect

-- 收集两个几何
SELECT ST_Collect(ST_MakePoint(0, 0),ST_MakePoint(1, 1)
);-- 收集多个几何
SELECT ST_Collect(ARRAY[ST_MakePoint(0, 0),ST_MakeLine(ST_MakePoint(1, 1), ST_MakePoint(2, 2)),ST_MakeEnvelope(3, 3, 4, 4)
]);-- 聚合收集
SELECT ST_Collect(geom) FROM poi WHERE category = '餐饮';-- 按分组收集
SELECT category, ST_Collect(geom) AS geom_collection
FROM poi
GROUP BY category;

6.5.2 ST_Multi

-- 将单体几何转为多体几何
SELECT ST_Multi(ST_MakePoint(0, 0));  -- MULTIPOINT((0 0))
SELECT ST_Multi(ST_MakeLine(ST_MakePoint(0, 0), ST_MakePoint(1, 1)));  -- MULTILINESTRING((0 0, 1 1))
SELECT ST_Multi(ST_MakeEnvelope(0, 0, 1, 1));  -- MULTIPOLYGON(((0 0, 1 0, 1 1, 0 1, 0 0)))-- 确保输出类型一致(常用于数据导出)
SELECT ST_Multi(geom) AS geom FROM poi;

6.5.3 几何集合的拆解

-- 拆解几何集合
SELECT (ST_Dump(ST_Collect(geom))).geom AS single_geom
FROM poi
WHERE category = '餐饮';-- 拆解并获取索引
SELECT (ST_Dump(geom)).path[1] AS part_index,(ST_Dump(geom)).geom AS part_geom
FROM multi_polygons;-- 拆解点
SELECT (ST_DumpPoints(geom)).* FROM lines;

6.6 缓冲区与包络

6.6.1 ST_Buffer

-- 点缓冲区
SELECT ST_Buffer(ST_SetSRID(ST_MakePoint(116.4, 39.9), 4326),0.01  -- 在度单位下约 1 公里
);-- 使用 Geography 类型创建精确的米制缓冲区
SELECT ST_Buffer(ST_SetSRID(ST_MakePoint(116.4, 39.9), 4326)::geography,1000  -- 1000 米
)::geometry;-- 线缓冲区
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(0 0, 1 1, 2 0)', 4326),0.1
);-- 缓冲区样式参数
-- quad_segs: 四分之一圆的线段数(默认 8)
-- endcap: 端点样式 (round, flat, square)
-- join: 连接样式 (round, mitre, bevel)
-- mitre_limit: 斜接限制SELECT ST_Buffer(ST_GeomFromText('LINESTRING(0 0, 1 1, 2 0)', 4326),0.1,'quad_segs=16 endcap=round join=round'
);-- 平头端点
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(0 0, 1 1)', 4326),0.1,'endcap=flat'
);-- 方头端点
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(0 0, 1 1)', 4326),0.1,'endcap=square'
);-- 单侧缓冲区
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(0 0, 1 0, 1 1)', 4326),0.1,'side=left'  -- 左侧缓冲
);SELECT ST_Buffer(ST_GeomFromText('LINESTRING(0 0, 1 0, 1 1)', 4326),0.1,'side=right'  -- 右侧缓冲
);

6.6.2 ST_ConvexHull

-- 创建凸包
SELECT ST_ConvexHull(ST_Collect(ARRAY[ST_MakePoint(0, 0),ST_MakePoint(1, 3),ST_MakePoint(3, 1),ST_MakePoint(2, 2),  -- 内部点,不会出现在凸包边界ST_MakePoint(4, 0)])
);-- 计算 POI 的服务范围凸包
SELECT category, ST_ConvexHull(ST_Collect(geom)) AS service_area
FROM poi
GROUP BY category;

6.6.3 ST_ConcaveHull

-- 创建凹包(更贴合实际分布)
-- param_pct: 目标面积百分比 (0-1),越小越凹
SELECT ST_ConcaveHull(ST_Collect(geom),0.8  -- 目标为凸包面积的 80%
)
FROM poi
WHERE category = '餐饮';-- 允许孔洞
SELECT ST_ConcaveHull(ST_Collect(geom),0.5,true  -- 允许孔洞
)
FROM poi;-- ST_ConcaveHull vs ST_ConvexHull
-- 凸包:最小凸多边形,包含所有点
-- 凹包:更紧密的多边形,可能有凹陷

6.6.4 ST_Envelope

-- 获取边界框(最小外接矩形,与坐标轴平行)
SELECT ST_Envelope(ST_GeomFromText('POLYGON((0 0, 1 3, 3 1, 0 0))', 4326)
);-- 对于点,返回点本身
SELECT ST_Envelope(ST_MakePoint(1, 1));-- 获取表中所有数据的边界框
SELECT ST_Envelope(ST_Collect(geom)) FROM poi;-- 扩展边界框
SELECT ST_Expand(ST_Envelope(ST_Collect(geom)),0.1  -- 向外扩展 0.1 度
)
FROM poi;

6.6.5 ST_OrientedEnvelope

-- 最小外接矩形(旋转以最小化面积)
SELECT ST_OrientedEnvelope(ST_GeomFromText('POLYGON((0 0, 2 1, 3 3, 1 2, 0 0))', 4326)
);-- 比较 Envelope 和 OrientedEnvelope
SELECT ST_Area(ST_Envelope(geom)) AS axis_aligned_area,ST_Area(ST_OrientedEnvelope(geom)) AS oriented_area
FROM complex_polygons;

6.7 特殊几何构造

6.7.1 ST_MinimumBoundingCircle

-- 最小外接圆
SELECT ST_MinimumBoundingCircle(ST_Collect(ARRAY[ST_MakePoint(0, 0),ST_MakePoint(1, 0),ST_MakePoint(0.5, 1)])
);-- 获取圆的信息
WITH circle AS (SELECT ST_MinimumBoundingCircle(ST_Collect(geom)) AS geomFROM poiWHERE category = '餐饮'
)
SELECT ST_Centroid(geom) AS center,ST_Perimeter(geom) / (2 * pi()) AS radius
FROM circle;

6.7.2 ST_MinimumBoundingRadius

-- 获取最小外接圆的中心和半径
SELECT ST_MinimumBoundingRadius(ST_Collect(ARRAY[ST_MakePoint(0, 0),ST_MakePoint(1, 0),ST_MakePoint(0.5, 1)])
);-- 返回 record (center geometry, radius double precision)
SELECT (result).center,(result).radius
FROM (SELECT ST_MinimumBoundingRadius(ST_Collect(geom)) AS resultFROM poi
) t;

6.7.3 ST_GeneratePoints

-- 在多边形内随机生成点
SELECT ST_GeneratePoints(ST_MakeEnvelope(116, 39, 117, 40, 4326),100  -- 生成 100 个点
);-- 生成并拆解为单独的点
SELECT (ST_Dump(ST_GeneratePoints(polygon_geom, 100))).geom AS random_point
FROM district
WHERE name = '东城区';-- 使用种子确保可重复性
SELECT ST_GeneratePoints(ST_MakeEnvelope(0, 0, 1, 1),10,1234  -- 随机种子
);

6.7.4 ST_SquareGrid / ST_HexagonGrid

-- 创建方形网格(PostGIS 3.1+)
SELECT (ST_SquareGrid(0.1, ST_MakeEnvelope(116, 39, 117, 40, 4326))).*;-- 创建六边形网格
SELECT (ST_HexagonGrid(0.05, ST_MakeEnvelope(116, 39, 117, 40, 4326))).*;-- 只获取与区域相交的网格
SELECT g.geom
FROM district d,ST_SquareGrid(0.01, d.geom) g
WHERE d.name = '东城区'AND ST_Intersects(g.geom, d.geom);-- 六边形网格统计
SELECT g.i, g.j,g.geom,COUNT(p.id) AS poi_count
FROM ST_HexagonGrid(0.02, ST_MakeEnvelope(116, 39, 117, 40, 4326)) g
LEFT JOIN poi p ON ST_Intersects(p.geom, g.geom)
GROUP BY g.i, g.j, g.geom;

6.7.5 ST_Voronoi

-- 创建 Voronoi 多边形(泰森多边形)
SELECT ST_VoronoiPolygons(ST_Collect(ARRAY[ST_MakePoint(0, 0),ST_MakePoint(1, 0),ST_MakePoint(0.5, 1)])
);-- 带边界的 Voronoi
SELECT ST_VoronoiPolygons(ST_Collect(geom),0.0,  -- 容差ST_Expand(ST_Envelope(ST_Collect(geom)), 0.1)  -- 扩展的边界
)
FROM poi
WHERE category = '医院';-- 创建 Voronoi 线
SELECT ST_VoronoiLines(ST_Collect(geom)
)
FROM poi;

6.7.6 ST_DelaunayTriangles

-- 创建 Delaunay 三角网
SELECT ST_DelaunayTriangles(ST_Collect(ARRAY[ST_MakePoint(0, 0),ST_MakePoint(1, 0),ST_MakePoint(0.5, 1),ST_MakePoint(0.5, 0.5)])
);-- 返回边
SELECT ST_DelaunayTriangles(ST_Collect(geom),0.0,1  -- flags: 1=返回边
)
FROM poi;

6.8 曲线几何构造

6.8.1 ST_CurveToLine

-- 将圆弧转为线(用于不支持曲线的系统)
SELECT ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(0 0, 1 1, 2 0)', 4326),32  -- 每四分之一圆的点数
);-- 复合曲线转线
SELECT ST_CurveToLine(ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 2 0), (2 0, 3 0))', 4326)
);

6.8.2 ST_LineToCurve

-- 将线段逼近为曲线
SELECT ST_LineToCurve(ST_Buffer(ST_MakePoint(0, 0), 1)
);

6.8.3 圆弧几何

-- 圆弧字符串
SELECT ST_GeomFromText('CIRCULARSTRING(0 0, 1 1, 2 0)', 4326);-- 复合曲线
SELECT ST_GeomFromText('COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 2 0), (2 0, 3 0, 3 1))', 4326);-- 曲线多边形
SELECT ST_GeomFromText('CURVEPOLYGON(CIRCULARSTRING(0 0, 1 1, 2 0, 1 -1, 0 0))', 4326);-- 多曲面
SELECT ST_GeomFromText('MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 1 1, 2 0, 1 -1, 0 0)))', 4326);

6.9 格式转换构造

6.9.1 从各种格式创建几何

-- 从 WKT
SELECT ST_GeomFromText('POINT(0 0)', 4326);
SELECT ST_GeomFromEWKT('SRID=4326;POINT(0 0)');-- 从 WKB
SELECT ST_GeomFromWKB(ST_AsBinary(ST_MakePoint(0, 0)), 4326);
SELECT ST_GeomFromEWKB(ST_AsEWKB(ST_SetSRID(ST_MakePoint(0, 0), 4326)));-- 从 GeoJSON
SELECT ST_GeomFromGeoJSON('{"type":"Point","coordinates":[0,0]}');
SELECT ST_SetSRID(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[0,0]}'), 4326);-- 从 GML
SELECT ST_GeomFromGML('<gml:Point><gml:coordinates>0,0</gml:coordinates></gml:Point>');-- 从 KML
SELECT ST_GeomFromKML('<Point><coordinates>0,0</coordinates></Point>');-- 从 SVG 路径
SELECT ST_GeomFromSVG('M 0 0 L 1 1 L 2 0 Z');-- 从 TWKB(Tiny WKB,紧凑格式)
SELECT ST_GeomFromTWKB(ST_AsTWKB(ST_MakePoint(0, 0)));

6.9.2 设置和修改 SRID

-- 设置 SRID
SELECT ST_SetSRID(ST_MakePoint(116.4, 39.9), 4326);-- 更新 SRID(不转换坐标)
UPDATE poi SET geom = ST_SetSRID(geom, 4490)
WHERE ST_SRID(geom) = 4326;-- 转换 SRID(转换坐标)
SELECT ST_Transform(geom, 3857) FROM poi;-- 查看 SRID
SELECT ST_SRID(geom) FROM poi LIMIT 1;

6.10 本章小结

本章详细介绍了 PostGIS 的几何构造函数:

  1. 点构造:ST_MakePoint、ST_Point 等函数
  2. 线构造:ST_MakeLine、从文本创建线等
  3. 多边形构造:ST_MakePolygon、ST_MakeEnvelope 等
  4. 几何集合:ST_Collect、ST_Multi 等
  5. 缓冲区与包络:ST_Buffer、ST_ConvexHull、ST_Envelope 等
  6. 特殊几何:网格、Voronoi、Delaunay 等
  7. 曲线几何:圆弧和曲线几何的构造
  8. 格式转换:从各种格式创建几何

6.11 下一步

在下一章中,我们将学习几何访问函数,包括:

  • 获取几何属性
  • 访问几何组件
  • 提取坐标信息
  • 几何遍历方法

相关资源

  • PostGIS 几何构造函数
  • WKT 规范
  • GeoJSON 规范
http://www.jsqmd.com/news/159112/

相关文章:

  • RTX 4090跑不动PyTorch?检查是否正确使用了CUDA-v2.7镜像
  • UniTask反应式编程实战:AsyncReactiveProperty状态管理新思路
  • 028.快速排序与快速选择算法
  • 当海量位置数据查询超过10秒,3个技巧让响应时间降至毫秒级
  • 第07章-几何访问函数
  • 好写作AI:对比实验!使用前后,论文质量与效率的客观数据大公开
  • Qwen1.5-4B边缘AI推理革命:突破显存瓶颈的技术创新
  • 如何在5分钟内搭建分布式实时通信系统:Centrifuge终极指南
  • RStudio API实战指南:高效自动化你的数据分析工作流
  • 好写作AI用户故事:一位延毕风险研究生,如何借助AI按时完成优质论文
  • Obsidian插件测试终极指南:快速掌握BRAT自动更新工具
  • GPU性能分析完全指南:三大利器深度解析与实战优化技巧
  • 终极指南:如何在浏览器中运行完整的Linux系统
  • 好写作AI:导师视角:为什么越来越多导师认可学生使用这类工具
  • 2025 年 12 月轴承厂家权威推荐榜:深沟球/圆锥滚子/调心滚子等全品类轴承,精密传动与高负载性能深度解析 - 品牌企业推荐师(官方)
  • 为什么GNU Emacs窗口管理能提升编程效率:新手必学的完整指南
  • 好写作AI:导师视角——查重报告说话:看AI如何从40%降到5%以下
  • 第05章-空间索引与性能优化
  • 马斯克押注“应用智能”:AI×机器人或在5年内把人类推向后稀缺经济
  • 揭秘虚拟机压测性能损耗:oha VSOCK直连方案深度解析
  • Vue Trend:为你的Vue.js应用注入优雅的数据可视化力量
  • 2025面包机多士炉炉胆生产厂家TOP5权威推荐:甄选源头企业筑牢家电品质根基 - mypinpai
  • 如何快速掌握bxSlider:创建响应式轮播图完整指南
  • 第08章-几何输出函数
  • 3步掌握ClickHouse地理空间分析:告别传统GIS系统臃肿配置实战指南
  • 华美食品客户评价、信任度及原料保障解析:烘焙年货品牌年度排名 - 工业设备
  • Python图像处理终极指南:从原理到实践深度解析
  • 2025年深圳靠谱移民中介排行榜,新测评精选移民公司推荐 - mypinpai
  • Serial-Studio数据可视化方案抉择:从成本控制到技术实施的最佳实践
  • BindCraft:让蛋白质分子设计变得简单高效的AI工具