6eb9adc8dcbf8af53e21162c210b6d6b12c66854.svn-base 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import FeaturesToAttribute from '../worker/featuresToAttribute.worker'
  2. import addMesh from '../business/addMesh'
  3. import {threeLayer} from '../business/initScene3D'
  4. let workers = [
  5. new FeaturesToAttribute()
  6. ]
  7. workers.forEach(worker => {
  8. worker.addEventListener('message', event => {
  9. if (event.data.incident === 'addGeo') {
  10. addMesh(event)
  11. }
  12. })
  13. })
  14. let index = 0
  15. function getWorker() {
  16. if (index >= workers.length) index = 0
  17. return workers[index++]
  18. }
  19. function addGeo(tiles) {
  20. let map = threeLayer.getMap()
  21. let setting = {
  22. center: map.getCenter(),
  23. maxNativeZoom: map.getMaxNativeZoom()
  24. }
  25. bus.emit('addGeoing')
  26. let length = workers.length
  27. let len = Math.floor(tiles.length / length)
  28. for (let i = 0; i < length; i++) {
  29. getWorker().postMessage(JSON.stringify({
  30. thing: 'getGeo',
  31. map: setting,
  32. tiles: tiles.slice(i * len, i === length - 1 ? tiles.length : len * (i + 1))
  33. }))
  34. }
  35. }
  36. function clearFids (fids) {
  37. getWorker().postMessage(JSON.stringify({
  38. thing: 'clearFids',
  39. fids: fids
  40. }))
  41. }
  42. export {
  43. addGeo,
  44. clearFids
  45. }