唯杰地图 logo唯杰地图
VJMAP
EN

/service 杂项

更新于 2026-04-25约 6 分钟
.md

分类代号:C.12 本章共 3 个接口

这里汇集了"不方便归到其它分类、但二开很常用"的三个能力:

  • QR Code 生成:把字符串直接渲染成 PNG 二维码
  • 字体字形 (PBF):vjmap地图渲染依赖的字体文件
  • 图片上传:把任意图片文件塞到服务器指定路径(配合前端水印/图床)

快速索引

序号 SDK 方法 URL
68 qrcode_url / qrcode_bytes / qrcodeUrl / qrcodeBytes GET /api/v1/service/qrcode?content=...&size=
69 glyphs_url / glyphs_bytes / glyphsUrl / glyphsBytes GET /api/v1/service/fonts/{fontstack}/{range}.pbf
70 upload_img / uploadImg POST /api/v1/service/uploadImg (multipart)

68 · 二维码 qrcode

查询参数

字段 默认 说明
content -(必填) 要编码的字符串;后端会 decodeURIComponent,所以不用双重编码
size 256 图片边长(像素)

响应

直接返回 image/png 字节,不是 JSON。

SDK 两种用法

  1. URL 构造(适合前端直接 <img src=...>):
url = svc.qrcode_url("https://example.com/project/42", size=512)
# http://127.0.0.1:27660/api/v1/service/qrcode?content=https%3A%2F%2Fexample.com%2Fproject%2F42&size=512&token=<jwt>
  1. 下载字节(适合服务端生成后转发/保存):
png = svc.qrcode_bytes("VJMAP", size=128)
open("qr.png", "wb").write(png)

Node.js:

const url = svc.qrcodeUrl('VJMAP', 512);
const buf = await svc.qrcodeBytes('VJMAP', 128);

实采信息

// qrcode_bytes_info.json
{ "len": 284, "md5": "2577b1157cf93feefce8c6b180a0ff42", "magic_ok": true }

69 · 字体 fonts/{fontstack}/{range}.pbf

vjmap 矢量渲染在画文字时,需要按需下载对应字体、对应 Unicode 区间的 PBF 字形文件。这个接口就是字形的分发端。

路径参数

字段 说明
fontstack 字体名,可用 , 分隔多个回退栈。后端会依次尝试,并自动在末尾追加 Arial Unicode MS Regular 作为兜底
range Unicode 字形区间,形如 0-255、256-511。通常是 256 个字形一包

响应

application/x-protobuf 字节(PBF)。

SDK

url = svc.glyphs_url("Arial Unicode MS Regular", "0-255")
pbf = svc.glyphs_bytes("Arial Unicode MS Regular", "0-255")
const url = svc.glyphsUrl('Arial Unicode MS Regular', '0-255');

实采

// glyphs_bytes_info.json
{
  "len": 75282,
  "md5": "638faf3bf9a90424d23513cfab7e9ce1"
}

用在 vjmap 里

map.setStyle({
  glyphs: 'http://127.0.0.1:27660/api/v1/service/fonts/{fontstack}/{range}.pbf?token=' + TOKEN,
  // ...其它
});

注意 {fontstack}/{range} 是 vjmap 自己替换的占位符,别让 URL 编码器把 { / } percent-encode 掉。


70 · 上传图片 uploadImg

特殊鉴权

这个接口不走普通 token,而是检查 HTTP header:

Authorization: Basic X3ZqbWFwQF8=

即 Basic base64("_vjmap@_")。后端硬编码。SDK 默认已经带上;你也能传自定义 authorization 参数覆盖。

Headers

Header 说明
Authorization 上述固定值(SDK 默认)
Uri 必填:服务器端保存目录(以 / 结尾)。SDK 参数名 uri
watermark "1" 时后端自动叠加水印(utils.NewWatermarkBase64 实现)

multipart 字段

字段 说明
upload 文件内容。注意 field name 是 upload 不是 file

响应

成功(实采):

{
  "code": 0,
  "path": "./data/test_upload/nb_upload_smoke.png",
  "url":  "nb_upload_smoke.png"
}

失败(实采:错误 Authorization):

{
  "code": 7,
  "data": {},
  "msg": "no Authorization"
}

Python

# 从本地文件上传
svc.upload_img(
    "./avatar.png",
    uri="./data/upload/avatars/",
    filename="user_42.png",
    watermark=True,
)

# 从字节上传
svc.upload_img(
    ("user_42.png", png_bytes),
    uri="./data/upload/avatars/",
)

Node.js

// Node 18+
await svc.uploadImg('./avatar.png', {
  uri: './data/upload/avatars/',
  filename: 'user_42.png',
  watermark: true,
});

// Buffer
await svc.uploadImg(buf, {
  uri: './data/upload/avatars/',
  filename: 'user_42.png',
});
这篇文档有帮助吗?