跳到主要内容

实时图源协议与支持状态

SqsMap 使用自研 gis-live-v1 传送 Point 完整快照或增量。11.4a 将既有桌面核验逻辑下沉到 sqs-geo 的 Rust 模块,桌面 Dataset 复用同一实现。模块可以编译到 wasm32;11.4b 已接通公开 C、WASM、SDK 和共同脚本的手动批次图源入口;11.4c1/c2 已接通 HTTP 和 WebSocket 接收器并分别完成传输验收;协议和批次入口本身不能代替网络接收器验收。

桌面既有 gis.live.connect 使用 HTTP 轮询/WebSocket 和场景 owner,随场景启停,gis.live.snapshot 冻结已显示版本供分析。统一图源句柄、跨端暂停/恢复/取消和宿主网络通道正在接入;普通 GeoJSON 的 setData/updateData 保持其原有格式,不接受 gis-live-v1 作为同名替代。

完整快照与增量

{"kind":"snapshot","epoch":"demo","sequence":"9007199254740993","points":[{"id":"a","coordinate":[117,27],"properties":{"name":"样点","active":true}}]}
{"kind":"delta","epoch":"demo","baseSequence":"9007199254740993","sequence":"9007199254740994","upserts":[{"id":"b","coordinate":[118,27],"properties":{"name":"样点二","active":null}}],"deletes":["a"]}

字段表在初始化时给定;最多32字段,名称1..64字节,类型 string/number/boolean,值可为null。每个点必须正好包含全部字段;字符串值最多1024字节,数字有限。点的ID是1..128字节唯一字符串,坐标顺序为WGS84经度/纬度,经度±180、纬度±85.0511287798066,最多4096点。

完整快照可以切换epoch。同epoch序列必须前进;相同序列和相同已核验内容不重复推进修订。delta需要明确启用,epoch相同,baseSequence等于当前序列且新序列更大;不连续返回Conflict,要求重新取得完整快照。upsert与delete不能重复或相互重叠。

epoch为1..128字节字符串。sequence/baseSequence必须是1..39位十进制u128字符串,最大340282366920938463463374607431768211455,不能转成JavaScript Number。消息版本与地图图源dataRevision是不同概念,图源接入阶段将明确它们的关联。

原子核验与预算

消息和保留点状态分别限制8MiB序列化JSON;在复制消息之前检查最多32层和200000节点,计量使用计数写入器,不先分配完整JSON文本。last batch与点状态分开保留,pending_bytes仅是序列化计量,不能当作总进程驻留内存。

非法字段、坐标、未知成员或类型返回InvalidArgument;超限、源修订u64溢出返回ResourceLimit。失败不改变点、epoch、sequence、修订或最后批次;重复消息不消耗修订。geojson返回按稳定ID排序的独立副本;修改或更新源不会改变已经冻结的数据。网络并发、频率、在途取消、暂停/恢复及完整场景所有权由后续接收器阶段实现。

Rust 模块使用

use std::collections::BTreeMap;
use sqs_geo::live::Snapshot;
let mut state = Snapshot::new(BTreeMap::from([
    ("name".into(), "string".into()),
    ("active".into(), "boolean".into()),
]))?;
state.apply(&serde_json::json!({"kind":"snapshot","epoch":"demo","sequence":"0","points":[]}), false)?;
let frozen_geojson = state.geojson();

模块不依赖HTTP客户端、应用UI、GDAL或场景宿主;复用项目已有serde/serde_json。此代码用于Rust源码集成,动态库实时方法和跨端脚本将随实际接入发布。接口与外机、移动设备及正式发行验收保持分别记录。

共同图源、HTTP轮询 与 WebSocket 已接通;scene/mobile仍继续接入。