Comments (5)
@QingMings 这是一个好问题,也是三维地球实现的一个难点。
我是这么计算切片的投影面积的:
-
一个切片有四个角点,分别是ABCD,我们需要分别计算着四个点最终在屏幕上的屏幕坐标。
-
问题的难点就在于怎么把一个三维直角坐标系中的点转换成屏幕坐标。我之前在CSDN上写过《OpenGL中的坐标变换、矩阵变换》的文章,里面写的比较清楚。这里简单说一下:
-
模型坐标系中的三维坐标乘以模型矩阵转换为世界坐标系中的坐标,WebGlobe中的模型矩阵都是单位矩阵,所以这一步在WebGlobe中可以忽略。
-
世界坐标系中的坐标通过Camera的模型矩阵转换为Camera坐标系中的坐标。
-
Camera坐标系中的坐标根据投影坐标系进行转换,将转换后的坐标进行归一化处理,得到归一化坐标,归一化坐标的范围是[-1, 1]。
-
得到归一化坐标后,将其根据Canvas的width和height映射成Canvas坐标。
-
-
这样我们就得到了ABCD四个点的Canvas坐标,这样就可以计算这四个点在Canvas屏幕上的面积,如果这个面积小于一定的阈值,那么我们就可以假设这个切片不可见。
除了计算面积之外,我还额外加了两个限定条件:1. 切片至少要有一个点在屏幕中可见;2. 切片的四个顶点是顺时针方向。
具体代码你可以考Camera中的getVisibleTilesByLevel()和_getTileVisibleInfo()这两个方法,后面这个方法会判断一个切片在当前状态下是否应该可见,前者会调用后者,计算出某一级别下所有可见的切片。
我计算的出的切片在垂直视角下,最大level的切片里面一般都是16-20个切片左右。
from webglobe.
@QingMings 兄弟,帮忙给推广一下我这个小项目啊
from webglobe.
好的,讲的很清楚,很容易理解,求推荐相关书籍入门。😀
from webglobe.
@QingMings 你可以看看知乎上有人的回答,感觉不错https://www.zhihu.com/question/26521256/answer/63869753
● WebGL Beginner's Guide 入门书籍,这本书写的挺不错,网上应该有电子版
● WebGL高级编程,这本书也不错
from webglobe.
好的
from webglobe.
Related Issues (20)
- 你好,能否写一份技术文档 HOT 1
- 地图支持离线使用么? HOT 1
- 求助:编译报错
- 大佬可以b站出个教程吗
- support for React HOT 1
- 你好,请教一下,TileGrid.getTileGridByGeo()的原理是什么,里面有什么公式吗 HOT 2
- use ServiceWorker
- Display error! HOT 2
- 有没有要用的demo HOT 1
- 当前定位显示问题 HOT 1
- 问一个问题, 百度卫星地图有吗? HOT 4
- 谷歌卫星底图是怎么拿下来的?你这个底图是google在线的吗 HOT 1
- 在buildOutput文件夹下构建的index.2459e6837d865f2e46c1.js之前的源文件是哪一个? HOT 1
- 如何通过自己制作的按钮控制地图缩放级别 HOT 1
- 请教一下,在这个地图上可以添加自定义的标注? HOT 1
- 启动时候,出现问题 HOT 1
- 关于切换切片图层类型的问题。
- 123
- 修改地图的背景图
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from webglobe.