唯杰地图 logo唯杰地图
VJMAP
EN

map-open-way

vjmap/references/open-map/map-open-way.md 3.5 KB83 行
原文

本文回答:vjmap.MapOpenWay 的三种模式(Memory / GeomRender 栅格 / GeomRender 矢量)差异、优劣、选型。

一、三种打开方式

名称 枚举 说明 前端 style 对应
内存模式(栅格) vjmap.MapOpenWay.Memory 请求新瓦片时后端重新打开图,在内存中渲染 svc.rasterStyle()
几何渲染(栅格) vjmap.MapOpenWay.GeomRender 第一次把图入空间数据库,之后从库里查询生成栅格瓦片 svc.rasterStyle()
几何渲染(矢量) vjmap.MapOpenWay.GeomRender 同上,但以矢量瓦片(MVT)输出;前端可改样式 svc.vectorStyle()

二、选型

场景 推荐
图形仅临时查看(每次都是新图) 内存
经常需要打开同一张图 几何渲染(栅格)
需要前端自定义图层样式 / 条件过滤 几何渲染(矢量)
需要做空间查询(矩形内所有 TEXT / 相交 / 距离) 几何渲染(内存模式无空间库:不能用 conditionQueryFeature,只有表达式查询与点/矩形选择,几何只给外包矩形)
图很大(>50MB) 栅格比矢量友好(矢量 tile 可能较大)

三、优缺点对比

指标 内存 几何(栅) 几何(矢)
第一次打开速度 快 慢(首次入库) 慢(首次入库)
以后打开速度 中(有可能重开图) 秒开 秒开
占用存储 零 一份空间库 一份空间库
空间查询 不支持 支持 支持
前端改样式 不支持 不支持 支持
保留 CAD 块结构 是 否(块实体被打散) 否

打散块:几何渲染方式下,图块会打散为独立实体;通过 objectid 可以恢复关联关系(同一个块内的实体共享前缀 objectid)。

四、模式间相互切换

SDK 层没有直接 API 切换"同一个 mapid 的打开方式"。切换流程:

  1. 内存 → 几何渲染:在 vjmap 云端管理平台 打开该图,选择栅格/矢量,再打开。
  2. 几何渲染 → 内存:管理平台选择"内存"打开;如需彻底删除空间库数据,点"清空缓存数据"。

五、代码对照

内存(栅格)

const res = await svc.openMap({ mapid, mapopenway: vjmap.MapOpenWay.Memory });
const map = new vjmap.Map({
  container: "map",
  style: svc.rasterStyle(),          // 内存方式只能栅格
  ...
});

几何渲染(栅格)

const res = await svc.openMap({ mapid, mapopenway: vjmap.MapOpenWay.GeomRender });
const map = new vjmap.Map({
  container: "map",
  style: svc.rasterStyle(),
  ...
});

几何渲染(矢量)

const res = await svc.openMap({ mapid, mapopenway: vjmap.MapOpenWay.GeomRender });
const map = new vjmap.Map({
  container: "map",
  style: svc.vectorStyle(),          // 矢量瓦片
  ...
});
// 前端可调用 map.enableVectorLayerHoverHighlight 做 hit-test

六、常见坑

  1. 内存打开的图想用空间查询 → 不支持。改成几何渲染。
  2. 前端拼样式时误把 rasterStyle 和 vectorStyle 搞反 → 白屏或瓦片报 404。
  3. 首开几何渲染图等待时间长 → 这是在做空间库入库;加 loading UI,或者提前预热。
  4. 切换模式不走管理台改配置 → 仅改前端枚举没用,后端不会转库。