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

Posted 牛老师讲GIS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一个切片网格的生成函数相关的知识,希望对你有一定的参考价值。

概述

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

效果


实现代码

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)
 )

以上是关于分享一个切片网格的生成函数的主要内容,如果未能解决你的问题,请参考以下文章

arcgis中 瓦片 和 切片的 定义 谢谢

一文掌握使用 Go 标准库 sort 对切片进行排序

R语言基础-向量|矩阵|数组|数据框|数据IO|实用函数

Python3 高级特性

python列表(list)+索引切片+修改+插入+删除+range函数生成整数列表对象

web前端学习之有用的css网格生成器分享