osm-overseas
本文回答: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 要求 / 商业用途许可。
七、常见坑
- 国内访问慢 → OSM 等国外服务国内可能被墙或延迟高;考虑 CDN 或私有化代理。
- 投影不匹配 → 都是 Web 墨卡托(EPSG:3857)兼容 vjmap;EPSG:4326 经纬度瓦片网格引擎加载不了(无配置可绕过),需换 3857 瓦片或走后端
webMapUrl重投影。 - 第三方 access token 暴露 → 生产环境设置 URL scoping(referrer 白名单)。
- ArcGIS XYZ 顺序 → 许多 ArcGIS tile 是
z/y/x(跟 TMS 类似);不要搞错。