美文网首页开源GIS加油站
OL中通过tileUrlFunction实现多底图加载

OL中通过tileUrlFunction实现多底图加载

作者: 牛老师讲GIS | 来源:发表于2021-11-09 23:41 被阅读0次

概述

业务发展好了,肯定会有一些国际业务,会用到全球底图,但是又想国内的又想用国内的,本文就结合openlayers中的tileUrlFunction加以简单实现。

效果

多底图

实现代码

const tile = new ol.layer.Tile({
  visible: true,
  source: new ol.source.XYZ({
    tileUrlFunction(zxy, pixelRatio, proj) {
      const [z, x, y] = zxy
      let url  = isInChina(zxy) ? TILEURL.NAV : TILEURL.OSM
      url = url.split('{z}').join(z)
      url = url.split('{x}').join(x)
      url = url.split('{y}').join(y)
      return url
    }
  })
});

完整代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>OpenLayers map preview</title>
  <link rel="stylesheet" href="lib/ol/ol.css" type="text/css">
  <script src="lib/ol/ol.js" type="text/javascript"></script>
<style>
html,
body,
.map {
  height: 100%;
  margin: 0; }
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
const options = {
  tileUrl: TILEURL.NAV,
  center: [105.943468, 38.08155],
  zoom: 4.5,
  minZoom: 0,
  maxZoom: 18
}
const TILEURL = {
  'NAV': 'http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8',
  'OSM': 'https://tile.openstreetmap.org/{z}/{x}/{y}.png'
}

function isInChina(zxy) {
  const [z, x, y] = zxy
  const tileExtent = getExtentFromZxy(z,x,y)
  const chinaExtent = [72.69154385120196, 2.1456019648604325, 136.8205912282765, 54.22089456253397]
  return ol.extent.intersects(tileExtent, chinaExtent)
}

const base = new ol.layer.Tile({
  visible: true,
  source: new ol.source.XYZ({
    tileUrlFunction(zxy, pixelRatio, proj) {
      const [z, x, y] = zxy
      let url  = isInChina(zxy) ? TILEURL.NAV : TILEURL.OSM
      url = url.split('{z}').join(z)
      url = url.split('{x}').join(x)
      url = url.split('{y}').join(y)
      return url
    }
  })
});

window.map = new ol.Map({
  controls: ol.control.defaults({
    attribution: false
  }).extend([]),
  target: 'map',
  layers: [base],
  view: new ol.View({
    center: ol.proj.fromLonLat(options.center),
    zoom: options.zoom,
    minZoom: options.minZoom,
    maxZoom: options.maxZoom
  })
});
</script>
</body>
</html>

相关文章

  • OL中通过tileUrlFunction实现多底图加载

    概述 业务发展好了,肯定会有一些国际业务,会用到全球底图,但是又想国内的又想用国内的,本文就结合openlayer...

  • Android加载arcgis在线和离线底图过程中坐标系不同的解

    最近在工作中遇到一个问题,Android中需要加载离线底图TPK和在线底图,在不同的底图间可以自由切换。做过GIS...

  • openlayer加载动态Tile

    可以通过加载自定义范围切片的方式加载arcgis动态服务。使用TileGisRest接口 'ol/source/T...

  • OpenLayers3学习

    在OpenLayers3中有两种加载图层的方法:ol.layer.Tile()和ol.layer.Vector()...

  • ArcGIS for IOS 使用和集成(二)

    加载底图图层与信息图层 在第一章中讲述了如果集成ArcGIS ,本章我们来讲如何使用ArcGIS 如何加载底图,在...

  • Angular4-lazyload懒加载

    在Angular4中实现懒加载html、js、css等资源。利用Angular CLI实现懒加载,通过loadCh...

  • Android10分钟手写热修复

    目录 效果展示 实现原理 Android中的类加载也是通过ClassLoader实现的,它加载类的时候是顺序遍历一...

  • 在线简历

    预览源码 1. 加载动画 这是一个伪加载动画:通过 setTimeout(fn,s) 实现的正在加载中的错觉CSS...

  • openlayer使用

    1,在opeblayer中,ol.map是核心组件 2,加载在map上的layer是个数组,是按顺序加载的,数组后...

  • Cesium卷帘对比(含源代码)

    Cesium卷帘对比分析实现,也经常应用在项目中,现阐述如下。 1.定义viewer并加载高德地图作为底图 var...

网友评论

    本文标题:OL中通过tileUrlFunction实现多底图加载

    本文链接:https://www.haomeiwen.com/subject/naxbzltx.html