关于openlayers:ol根据xyz确定地图瓦片位置

问题

因为偶然有些奇怪的点位呈现在意料之外的地位,导致挪动到该点位所在位置没有下载对应的地图瓦片,所以须要判断该点位所处的地位(此时地图空白),作为参考信息。

解决思路

  • 第一种是间接找出该点位,通过接口数据来查找对应的经纬度坐标,但比拟繁琐,特地是数据量大时,很麻烦
  • 第二种是我曾经晓得那些缺失瓦片的信息(依据接口报错得悉瓦片的[z,x,y]),通过tileCoord来判断点位的大略地位。
import {createXYZ} from 'ol/tilegrid';

const tilecoord = [11, 1689, 886]

const tilegrid = createXYZ();
const center = tilegrid.getTileCoordCenter(tilecoord) // 瓦片的核心地位
  • 源码剖析
/**
 * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
 * @return {import("../coordinate.js").Coordinate} Tile center.
 */
getTileCoordCenter(tileCoord) {
  const origin = this.getOrigin(tileCoord[0]);
  const resolution = this.getResolution(tileCoord[0]);
  const tileSize = toSize(this.getTileSize(tileCoord[0]), this.tmpSize_);
  return [
    origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution,
    origin[1] - (tileCoord[2] + 0.5) * tileSize[1] * resolution,
  ];
}

首先获取原点,分辨率,以及瓦片大小,在通过公式就算得出对应的瓦片中心点的经纬度坐标。

总结

记录下来得起因很简略,就是为了不便调试开发。尽管这个货色并不难,但须要你去理解openlayer的源码api,因为官网文档并没有间接点明。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理