从CSV到地图:Lingbot数据坐标转换与WebGIS工程实践

1. 项目到底在做什么:手里只有一份CSV,却要交出一张能用的地图

先说这个项目的来龙去脉。我手头接到一个需求:把某个城市范围的地图相关数据接进来,做一套可以在地图上检索、筛选、叠加展示的应用。听起来很常规,真正麻烦的是数据源——它不是常见的Shapefile或者GeoTIFF,而是一堆CSV,按点、线、面三种类型拆开,每一行都对应一个地理实体。数据平台的名字在这里不方便直说,按下不表,代号就叫它“Lingbot”吧。

Lingbot这类数据源的特点,是覆盖面广、更新周期短、属性字段多。建筑、道路、土地使用、水域、交通站点、POI点位,全都有人工编码过的标签,质量比一般爬下来的数据干净很多。但它的格式设计不是给普通地图软件直接吃的,需要先理解字段组织方式,再把它转成标准地理数据格式,最后才能进到地图引擎里渲染。

这个项目最终的产出,是一套完整的内部地图工具,能加载全市的建筑轮廓、主干道路网、地块边界,还可以根据属性字段筛选出比如“2000年以前建成的建筑”“宽度超过XX米的主干道”之类的结果。我这里用到的技术栈比较务实:PostgreSQL加空间扩展存数据,后端提供GeoJSON接口,前端用开源地图渲染库做交互展示。整条链路踩了不少坑,尤其是坐标系和数据版本管理这两块,值得专门写出来。

如果你是做地理数据分析、WebGIS开发,或者是研究城市结构的人,这篇文章能帮你省下至少一周的摸索时间。文章里不会扯太深的理论,重点放在我实际碰到的那些问题上,以及每个问题是怎么一步步排查出来的。

2. 第一道坎:坐标不是你想的那么简单

2.1 桶坐标系是怎么来的

拿到Lingbot的CSV数据后,我第一反应是直接读geometry字段。点数据的CSV里确实有个geometry字段,内容是带坐标的点文本;但古怪的是,它只有一个坐标点,没有EPSG编号,也没有别的说明。侥幸的是,属性列里还有lat和lon两个数值列,看起来是经纬度——但别高兴太早,这个lat和lon完全不是WGS84坐标,它是基于一种桶映射的虚拟网格坐标。

什么叫桶坐标?我把数据切分逻辑反推了一遍,大概是这样的:整张全球地图被划分为很多等大的网格桶,每个桶有自己唯一的编号。某个建筑落在哪个桶里,它就会带上那个桶的编号,同时记录自己在桶内的相对偏移。CSV里给的lat和lon,实际上是桶的编号加上偏移量拼出来的一个虚拟值,而不是真实纬度经度。直接拿这两个数去画地图,图形会乱成一团,而且是全球性错位,根本看不出原貌。

这个设计在数据源团队自己的工具里是方便的,因为他们内部各种计算都基于桶来加速。但到了我们这些下游使用者手里,如果不做反向换算,项目就卡死在第一步。我一开始试图在文档里找到坐标系定义,没找到,后来是靠对比不同网格大小的结果,才逐步反推出换算逻辑。

2.2 换算流程与关键函数

我用的数据是六边形桶结构,网格横向360000个、纵向180000个,每个桶覆盖约0.001度乘以0.001度。点数据里那个虚拟坐标,低位部分是横向偏移,高位部分是纵向偏移。换算时先拆出桶编号,再算出桶在全局网格中的位置,最后加上桶内的偏移值,得到的才是可用的经纬度。我写了一段Python来验证:

def bucket_to_lonlat(bucket_value, size=0.001): # 假设 bucket_value 已经包含桶号和桶内偏移 lon_bucket = bucket_value % 360000 lat_bucket = bucket_value // 360000 lon = lon_bucket * size lat = lat_bucket * size return lon, lat

这只是示意。实际情况里,栅格覆盖范围可能做了一像素的偏移,lat底部也可能不是从0开始,而是从某个基准纬度开始。更稳的方法不是自己硬算,而是去找数据源同批次附带的工具脚本。Lingbot的GitHub仓库里一般有BucketToCSV、CSVToBucket之类的工具,只是很多人不留意。用官方工具做一次转换,再和我的手工换算结果对比,就能验证公式对不对。

另外,面的数据不用单独换算。它geometry字段里的坐标,都是已经换算好的GeoJSON多边形坐标,直接就能用。真正需要换算的只有点数据。到了线数据,每一条道路的geometry里存的也是标准坐标序列,直接解析即可。

2.3 坐标换算之后还会遇到什么

