唯杰地图 logo唯杰地图
VJMAP
EN

osm-overseas

vjmap/references/internet-map/osm-overseas.md 3.0 KB98 行
原文

本文回答:OSM / ArcGIS Online 等国外底图的加载。

一、OpenStreetMap(OSM)

WGS84 + Web 墨卡托,最常用的免费底图。

map.addSource("osm", {
  type: "raster",
  tileSize: 256,
  tiles: [
    "https://a.tile.openstreetmap.org/{z}/{x}/{y}.png",
    "https://b.tile.openstreetmap.org/{z}/{x}/{y}.png",
    "https://c.tile.openstreetmap.org/{z}/{x}/{y}.png"
  ]
});
map.addLayer({ id: "osm", type: "raster", source: "osm" });

OSM 公共服务有请求频率限制,生产环境应自建镜像。

二、国际矢量瓦片服务

如使用第三方国际矢量瓦片服务(需要对应 access token)。

transformRequest 是 Map 构造选项(MapOptions.transformRequest),不是 setStyle 的参数——setStyle(style, options) 只认 diff / localIdeographFontFamily / localFontFamily,传 transformRequest 会被静默忽略。正确写法:

const map = new vjmap.Map({
  container: "map",
  style: "https://第三方服务/styles/streets-v12.json",
  transformRequest: (url) => {
    if (!/access_token=/.test(url)) return { url: `${url}?access_token=${THIRD_PARTY_TOKEN}` };
    return { url };
  },
  center: [0, 0],
  zoom: 12
});

或直接 raster:

map.addSource("international-streets", {
  type: "raster",
  tileSize: 256,     // 按服务实际瓦片尺寸写;不写按默认 512 处理
  tiles: [
    `https://第三方栅格瓦片服务/{z}/{x}/{y}.png?token=${TILE_TOKEN}`
  ]
});

三、ArcGIS Online

map.addSource("arcgis-world", {
  type: "raster",
  tileSize: 256,
  tiles: [
    "https://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer/tile/{z}/{y}/{x}"
  ]
});

注意 ArcGIS 的 XYZ 顺序可能是 z/y/x。

四、Google Maps(非商业使用受限)

Google 无官方 XYZ 接口,一般用其 JS SDK;通过 vjmap 叠加需要跨界方案(不建议生产)。

五、国外底图的 CAD 叠加

由于都是 WGS84,不用 webMapType(默认 WGS84):

const wmsUrl = svc.wmsTileUrl({
  mapid: cadId, layers,
  srs: "EPSG:3857",
  crs: "EPSG:32649"   // CAD 的 EPSG(例如 UTM Zone 49)
});

六、Stadia / Carto / Stamen 等替代 OSM

免费的矢量瓦片 / 栅格瓦片:

  • https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}.png?api_key=...
  • https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png(引擎不替换 {s},作 tiles 时展开成 a/b/c 多个 URL)

注意它们的 API key 要求 / 商业用途许可。

七、常见坑

  1. 国内访问慢 → OSM 等国外服务国内可能被墙或延迟高;考虑 CDN 或私有化代理。
  2. 投影不匹配 → 都是 Web 墨卡托(EPSG:3857)兼容 vjmap;EPSG:4326 经纬度瓦片网格引擎加载不了(无配置可绕过),需换 3857 瓦片或走后端 webMapUrl 重投影。
  3. 第三方 access token 暴露 → 生产环境设置 URL scoping(referrer 白名单)。
  4. ArcGIS XYZ 顺序 → 许多 ArcGIS tile 是 z/y/x(跟 TMS 类似);不要搞错。