唯杰地图 logo唯杰地图
VJMAP
EN

地图样式总览

vjmap/references/map-style/overview.md 2.9 KB48 行
原文

本文回答:vjmap 样式规范 / layer / paint / 表达式 / 数据驱动 / 主题 / 3D 拉伸 / Sprite Glyphs / 雾天空 —— vjmap 样式体系总览。

vjmap 采用 JSON 样式规范 描述地图外观,遵循业界主流 WebGL 地图样式格式。

分类

类别 目的 子文件
Style Spec 基础 version / sources / layers 结构 style-spec
图层样式 background / fill / line / symbol / circle / fill-extrusion / heatmap / hillshade / raster layer-styles
表达式 ["get", ...] / ["case", ...] / ["interpolate", ...] expressions
数据驱动样式 根据 feature 属性动态变色变粗 data-driven
3D 拉伸 fill-extrusion-height 建筑物 3D extrusion-3d
雾/天空/大气 SkyLayer / setFog / 光照 fog-sky-atmosphere
Sprite/Glyphs 图标集、字体、loadImage / addImage sprite-glyphs
主题切换 vjmap.openMapDarkStyle / LightStyle / svc.cmdUpdateStyle theme-switch

核心结构

{
  version: 8,
  name: "my-style",
  sprite: "https://.../sprite",
  glyphs: "https://.../{fontstack}/{range}.pbf",
  sources: {
    "cad-raster": { type: "raster", tiles: ["https://..."], tileSize: 256 }   // CAD 栅格瓦片是 256
  },
  layers: [
    { id: "bg",  type: "background", paint: { "background-color": "#fff" } },
    { id: "cad", type: "raster", source: "cad-raster" }
  ]
}

修改样式的两套路径

  1. 前端修改 vjmap Layer:对 GeoJSON 图层 / 矢量瓦片图层用 setPaintProperty / setLayoutProperty。
  2. 后端修改 CAD 样式:对 CAD 栅格/矢量瓦片,用 map.updateStyle(svc, { backcolor, expression, ... }) 改后端表达式(内部调 svc.cmdUpdateStyle 并刷新瓦片;只调 svc.cmdUpdateStyle 不会刷新地图)。

主题级 Top 3 陷阱

  1. paint vs layout:paint 属性(颜色、线宽)随小数 zoom 重算;多数 layout 属性按瓦片的整数 zoom 求值——但 text-size / icon-size 的 zoom 表达式会在小数 zoom 上插值。
  2. 表达式类型不一致:["==", ["get", "n"], 1] 里 n 如果是字符串 "1",对比不成立;用 ["==", ["to-number", ["get", "n"]], 1] 显式转换。
  3. CAD 栅格逐实体改色只能在后端:渲染在服务端完成,请用 map.updateStyle / svrStyleVar 表达式。但整体反色 / 单色化前端就能做:本版引擎扩展了 raster 的 raster-inverse(=1 时反色)与 raster-monochrome(非黑色时按该色单色化),如 map.setPaintProperty(svc.rasterLayerId(), "raster-inverse", 1) 或 map.setRasterInverse(svc.rasterLayerId(), 1)。