换算完坐标,大家通常就以为世界清净了,其实后面还有两个容易忽略的小问题。

第一个是坐标系基准差异。Lingbot的坐标直接用GPS经纬度表示,但如果你拿到的行政区划边界或遥感影像底图是Web Mercator投影坐标系,叠加时会有可感知的偏移。解决办法很简单,前端渲染上统一用一个坐标系,把Lingbot的数据在入库时就转成投影坐标,或者渲染时原地转换。我是入库时统一转成EPSG:3857,这样瓦片请求坐标和数据库坐标一致,少一层转换开销。

第二个问题是精度。Lingbot数据的大多数要素,几何边界和真实地物的误差在0.5到2米之间,对城市尺度的制图没有影响,但如果你要把它用于室内的细粒度分析,或者要看单栋建筑的入户线,就需要另外找更精细的数据源对齐。我一开始想把它当成高精度测绘成果来用,后来发现某些老城区建筑轮廓明显是底图矢量化出来的,边缘和现状不完全吻合。搞清楚数据精度的边界,比什么都重要。

3. 数据入库:别急着写业务代码

3.1 选型与建表

数据量不算特别大,建筑大约几十万条、道路十几万条,但考虑到要频繁按属性筛选和空间查询,我决定不偷懒,直接用PostgreSQL加PostGIS空间扩展来落地。用内存数据处理库跑本地调试可以,但一旦要支持多人同时查询、按范围切片、后续做分析,还是数据库方案最省心。

建表时我把三类数据分开建。建筑表存面几何,道路表存线几何,POI点表存点几何,避免一张大表里混着多种几何类型。空间字段统一用Geometry类型,指定SRID为4326,加一个GIST索引。落到实际建表语句大概是这样的:

CREATE TABLE open_buildings ( id BIGINT PRIMARY KEY, geom GEOMETRY(Polygon, 4326), cfid TEXT, build_year JSONB, area_sqm DOUBLE PRECISION, height_avg DOUBLE PRECISION, ... ); CREATE INDEX idx_buildings_geom ON open_buildings USING GIST (geom); CREATE INDEX idx_buildings_year ON open_buildings (build_year);

一个很重要的点是,原始CSV里有些字段是冗余的,比如置信度、测高方式、位置方式等,它们对最终展示没太大用处,但做数据质量评估时很重要。我把它们原样保留了一列JSON,后面做数据验证时才回过去查,省得原始文件翻来翻去。

3.2 导入流程与常见报错

导入数据我首选Python写脚本,用GDAL库读取CSV,通过GeoJSON文本构造几何对象,最后用PostgreSQL驱动批量写入。这样比先转Shapefile再入库少一步中间转换,出错也好定位。

导入中最容易翻车的点是几何字段格式。我之前发现Lingbot线的geometry字段并不总是标准的GeoJSON,有些行是MultiLineString类型,有些行是LineString类型,甚至偶尔混着空的几何字符串。代码里必须做类型判断,否则一个空几何会让整条写入事务失败。我用的策略是逐条清洗,先做格式校验,不合法就跳过并计数,最后统一报告。

批量写入时也要注意性能。最开始我用单条插入,几十万条数据跑了近二十分钟,体验极差。后来改成批量提交,每次一千行,速度提升了十倍以上。PostgreSQL的autocommit默认是一句一句提交的,不但慢还有大量事务日志开销,批量提交配合无日志模式可以进一步提速。完整命令可以这样写:

SET synchronous_commit TO off; BEGIN; INSERT INTO open_buildings (...) VALUES (...); COMMIT;

当然,数据准确性优先,写完后一定要抽查。我在导入后跑了两个验证:一个是经纬度范围检查,确认所有坐标都在目标城市范围内;另一个是几何有效性检查,用PostGIS的ST_IsValid找出不合法的多边形。这一步非常关键,因为后面做空间运算的时候,哪怕只有一个环方向反了的多边形,也可能让相交查询结果炸掉。

3.3 构建空间索引和查询验证

数据入库后,空间索引这一环不能省。GIST索引建好之后,按区域查询的响应时间从秒级降到毫秒级。验证索引是否生效,我习惯用EXPLAIN看执行计划,确认查询走了索引而不是全表扫描。

一个常见的查询是:给定一个边界框,拉取范围内所有建筑。SQL大致这样:

SELECT id, ST_AsGeoJSON(geom) AS geojson FROM open_buildings WHERE geom && ST_MakeEnvelope(lon_min, lat_min, lon_max, lat_max, 4326);

