前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分享一个切片网格的生成函数

分享一个切片网格的生成函数

作者头像
lzugis
发布2021-12-06 10:35:05
4661
发布2021-12-06 10:35:05
举报
文章被收录于专栏:跟牛老师一起学WEBGIS

概述

本文分享一个切片网格生成的方法,并在openlayer中加以测试展示。

效果

256
256
验证
验证
512
512

实现代码

代码语言:javascript
复制
function getMapTileGrid(extent, zoom, tileSize = 256) {
  let resolution = 156543.03392804097
  let resolutions = []
  for (let i = 0; i < 19; i++) {
    resolutions.push(resolution)
    resolution = resolution/ 2
  }
  const val0 = resolutions[0] * tileSize / 2
  const originX = -val0
  const originY = val0
  zoom = Math.ceil(zoom)
  const val = resolutions[zoom] * tileSize
  const [xminE, yminE, xmaxE, ymaxE] = extent
  const x1 =  Math.floor((xminE - originX) / val)
  const x2 = Math.ceil((xmaxE - originX) / val)
  const y2 = Math.ceil((originY - yminE) / val)
  const y1 = Math.floor((originY - ymaxE) / val)
  let getExtentFromXy = function (x, y) {
    return [
      originX + x * val,
      originY - (y + 1) * val,
      originX + (x + 1) * val,
      originY - y * val
    ]
  }
  let features = []
  for (let i = x1; i <= x2 ; i++) {
    for (let j = y1; j <= y2 ; j++) {
      let bbox = getExtentFromXy(i, j)
      // 为方便,此处直接调用的ol的方法,可换成其他的实现
      bbox = ol.proj.transformExtent(bbox, 'EPSG:3857', 'EPSG:4326')
      const feature = turf.bboxPolygon(bbox, {
        'properties': {
          x: i,
          y: j,
          z: zoom,
          zxy: [zoom, i, j].join('-')
        }
      })
      features.push(feature)
    }
  }
  return {
    'type': 'FeatureCollection',
    'features': features
  }
}

// ol中的调用,注册地图事件
 map.on('moveend', function (e) {
   vecSource.clear()
   const view = map.getView()
   const geojson = getMapTileGrid(view.calculateExtent(), view.getZoom(), 512)
   const features = (new ol.format.GeoJSON({
     defaultDataProjection: 'EPSG:4326',
     featureProjection: 'EPSG:3857'
   })).readFeatures(geojson)
   vecSource.addFeatures(features)
 })
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 效果
  • 实现代码
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档