洱海SHP底图处理:坐标系检查、岸线简化与掩膜提取实操指南
简介洱海SHP文件是面向GIS操作的基础底图数据适用于地图制图、空间分析、环境研究与规划应用等场景也可作为新手练习矢量数据导入与图层管理的素材。压缩包内共31个文件以shp矢量数据、dbf属性表、prj投影信息、shx/sbn/sbx空间索引以及xml元数据等类型为主整体约8.86MB格式标注清晰便于直接导入ArcGIS、QGIS等软件使用。目前已有235人学习下载。这份数据包含洱海湖泊边界、岸线、周边水系与地形等地理要素可用于提取水域范围、统计岸线长度、制作专题地图结合压缩包内的dem辅助栅格还能进行缓冲区分析、淹没模拟或生态保护区边界可视化为环境监测、科研教学和旅游规划提供基础栅格与矢量底图支持也能帮助初学者理解Shapefile的组成结构与坐标投影配置。1. 洱海SHP文件为什么说它是GIS操作底图的第一块基石很多人以为拿到一份SHP文件GIS操作就完成了大半但真正的麻烦往往从双击打开之后才开始。洱海SHP文件作为一套围绕目标湖区整理的矢量底图通常包含水域面、岸线、周边要素、等深线等图层是做环湖规划、生态监测和空间统计时的公共底图。它解决的最大问题不是“有没有图”而是让项目组所有成员在同一个坐标系、同一份边界下工作。适合GIS从业者、规划口的技术人员以及刚转行做空间分析的人。但这份底图不是拿来就用的坐标系、属性编码、边界细节都有隐藏条件。下面的内容按真实操作顺序展开从坐标系检查一路落到掩膜提取和进阶管理。2. 拿到洱海SHP后的第一件事坐标系检查与统一2.1 先看.prj再动手三个最容易踩的坐标系误区SHP文件不是一个文件而是一组文件.shp存几何形状.shx存索引.dbf存属性表.prj存坐标系信息。很多人拿到后直接拖进软件只看图形不看.prj这是第一步就翻车的原因。.prj里写着一行坐标参考信息比如GEOGCS[WGS 84]表示地理坐标经纬度PROJCS[WGS 84 / UTM zone 47N]表示投影坐标米制。如果.prj缺失软件会因为猜不出坐标系把经纬度当米画图形会严重变形或者直接飞到错误位置。坐标系误区有三个最典型。第一个是忽略.prj认为图形能打开就行第二个是不区分地理坐标系和投影坐标系直接用经纬度算面积、算距离得到的结果毫无意义第三个是多个图层混用 WGS84、CGCS2000、UTM 等叠加时产生几十米甚至上百米偏移。洱海SHP文件里如果自带.prj我会先看它属于哪一类再决定是否需要重投影。自带的坐标系通常是为原始采集服务的不一定适合你做面积统计或遥感叠加。2.2 用ogr2ogr完成坐标重投影的最小命令GDAL/OGR是GIS从业者绕不开的命令行工具处理矢量比开图形界面快得多。我一般先在终端里读取坐标系元数据再决定转换到哪个坐标系。以下命令在大多数Linux和Windows的GDAL环境中可以直接运行# 查看坐标系和图层信息 ogrinfo -so 洱海.shp 洱海 | grep -i EPSG\|Geographic\|Projected # 转成 WGS84 / UTM zone 47N适合面积统计和栅格叠加 ogr2ogr -t_srs EPSG:32647 洱海_UTM47N.shp 洱海.shp -overwrite -lco ENCODINGUTF-8第一条命令里的-so表示只查看概要信息洱海.shp是数据源后面那个洱海是图层名因为SHP通常一个文件对应一个图层。第二条命令ogr2ogr前面是目标文件后面是源文件-t_srs指定目标坐标系EPSG:32647对应 WGS84 / UTM zone 47N。这个带号覆盖东经96到102度洱海区域正在其中转为投影坐标后面积、距离的量算单位从度变成米。-overwrite表示如果目标文件已存在就覆盖避免重复生成报错。-lco ENCODINGUTF-8是图层创建选项强制属性表用 UTF-8 写入防止中文属性乱码。如果你用的是QGIS也可以右键图层选择导出在CRS一栏手工指定 EPSG:32647结果和命令行一样但命令行更适合批量处理多个SHP。处理完后再用ogrinfo检查一遍新的.prj确认转换成功。2.3 不同数据源混用时的坐标系统一策略实际项目里不会是单一SHP还会有遥感影像、DEM、GPS采样的点数据。最常见的做法是所有矢量数据统一到同一个投影坐标系栅格影像保持原始坐标系叠加时让软件实时重投影但如果你要精确裁切栅格比如用洱海SHP做掩膜必须把矢量裁切边界的坐标系和栅格统一。我一般会把矢量统一到 UTM 47N栅格如果自带坐标系先用gdalinfo查看再用gdalwarp -t_srs EPSG:32647转投影。这里有一个坑重投影后的范围、像元大小会变如果后续要做像元统计建议同时指定-tr重采样分辨率比如设为10米或30米避免不同图层像元不对齐。3. 把洱海SHP拆成面、线、注记三个图层属性筛选与参数设置3.1 面图层湖区范围与岛屿抠除面图层是底图的核心所有后续操作都依赖它。常见的洱海SHP文件里面图层可能包含多个多边形有主湖面、岛屿、岸边碎块。直接拿来用会出现“湖里长岛”的尴尬。我一般先看属性表找有没有类似ISLAND、TYPE、NAME的字段再根据字段筛选。如果字段不可靠就用几何特征过滤面积太小的、长宽比异常的多边形大概率是碎面或采集误差。以下是用Python和GeoPandas处理的例子适合需要批量清洗的场景import geopandas as gpd # 读取面图层 gdf gpd.read_file(洱海.shp, encodingutf-8) # 按属性字段筛掉岛屿如果字段名不存在会报错先打印列名确认 print(gdf.columns.tolist()) if ISLAND in gdf.columns: gdf gdf[gdf[ISLAND] 0] # 按面积过滤碎面单位取决于当前坐标系 # 如果是经纬度坐标系面积单位是平方度不适合直接比较 # 所以先投影到 UTM 47N面积单位变成平方米 gdf gdf.to_crs(EPSG:32647) gdf gdf[gdf.geometry.area 5000] # 过滤掉小于5公顷的碎面 # 写回SHP指定UTF-8编码 gdf.to_file(洱海_水域_clean.shp, encodingutf-8)这段代码里read_file能自动识别坐标系to_crs做投影转换geometry.area计算多边形面积。5000平方米的阈值不是固定的要根据项目比例尺来调如果做1:1万大比例尺底图碎面阈值可以降到1000平方米如果做全湖宏观分析5公顷以下都可以去掉。注意属性字段名可能是中文也可能是拼音读取前先打印columns就不会踩空。3.2 线图层岸线提取与简化参数岸线是洱海SHP底图里画图最常用的要素。面图层直接转线会把湖内岛屿轮廓也转出来所以先溶解面再提取边界。溶解的作用是合并相邻多边形消除内部边界。命令行实现如下# 先溶解相邻面去除湖内多边形边界 ogr2ogr -nlt POLYGON -dissolve 洱海_dissolve.shp 洱海_水域_clean.shp # 从溶解后的面提取线一条完整岸线 ogr2ogr -nlt LINESTRING 洱海_岸线.shp 洱海_dissolve.shp -explodecollections-dissolve把所有多边形合成一片连续面-nlt POLYGON指定输出几何类型避免坍缩成多点。第二步提取边界线-explodecollections把多多边形拆开如果湖面是完整一片会得到一条线如果仍有岛屿会有多条线。提取出来的岸线节点往往过于密集文件体积大且画图卡顿。这时用 Douglas-Peucker 算法简化在QGIS里用“简化”工具在Python里用 Shapely 的simplifyfrom shapely.geometry import shape from shapely.ops import transform import geopandas as gpd gdf gpd.read_file(洱海_岸线.shp, encodingutf-8) # tolerance 参数是最大允许偏移量单位与坐标系一致 gdf.geometry gdf.geometry.simplify(tolerance20, preserve_topologyTrue) gdf.to_file(洱海_岸线_简化.shp, encodingutf-8)这里的核心参数是tolerance。我的经验是1:5万比例尺出图容差设10到20米1:1万出图设2到5米如果只是做示意底图50米容差也能接受。容差太大会让岸线失去海湾细节太小又起不到简化作用。preserve_topologyTrue保证简化后不会出现自相交这是必须开的参数。3.3 注记图层等深线、功能区标注的载体注记和文字说明不要直接写死在底图文件里不然换比例尺或者换投影后文字位置全乱。洱海SHP里如果有等深线、水质监测点、功能区划应该单独整理成注记图层。常见做法是把注记要素放进要素类的属性字段比如NAME字段存名称ELEV存深度值然后在QGIS或ArcGIS里设置标注表达式。在QGIS中右键图层选择属性打开标注选项卡勾选“Text labels”表达式框里写NAME || \n || ELEV这样图上会同时显示名字和深度。要注意标注引擎的避让设置底图上点要素多时标注会互相压盖可以设置“最优位置”或“禁止重叠”。对于水面区域我会把标注放在岸线内侧让字不压到岸线。还有一个小习惯标注字体和字号不要直接写在SHP属性里而是写在项目文件里这样换底图背景时不用重新调。4. 避坑洱海SHP使用时的四个翻车现场4.1 图形全部跑到非洲旁边现象把洱海SHP拖进QGIS图形没有出现在预期位置而是落在西非沿岸或海洋中间。原因.prj文件缺失或者软件用读取到的错误坐标系解释了坐标值。比如SHP里的坐标实际上是投影坐标米制但软件当成经纬度来绘制结果数值范围对不上。解决先打开.prj用文本编辑器确认坐标系如果缺失根据元数据描述或属性里的坐标范围推断。当坐标数值范围在几万到几十万之间多半是投影坐标常见的是 UTM 或高斯克吕格当数值在90到180之间是经纬度。推断后手工指定坐标系再重新加载。血泪经验拿到SHP先复制备份不要在原文件上手工指定坐标系因为指定错了再改回去不一定能恢复原样。4.2 计算湖泊面积得到天文数字现象用area函数计算水面面积结果不是平方千米而是几亿甚至几十亿明显不合理。原因当前图层仍处于经纬度坐标系度不是米算出来的面积是“平方度”没有物理意义。解决先投影到 UTM 47N再做面积量算。注意如果SHP恰好是 CGCS2000 或 WGS84 的地理坐标转投影时要区分是投影后再计算还是直接查询属性表里已有的面积字段。很多洱海SHP自带AREA或KM2字段这个字段是数据生产方算好的直接用更稳妥但要确认它的单位。属性表的面积字段和几何实际面积不一致的情况很常见比如字段是平面面积、几何是大地线面积两者在湖面尺度上相差不大但严谨的统计要统一口径。4.3 中文属性表全是乱码现象在ArcGIS里打开属性表正常到QGIS里打开变成“æµ·æ°´”之类乱码。原因SHP的.dbf文件对字符编码的记录不规范读取端默认用UTF-8但文件实际是GBK或其他编码写的。洱海SHP如果来自国内数据生产单位大概率是GBK编码。解决在读取时明确指定编码。QGIS的数据源管理器里可以设置编码为GBKGeoPandas读取时用参数encodinggbk。如果已经读入发现字段名变成乱码不要强行改重新指定编码再读。命令行写入时用-lco ENCODINGUTF-8能避免后续麻烦但这只影响写入的新文件。另一点属性字段名不要用中文尽量用拼音或英文这样在命令行和脚本里不用处理编码问题。4.4 与遥感影像叠加后岸线偏移了几十米现象洱海SHP的边界和遥感影像上的水面边界明显错开不是画图手抖而是系统性偏移。原因矢量边界是某年测量或数字化的底图影像可能是另一年的湖岸线本身会随水位变化波动更常见的是坐标系基准不同比如矢量是 CGCS2000影像是 WGS84两者在局部存在几米到几十米差异。解决先检查两套数据的坐标系元数据如果基准不同优先把矢量重投影到影像坐标系再用控制点校正。在QGIS中可以用“变形变换”插件选择几个稳定的地标点比如湖岸拐角、人工建筑作控制点把矢量贴合到影像上。注意不要依赖整体平移因为不同方向位移量不同要用仿射变换甚至高阶多项式。5. 用洱海SHP做底图叠加栅格掩膜与矢量配准5.1 用洱海SHP裁切影像gdalwarp裁剪命令底图不只是画图用的还要为遥感反演、水质反演提供空间范围。常见的操作是用洱海水域面裁切遥感影像把陆地部分去掉只保留湖区像元。命令行是标准做法# 用面图层裁切遥感影像输出与面范围一致的栅格 gdalwarp -cutline 洱海_水域_clean.shp -crop_to_cutline -dstnodata 0 -of GTiff input_影像.tif 洱海_湖区.tif-cutline指定矢量裁剪范围-crop_to_cutline让输出栅格的范围严格对齐到矢量边界外接矩形-dstnodata 0把湖区外的像元设为0方便后续掩膜统计。这条命令的缺点是会把湖外的零值像元也保留只是范围被矩形裁掉。如果只想保留湖区内多边形内部的像元需要再生成一个内部掩膜或者用gdal_rasterize把面栅格化成二值图再乘到原影像上# 将面图层栅格化为内部像元为1、外部为0的掩膜 gdal_rasterize -burn 1 -init 0 -tr 30 30 -a_nodata 0 -l 洱海_水域_clean 洱海_水域_clean.shp 洱海_mask.tif # 用掩膜乘影像得到只有湖区像元的影像 gdal_calc.py -A input_影像.tif -B 洱海_mask.tif --outfile洱海_湖区_内部.tif --calcA*B --NoData0这里的-tr 30 30是输出像元分辨率单位米必须和影像分辨率保持一致否则掩膜和影像像元不重合。--calcA*B表示像元值相乘湖区乘1保留原值湖区外乘0变0。如果你的源数据是浮点型、有负值0值掩膜会把原本就是0的像元也归零需要提前检查影像的取值范围。5.2 矢量配准的边界问题等深线、监测点如何贴合底图洱海SHP底图里经常还要叠加等深线、采样点等矢量。等深线数字化自旧版纸质图边界往往和现行岸线对不齐。我的经验是不要手动拖动等深线更不要直接修改几何坐标而是先统一坐标系再计算岸线变化区域把等深线整条按偏移量平移。偏移量可以用两次岸线之间的缓冲区差来估计# 生成新岸线的缓冲区比如前后各10米 ogr2ogr -nlt POLYGON 岸线_缓冲.shp 洱海_岸线_简化.shp -dialect sqlite -sql \ SELECT ST_Buffer(geometry, 10) FROM 洱海_岸线_简化这里用SQL膨胀了10米把变化幅度在10米内的区域圈出来。如果等深线落在缓冲区之外说明那里的水下地形数据可能过期需要标记待核验而不是硬拉。这个习惯能避免做过多的主观修正也方便出报告时说明数据版本差异。5.3 图层组织的目录与命名规范和洱海SHP打交道久了会积累大量派生文件原始数据、投影版、简化版、裁切版。如果全部堆在一个文件夹一个月后自己都认不出哪个是哪个。我一般按“01原始/02投影/03加工/04输出”分目录文件名带上坐标系和比例尺信息比如洱海_水域_UTM47N_simplify20m.shp。这样即使脚本跑了多次也不会误用旧文件。元数据信息可以写在一个README.txt里记录原始坐标系、处理日期、简化容差、掩膜分辨率这样换人接手也能快速定位问题。6. 让洱海SHP底图更好用的三个进阶习惯第一个习惯是永远保留一份原始文件所有操作在副本上进行。我吃过一次亏直接修改了原始SHP的属性表把岛屿删了后来需要恢复时发现备份文件还是早期的全量版重新对属性字段累到爆。后来我所有处理脚本都以_clean.shp、_UTM47N.shp这样的后缀输出原始文件只读不写。第二个习惯是把常用处理写成脚本存放成process_erhai.py或批处理文件这样整套流程可以一键重跑。尤其当数据源更新后不需要重新点一遍菜单。第三个习惯是学会用ogrinfo和gdalinfo做快速检查每次拿到新数据先打印坐标和属性而不是立刻拖进QGIS看。这三个习惯的共同点是把空间操作从“手动点鼠标”变成一个可追溯、可重复的工作流。GIS底图的可靠性一半来自原始数据质量一半来自你对处理过程的管理。我现在的做法是每处理完一个版本就直接把图层文件名加上日期和容差参数比如洱海_岸线_2025_simplify15m.shp短到能一眼看清版本长到足够记录处理条件。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

