123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import * as maptalks from 'maptalks'
- import { ThreeLayer } from 'maptalks.three'
- import { unMeshAll, meshStatus } from './meshStaus'
- import initAmbient from './initAmbient'
- import { addGeo } from '../core/dyWoker'
- import { referText } from './addText'
- import { singleDelay } from '../core/util'
- import config from './config'
- // 高层数据获取
- const canvasTile = new maptalks.CanvasTileLayer('tile', {
- urlTemplate: 'https://{s}.data.osmbuildings.org/0.2/anonymous/tile/{z}/{x}/{y}.json',
- subdomains: ['a', 'b', 'c', 'd'],
- forceRenderOnMoving: true,
- forceRenderOnZooming: true,
- forceRenderOnRotating: true,
- repeatWorld: false,
- maxAvailableZoom: 15
- })
- // 3DThree与map结合
- const threeLayer = new ThreeLayer('t', {
- forceRenderOnMoving: true,
- forceRenderOnZooming: true,
- forceRenderOnRotating: true
- })
- threeLayer.prepareToDraw = initAmbient
- global.threeLayer = threeLayer
- // Maker承载容器
- let vector = new maptalks.VectorLayer('vector', {
- enableAltitude: true, // enable altitude
- altitudeProperty: 'altitude', // altitude property in properties, default by 'altitude',
- forceRenderOnMoving: true,
- forceRenderOnZooming: true,
- forceRenderOnRotating: true
- })
- // 获取高层数据
- function getCurrTiles() {
- let tileGrids = canvasTile.getTiles().tileGrids
- for (var i = 0; i < tileGrids.length; i++) {
- if (tileGrids[i].zoom >= 15) break
- }
- let zoom = tileGrids[i].zoom
- let tiles = tileGrids[i].tiles
- let maxX = tiles[0].x
- let minX = tiles[0].x
- let maxY = tiles[0].y
- let minY = tiles[0].y
- tiles.forEach(tile => {
- tile.x > maxX && (maxX = tile.x)
- tile.y > maxY && (maxY = tile.y)
- tile.x < minX && (minX = tile.x)
- tile.y < minY && (minY = tile.y)
- })
- for (let i = 1; i <= config.manyOffset; i++) {
- let largeX = maxX + i
- let smallX = minX - i
- for (let i = 1; i <= config.manyOffset; i++) {
- let largeY = maxY + i
- let smallY = minY - i
- tiles.push({ x: largeX, y: largeY, z: zoom })
- tiles.push({ x: largeX, y: smallY, z: zoom })
- tiles.push({ x: smallX, y: smallY, z: zoom })
- tiles.push({ x: smallX, y: largeY, z: zoom })
- }
- }
- return tiles
- }
- let gAddGeo = singleDelay(() => addGeo(getCurrTiles()), 100)
- let isUninstall = false
- // 动态添加删除建筑
- let dyAddGeo = singleDelay(() => {
- if (!isUninstall) {
- meshStatus()
- addGeo(getCurrTiles())
- }
- }, 500);
- map.addLayer([canvasTile, threeLayer, vector])
- bus.on('install3D', () => {
- isUninstall = false
- gAddGeo()
-
- map.on('moveend zoomend dragrotateend', referText)
- map.on('moving zoomend dragrotating', dyAddGeo)
- })
- bus.on('uninstall3D', () => {
- isUninstall = true
- map.off('moveend zoomend dragrotateend', referText)
- map.off('moving zoomend dragrotating', dyAddGeo)
-
- unMeshAll()
- })
- export {
- vector,
- threeLayer
- }
|