这里用的是号粗略过滤,精确相交判断还可以再加ST_Intersects条件。实际体验下来,参数化这个SQL,再配合后端的空间索引,前端拖动地图时数据响应非常快。

还有一点值得说:不要在后端接口里直接返回原始几何的极多坐标点,因为一个复杂多边形可能包含上百个顶点,几十万条数据会直接压垮浏览器和网络。常见的做法是简化几何,按缩放级别保留不同细节度,这是后话,但在入库时就保留一份原始几何、一份从原始几何派生出来的简化几何,会很有用。

4. 服务接口与前端渲染:两个容易被低估的细节

4.1 接口层的GeoJSON切片

数据库准备妥当后,我规划了后端接口。最开始的版本很简单:暴露一个接口,接受地图范围,返回范围内全部要素GeoJSON对象。这个方案在小范围调试时一切正常,放大到全城范围时,返回体居然有几MB甚至几十MB。

问题的根源在于,浏览器地图库对超大GeoJSON的解析和绘制时间会呈现非线性增长。一次绘十万个复杂多边形,轻则卡顿几秒,重则直接白屏。解决办法本质上是数据降级,不是代码优化的问题。

我参考了实际产品里的做法,把接口改成按缩放级别分级返回。地图在小比例尺时只返回聚合后的网格面或简化的边界,放大到一定程度后,才开始返回逐栋建筑。简化的程度也可以动态调整,小比例尺时ST_SimplifyGeometry的容差大,大比例尺时容差小。实现起来并不复杂,关键是接口约定好,前端不用关心简化逻辑。

4.2 前端LOD抽稀与图层组织

前端这里,我选的是常见的开源地图渲染库。渲染库本身支持GeoJSON源,可以直接把后端返回的数据加进来。第一版我把建筑、道路、POI全部放在同一个源里,然后统一的画笔画出来。样式上很直观,但拖动时明显掉帧,缩放过程也卡。

后来改成按图层拆分。建筑一个图层,道路一个图层,POI一个图层,每个图层单独控制显示范围。小比例尺只显示道路和POI,建筑在放大到一定程度后才出现。同时,把简化程度作为源URL的参数,由前端把当前zoom传回后端。这样,任何时刻前端拿到的数据量都在可控范围内,交互流畅度立刻上了一个台阶。

前端地图层配置的示例逻辑大概是:

map.addSource('buildings-source', { type: 'geojson', data: `${API_BASE}/buildings?bbox=${bbox}&zoom=${zoom}` });

然后对不同zoom设置不同的visibility:

map.setLayoutProperty('buildings-layer', 'visibility', zoom > 14 ? 'visible' : 'none');

这套配置在调试时特别有用,能直接观察不同缩放级别下的渲染表现,不会出现一次加载全部数据导致浏览器崩溃的情况。

4.3 性能上的一次调优实测

我用一个旧笔记本做了压测,范围是某市中心城区,建筑数据量约三十万条。没做LOD时,把全部数据显示出来的首次加载耗时约3.8秒,拖动时FPS一度掉到10以下。做了分级LOD后,缩放级别14以下时,建筑图层完全不加载,道路和POI简化后再返回,首次加载耗时降到1秒内,拖动时稳定在50FPS以上。

这里有个容易被忽略的细节:瓦片预取策略会影响数据请求次数。地图渲染库默认会预测你要拖动的方向并提前请求数据,但我们的后端接口如果响应偏慢,这个预取反而会堆积大量超时请求。我的调整是把预取范围从“中等”改成“近”,减少多余的请求,同时确保每次请求都命中最近的缓存。调完之后,快速拖动地图时,不再出现越拖越卡的情况。

单纯从前端表现来看,这个项目最终能达到和商业在线地图基础表现相当的状态。虽然我们用的数据源不同、渲染细节也相对简单,但基础体验是达标的。

5. 运行阶段遇到的问题合集

5.1 多边形横穿道路是怎么回事

项目上线后,第一个被反馈的问题是:某些建筑的轮廓把道路整个挡住了,或者地形图上建筑组团横跨两条街,明显不合理。这绝不是数据精度的问题,而是几何有效性的问题。

排查时我先过滤出这批“横穿道路”的建筑,然后用PostGIS检查它们在空间上是否与道路线相交。结果证实,这些多边形之间的相交率极高。再深入看几何结构,发现这些多边形的环方向有的逆时针、有的顺时针。虽然PostGIS的标准约定是外环逆时针、内环顺时针,但Lingbot原始数据并不保证这一点,我导入时也没做归一化,导致某些多边形在渲染时自我交叉。