绿色版代码阅读器实战:索引配置、中文教程与避坑指南

绿色版代码阅读器实战:索引配置、中文教程与避坑指南

简介:Source Insight 3.50 绿色中文破解修正版是一款面向嵌入式开发、C/C 程序员及源码阅读爱好者的轻量级代码编辑器工具,主要解决大型工程源码浏览、函数跳转与符号关联效率低的问题。该版本为绿色免安装形态,解压后双击绿化即可直接运行&a…

2026/10/14 5:11:25 阅读更多 →
dmalloc-5.5.2.tgz:老派C程序内存调试与泄漏排查实战指南

dmalloc-5.5.2.tgz:老派C程序内存调试与泄漏排查实战指南

简介:dmalloc-5.5.2.tgz 是开源内存调试与分配库 dmalloc 的 5.5.2 版本源码包,面向从事 C/C 开发、需要排查内存问题的程序员与系统调试人员。它可帮助定位内存泄漏、越界访问、重复释放等难以察觉的缺陷,适用于大型复杂程序的稳定性优化。压…

2026/10/13 20:06:03 阅读更多 →
YOLOv11水面垃圾检测系统:可部署、可复现、可交付的工程化实践

YOLOv11水面垃圾检测系统:可部署、可复现、可交付的工程化实践

简介:本资源是一套基于YOLOv11的水面垃圾检测系统完整实现方案,面向具备Python基础的研究人员与环保、计算机视觉领域技术人员,旨在解决水域污染监测中漂浮垃圾自动识别与定位难题,适用于环保治理、智能巡检等实际场景。压缩包为单…

2026/10/13 16:43:29 阅读更多 →

最新新闻

Cocos Creator 水波纹效果:Shader 扰动与交互涟漪实现

Cocos Creator 水波纹效果:Shader 扰动与交互涟漪实现

简介:这份资源是面向Cocos Creator开发者的一套水波纹特效项目源码,适合具备一定Shader与脚本基础、希望在游戏中实现动态水面、魔法或雨滴等视觉效果的开发者参考。压缩包共3个文件,以inscode工程配置、html页面与gitignore为主,…

2026/10/14 5:11:01 阅读更多 →
pyKT知识追踪复现框架:统一评测与训练流水线实践

pyKT知识追踪复现框架:统一评测与训练流水线实践

1. 从零散脚本到统一评测:为什么需要一套知识追踪复现框架做知识追踪方向的研究,最让人头疼的往往不是模型本身,而是复现环节。我见过太多这样的情况:论文里报告了一个漂亮的AUC,你兴冲冲地照着描述搭好网络结构&#…

2026/10/14 5:11:01 阅读更多 →
跌倒检测数据集zip文件实战:从解压到baseline的避坑指南

跌倒检测数据集zip文件实战:从解压到baseline的避坑指南

简介:跌倒检测数据集以zip压缩包形式提供,面向计算机视觉、模式识别与机器学习方向的研究者及算法开发者,用于训练和验证跌倒行为识别模型,尤其适合关注老年人健康监护与公共安全场景的智能系统研发。压缩包共收录2000个文件&…

2026/10/14 5:11:01 阅读更多 →
矩阵90度顺时针旋转的原地实现原理与工程实践

矩阵90度顺时针旋转的原地实现原理与工程实践

1. 项目概述:一道被低估的矩阵操作题,藏着工程思维的底层逻辑“牛客网-旋转矩阵/C翻转【简洁实现】”——光看标题,你可能以为这只是算法刷题平台里一道平平无奇的二维数组练习题。但在我带过的几十个模拟项目X训练营中,这道题是淘…

2026/10/14 5:11:01 阅读更多 →
AI芯片软硬件协同设计:从架构到调优的工程实践

AI芯片软硬件协同设计:从架构到调优的工程实践

1. AI芯片软硬件协同设计的核心逻辑1.1 为什么软硬件必须一起设计很多刚接触AI芯片的朋友会有一个误区,觉得芯片设计就是硬件工程师的事,软件团队等流片回来再适配就行。这个思路在传统通用CPU时代勉强能跑通,但在AI芯片领域基本等于自杀。我…

2026/10/14 5:11:01 阅读更多 →
Go语言流程控制详解:for循环、switch与defer的工程实践

Go语言流程控制详解:for循环、switch与defer的工程实践

如果你写过一段时间的 C 或者 Java,刚转 Go 时,流程控制这块第一感觉多半是:怎么这么少?没有 while,没有 do-while,switch 还自带 break,甚至 for 循环都能当 while 用。我一开始也挺不适应&…

2026/10/14 5:10:01 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →