openlayers加载0级一张的TMS和加载0级两张的WMTS标准的切片地图服务

openlayers加载0级一张的TMS和加载0级两张的WMTS标准的切片地图服务

在使用openlayers加载影像地图的过程中,遇到加载TMS标准的本地离线切片显示异常的问题,包括显示层级的异常,和我其他的数据无法对应的问题,查阅资料后发现是坐标系和0级地图分幅的问题,特此记录

场景

  • 加载vectorLayer矢量图层和影像底图
  • XYZ方式加载WMTS标准的影像底图(Arcgis本地影像图切片)没有问题
  • 同样的方式加载下载的谷歌地图影像不能和矢量图层对应

出现问题的原因

查阅后发现问题主要在以下几点

  • 坐标系不同,openlayers默认底图的坐标系是EPSG:3857,而我下载的是EPSG:4326,一个投影一个地理
  • 地图分幅不同,我下载的谷歌影像地图0级是一张地图,而openlayers默认的0级别是两张地图分幅

解决方法

解决方法也很简单,要么下载地图切片时候,选择和openlayers一致的0级别地图张数,要么通过openlayers代码进行调整,这里附一下第二种解决方法

import { Tile } from 'ol/layer';
import { XYZ} from 'ol/source';
import { get as getProj } from 'ol/proj';
import { creatXYZ} from 'ol/tilegrid';

let baseImgLayer = new Tile({
	name: 'layername',
	source: new XYZ({
		url: '你的url',
		tileGrid = createXYZ({
			extent: getProj('EPSG:4326').getExtent(),
			maxResolution: 0.703125,
			maxZoom: 22,
			tileSize: Number(256)
		}),
		projection: 'EPSG:4326'
	})
})
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的例子,展示如何使用OpenLayers加载WMTS服务: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>OpenLayers WMTS Example</title> <link rel="stylesheet" href="https://openlayers.org/en/latest/css/ol.css" type="text/css"> <script src="https://openlayers.org/en/latest/build/ol.js"></script> </head> <body> <div id="map" class="map"></div> <script type="text/javascript"> var map = new ol.Map({ target: 'map', layers: [ new ol.layer.Tile({ source: new ol.source.OSM() }), new ol.layer.Tile({ source: new ol.source.WMTS({ url: 'https://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/WMTS', layer: 'WorldTimeZones', matrixSet: 'GoogleMapsCompatible', format: 'image/png', projection: 'EPSG:3857', tileGrid: new ol.tilegrid.WMTS({ origin: ol.extent.getTopLeft(ol.proj.transform([-180, 90], 'EPSG:4326', 'EPSG:3857')), resolutions: [ 156543.0339280410, 78271.51696402048, 39135.75848201023, 19567.87924100512, 9783.93962050256, 4891.96981025128, 2445.98490512564, 1222.99245256282, 611.49622628141, 305.7481131407048, 152.8740565703525, 76.43702828517624, 38.21851414258813, 19.10925707129406, 9.554628535647032, 4.777314267823516, 2.388657133911758, 1.194328566955879, 0.5971642834779395, 0.2985821417389697, 0.1492910708694849, 0.0746455354347424 ], matrixIds: [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21' ] }) }) }) ], view: new ol.View({ center: ol.proj.fromLonLat([0, 0]), zoom: 2 }) }); </script> </body> </html> ``` 在这个例子中,我们首先创建了一个OpenLayers地图对象。我们添加了两个图层。第一个图层是使用OpenStreetMap数据源的瓦片图层。第二个图层是使用WMTS数据源的瓦片图层。 我们使用`ol.source.WMTS`类创建WMTS数据源。我们指定了WMTS服务的URL,图层名称,矩阵集,格式和投影。我们还指定了一个自定义瓦片网格,其中包含瓦片的分辨率和矩阵ID。 最后,我们在地图视图中设置了中心点和缩放别。我们使用`ol.proj.fromLonLat`函数将经纬度坐标转换为Web Mercator投影坐标。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nikonikol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值