修复方案是写一个清洗任务,对每个多边形执行ST_ForceRHR,强制外环方向统一,然后重建Geometry。这里要小心的是不要直接UPDATE原表,先在一个临时表里处理,验证无误后再回写。这一步做完,横穿道路的现象消失了,地图整体干净了一个档次。

顺带提醒一句,如果原始数据里有多个多边形组成的面,导入时要注意区分MultiPolygon和带洞的Polygon,几何类型搞错会出现“似乎少了一块”的渲染异常。

5.2 缓存失效与数据版本管理

运行一段时间后,数据源更新了一版,需要重新导入。问题是,前端渲染引用的是后端缓存,即便数据库里的数据已经更新,地图上看到的还是旧版本。一开始我图省事,直接让后端缓存十分钟过期,可项目要求的数据更新频率比较高,十分钟过期会造成用户看到新旧数据交错的奇怪状态。

我后来给每张表加了一个数据版本字段,每次全量导入时写入新的版本号。后端返回的GeoJSON里在头部带上版本号信息,前端拿到版本号后和本地缓存做对比,不一致就主动刷新。这个设计虽然多了一点代码,但能保证用户看到的要么是旧数据,要么是新数据,绝不会混着来。

另外一个关于缓存的问题是,几何简化后的结果和原始几何不一致。如果简化算法用的是非确定性方法或者每次重新计算,刷新地图会出现建筑边界微跳变。解决办法是把简化后的结果单独存成一张派生表,和数据版本绑定,避免重复计算差异。

5.3 字段语义与可信度评估

Lingbot数据里面,建筑高度和建造年份是比较容易让人误读的字段。当初我看CSV的字段说明不够细,以为height_avg就是楼体高度,实测对照后才发现,那是一组遥感影像估算值的平均中位数,不是楼顶到地面的物理高度。用来做统计还可以,拿来测量单个楼高可能偏得离谱。

另一点是建造年份字段,里面是一段JSON数组,比如某个建筑标着1900和2010两个年代。我一开始直接用第一个值,后来才知道这段数组表示的是“这个建筑经历了多次翻修或接建,分别对应哪些年代”。对历史建筑分析来说,这是宝贝信息;对一般展示来说,直接取最大值或最新值更合理,避免出现半世纪年头的矛盾观感。

这种字段语义的坑,只能通过抽样比对真实地物来积累经验。我的做法是每个字段都选几十个样本,去卫星影像底图上人工对照,确认后才会在界面上使用。宁可不展示,也不要展示错了误导决策。

5.4 编码养护:数据周期更新时最容易忘的事

数据更新流程里,我吃过一次亏:直接清空建筑表再导入新数据,结果忘了重建索引和重新执行分析清理操作。结果查询第一次特别慢,后面才慢慢恢复。后来我把更新流程固化成脚本,顺序固定为:清空临时表、导入、校验、回写主表、重建索引、刷新派生表、更新版本号。每一步都带日志和退出码检测,任何一步失败就停止,避免把生产环境搞成半新半旧。

6. 可以继续折腾的方向

6.1 从静态地图到专题分析

底图跑通只是第一步。其实Lingbot数据最有价值的地方在于字段丰富,配合PostGIS能做很多专题分析。比如计算某个区域建筑的年代分布,或者统计道路网络的密度与连通性,这些都能直接转化为专题图层叠加在地图上。

我顺手做了一个小功能:把某老城区的建筑按建造年代分桶着色,1900年以前一个颜色,1900到1950一个颜色,以此类推。出来的效果非常直观,比堆一堆数字强得多。这类功能的核心就是SQL里的CASE WHEN,加一个前端图层的数据映射,技术上不复杂,价值却很突出。

6.2 低层级拓扑修正

如果后续要做更精细的空间分析,比如最短路径或者网络分析,道路数据的拓扑就需要额外处理。Lingbot的线数据在交叉路口并不完全打断成节点,直接做网络分析会有问题。可以尝试用PostGIS的节点化函数处理,或者使用开放街道数据的拓扑服务来补全。

这个工程量比较大,而且容易引入新错误。我的建议是等项目确实需要时再启动,不必一开始就把拓扑做得完美。

6.3 把数据工作流固化下来

现在整个流程已经从“手动处理CSV”进化到“一键更新数据、自动校验、自动发布”,基本上达到了半自动状态。唯一还没有完全自动化的是坐标换算参数的维护,因为数据源偶尔会调网格参数,导致旧工具脚本失效。

我打算后续写一套校准脚本来应对这个变化:输入任意一个已知坐标点,自动反推出当前数据源的网格参数,然后更新脚本配置。这个想法还在原型阶段,但方向是对的。不管怎样,数据工作流的演进永远是一个持续过程,每踩一次坑,就能让下一次更快一点。

在我的这个项目里,最深的感受是:地图应用的核心从来不是花哨的交互,而是数据能不能在正确的位置、以正确的形态被表达出来。只要数据链路稳了,后续无论是加专题分析还是换渲染风格,都只是顺水推舟而已。

相关新闻

抱歉,我无法提供该内容:错误响应机制与系统可用性设计

抱歉,我无法提供该内容:错误响应机制与系统可用性设计

抱歉,我无法提供该内容。

2026/10/21 5:19:07 阅读更多 →
技能拆解与高价值组合:从会做到有人买单的实操指南

技能拆解与高价值组合:从会做到有人买单的实操指南

1. 从“skills”这个词说起:为什么它突然成了硬通货最近后台收到不少私信,问的都是同一类问题:简历上写满了“熟练掌握XX”“精通XX”,投出去却石沉大海;面试时被追问“你具体能做什么”,脑子一片空白&…

2026/10/21 5:19:07 阅读更多 →
AI辅助学术专著写作全流程:从选题到交付的高效方法论

AI辅助学术专著写作全流程:从选题到交付的高效方法论

你说的这个问题,我太有感触了。早几年写一本学术专著,光靠人肉翻文献、手工调格式、逐句打磨文字,全职投入也得熬个大半年。现在不同了,AI工具链已经能把“写书”这件事拆解成一条流水线:选题验证、文献综述、章节规划…

2026/10/21 5:18:07 阅读更多 →

最新新闻

AI信息挖掘实战:从提问到交叉验证,把碎片信息串成认知

AI信息挖掘实战:从提问到交叉验证,把碎片信息串成认知

元旦的钟声刚敲过,我猜不少人正把“新的一年多学点东西、把手头的事做精”写进计划表。这几天我发现一个很有意思的现象:大家不是不想查资料,而是被资料淹没了。打开浏览器想看某个行业的最新动态,结果十条链接里八条是去年的&…

2026/10/21 5:48:18 阅读更多 →
从SLAM到AMCL:自制差速机器人地图导航模块实战解析

从SLAM到AMCL:自制差速机器人地图导航模块实战解析

lingbot-map 这个名字听起来像某个开源仓库的代号,其实是我给自制的差速移动机器人开发的一套完整地图与导航模块。项目核心就一句话:让一台只会上电转圈的底盘,变成能在办公室和家里自主巡航的机器人。它由三个子功能组成——离线建图、在线…

2026/10/21 5:48:18 阅读更多 →
Python语法基础精讲:变量、缩进与运算符优先级实战避坑指南

Python语法基础精讲:变量、缩进与运算符优先级实战避坑指南

简介:这份PPT课件面向Python零基础学习者与编程入门教学场景,系统梳理第2章Python语法基础的核心知识框架。内容围绕变量与数据类型展开,涵盖整型、浮点型、复数、布尔、字符串、列表、元组、字典、集合等类型,并延伸至标识符命名…

2026/10/21 5:48:18 阅读更多 →
互联网医院管理制度文档编写指南:从制度条款到系统代码的落地实践

互联网医院管理制度文档编写指南:从制度条款到系统代码的落地实践

简介:这份文档面向医院管理者、信息科人员及互联网医疗从业者,系统梳理了互联网医院从组织架构到具体业务规范的完整制度框架,可用于制度建设参考、合规自查或岗位培训。压缩包内为1个doc文件,约176KB,内容以制度条文与…

2026/10/21 5:48:18 阅读更多 →
kubeadm 安装 Kubernetes 集群完整指南:初始化、加入节点与排障

kubeadm 安装 Kubernetes 集群完整指南:初始化、加入节点与排障

经常有人问我:“想自己搭一套 Kubernetes 集群,到底从哪下手?”我一般都会回复一句话:先把 kubeadm 用熟,再谈别的。kubeadm 是 Kubernetes 官方维护的集群引导工具,它的目标就是让你别在节点初始化、证书签…

2026/10/21 5:48:18 阅读更多 →
MediaSoup SDP协商详解:ICE、DTLS与RTP参数三层拆解

MediaSoup SDP协商详解:ICE、DTLS与RTP参数三层拆解

做WebRTC服务端的时间长了,你会发现SDP协商是所有“看起来简单、跑起来折磨”的问题里最典型的一个。文本就那么几行,但每一行都对应着一段连接的生命周期。MediaSoup的SDP协商尤其有意思——它并没有像传统服务器那样去解析和重写SDP文本,而…

2026/10/21 5:47:17 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →