Cesium无需KEY调用Bing地图

前言

虽然Cesium默认已经实现了Bing地图的调用,但需要申请key。如何不用key就可调用?抱着好奇的心态去看了下他的源代码。通过分析源代码,最终完成了调用,记录如下:

Cesium原始调用

在线代码

关键源码

BingMapsImageryProvider.tileXYToQuadKey = function (x, y, level) {
  var quadkey = "";
  for (var i = level; i >= 0; --i) {
    var bitmask = 1 << i;
    var digit = 0;

    if ((x & bitmask) !== 0) {
      digit |= 1;
    }

    if ((y & bitmask) !== 0) {
      digit |= 2;
    }

    quadkey += digit;
  }
  return quadkey;
};
function buildImageResource(imageryProvider, x, y, level, request) {
  var imageUrl = imageryProvider._imageUrlTemplate;

  var subdomains = imageryProvider._imageUrlSubdomains;
  var subdomainIndex = (x + y + level) % subdomains.length;

  return imageryProvider._resource.getDerivedResource({
    url: imageUrl,
    request: request,
    templateValues: {
      quadkey: BingMapsImageryProvider.tileXYToQuadKey(x, y, level),
      subdomain: subdomains[subdomainIndex],
      culture: imageryProvider._culture,
    },
    queryParameters: {
      // this parameter tells the Bing servers to send a zero-length response
      // instead of a placeholder image for missing tiles.
      n: "z",
    },
  });
}

代码实现

  1. Bing地图信息获取,请戳

  2. 关于地址及请求参数的解析参见代码

  3. 调用地址

风格地址
影像https://ecn.t{s}.tiles.virtualearth.net/tiles/a{q}.jpeg?n=z&g=11404
影像带标注https://ecn.t{s}.tiles.virtualearth.net/tiles/h{q}.jpeg?n=z&g=11404&mkt=
https://t{s}.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{q}?n=z&mkt=en-US&it=A%2CG%2CL&og=1638
黑色https://t{s}.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{q}?n=z&mkt=en-US&it=G%2CL&cstl=WD&og=1638
道路https://ecn.t{s}.tiles.virtualearth.net/tiles/r{q}.jpeg?n=z&g=11404&mkt=&shading=hill
亮色https://t{s}.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{q}?n=z&mkt=en-US&it=G%2CL&cstl=WL&og=1638
  1. 代码实现,在线代码
  2. 关键代码
//此方法应该是QGIS中q参数的计算方法
const tileXYToQuadKey = function (x, y, level) {
  var quadkey = "";
  for (var i = level; i >= 0; --i) {
    var bitmask = 1 << i;
    var digit = 0;

    if ((x & bitmask) !== 0) {
      digit |= 1;
    }

    if ((y & bitmask) !== 0) {
      digit |= 2;
    }

    quadkey += digit;
  }
  if (quadkey[0] === '0') {
    quadkey = quadkey.substr(1);
  }
  return quadkey;
};
const imageryProvider = new Cesium.UrlTemplateImageryProvider({
  url: 'https://ecn.t{s}.tiles.virtualearth.net/tiles/a{q}.jpeg?n=z&g=11404',
  subdomains: ['0', '1', '2', '3'],
  tilingScheme: new Cesium.WebMercatorTilingScheme(),
  customTags: {
    q: function (imageryProvider, x, y, level) {
      const result = tileXYToQuadKey(x, y, level);
      console.log(imageryProvider, x, y, level, result);
      return result;
    },
  },
});
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值