ArcGIS官方提供的公共底图服务,不仅种类繁多,而且每一类都经过精心设计和优化,这些底图的配色方案经过专业团队之手,色彩鲜明,为用户提供了极佳的视觉体验。
除了配色优秀外,ArcGIS的公共底图服务的接口兼容性非常优秀。目前市场上主流的地图SDK都能实现ArcGIS底图服务的无缝对接。这种良好的接口兼容性极大地降低了构建GIS应用的难度,可以让我们专注于业务逻辑实现。尤其在通过公众互联网构建GIS应用时,ArcGIS的公共底图服务是一个理想的数据源选择。
影像底图是最常用的一类GIS应用底图服务。ArcGIS 公开的世界影像底图无需apiKey认证,可以让大家放心无忧食用。
ArcGIS World Imagery 世界影像底图
ArcGIS World Imagery WMTS
Mapbox集成
在Mapbox GL JS中,我们可以采用raster数据源的方式接入ArcGIS World Imagery的 OGC WMTS 标准服务。
在OGC WMTS的GetCapabilities描述文档中,明确提供了服务的标准REST请求URL Template如下:
在Mapbox GL JS中,通过 addSource 向地图实例对象中添加ArcGIS World Imagery数据源。
const map = new mapboxgl.Map({
// ...
});
map.addSource("arcgisWorldImagery", {
type: "raster",
tiles: [
"https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/WMTS/tile/1.0.0/World_Imagery/default/default028mm/{z}/{y}/{x}.jpg"
],
tileSize: 256,
});
map.addLayer({
id: "arcgisWorldImagery-raster",
type: "raster",
source: "arcgisWorldImagery"
});
OpenLayers集成
OpenLayers中相对更加简单和直接,这也是得益于OpenLayer中直接提供了针对ArcGIS REST 服务风格的数据源封装。
通过直接指向ArcGIS标准MapServer服务端点就可以在OpenLayers中直接加载对应的地图服务。
import Map from "ol/Map.js";
import { ImageArcGISRest } from "ol/source.js";
import { Image as ImageLayer } from "ol/layer";
const map = new Map({
layers: [
new ImageLayer({
source: new ImageArcGISRest({
ratio: 1,
params: {},
url: "https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer",
})
})
],
target: "mapDiv"
})
Cesium集成 - 使用 Earth SDK
与OpenLayers类似,Cesium可以更方便的接入ArcGIS MapServer提供的切片地图服务标准REST接口。
以国内广泛使用的来自CesiumLab的Earth SDK为例,仅需要通过ArcGIS切片服务的请求地址来构建对应的SceneObject即可。
const imageryLayer = esObjMgr.createSceneObjectFromJson({
id: nanoid(),
type: "ESImageryLayer",
url: "https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
zIndex: 1,
name: "argis",
allowPicking: true,
maximumLevel: 15,
});
Earth SDK在原生Cesium之上提供了一层封装,如果不使用该SDK,同样可以参考以上的方式自行构建场景对象,相信不会有太大的挑战。
以上就是通过目前主流的开源GIS框架集成ArcGIS公共底图服务的实现,如果你还有其他的心得,欢迎一起讨论学习,共同进步。
如果你觉得本文对你有些许启发,请持续关注我的公众号“戈伊星球”吧!