默认情况下,如果你用 entity 创建一个 rectangle 对象,你会发现他长下面这个样子。
rectangle 的边是沿着经纬线的。
但是如果你用 entity 创建一个 polygon 对象,你会发现,和 rectangle 长得不太一致,虽然,传入的坐标是一致的。
观察一下,我们会发现,polygon 的边并不是沿着经纬度生成的。
这样看好像不太直观,那我们把两个对象同时生成,就能更清楚的看出来差别了。
当然为了区分,我给 polygon 加了点透明度,能够看的更清楚些。
说来惭愧,很早接触 cesium 就发现了这个问题了,但是一直没静下心来仔细研究过这个问题。
恰逢最近在项目中有碰到这个问题,需要解决,于是就开始研究了一下缘由。
对于一个合格的程序员来说,碰到问题,当然要首先在网上搜一搜,看看有没有现成的解决方案。
毕竟,谁不想,“站在巨人的肩膀上”呢?
正如我所料,还真的找到了相关的讨论。
在 cesium 官方论坛发现了相关的话题:
Polygon vs rectangle curvature - CesiumJS - Cesium Community
有人问,为什么用矩形和多边形,绘制出来的样式不一致。
然后有人回复,因为两者的绘制方式不同,rectangle 是沿着经纬线绘制的,而多边形的边是沿着大地线绘制的。而且在后面,还友善的给了 github issue 链接地址,说官方正考虑增加多边形支持经纬线方式绘制这个功能。
不过我仔细一看时间,这个话题的讨论发生在 2016 年。
看到这里,不禁内心一喜,看来这功能,应该早就已经加进来了吧。
果不其然,顺着 issue 看过去,在 2019 年的时候,这个问题就被解决了。
Add Rhumb Line Support to Polygon and Polyline Geometries by shehzan10 · Pull Request #7492 · CesiumGS/cesium · GitHub
其实,只要你用的 cesium 的版本不低于 1.54 版本,默认情况下,就支持通过参数来控制多边形边的绘制方式了。
为了验证一下,我在 codepen.io 上创建了一个 demo:
ArcType
可以发现,当采用 RHUMB
类型的线的时候,确实多边形的边绘制方式也是沿着经纬线的。
其实写这篇文章的目的,并不单纯只是为了记录如何发现 cesium 里面多边形也是支持 Rhumb 类型这个事情。
其实是想感慨一下,很多时候,学习某个新的框架或者编程语言,都会遇到这样的困境。
很多时候,并不能理解,为什么有这个 api,为什么有这个属性, 这些功能的作用到底是啥,只有真正的到了对应的应用场景的时候,才会突然明白,其作用是为何。
所以编程语言、框架乃至系统,才要不断地更新完善,因为会不断地有新的需求进来。而对于新的功能,也只有到需要面对的时候,能解决自己痛点的时候,才会明白的更透彻些。
毕竟,如果没有直接的接口能解决自己的需求,就得自己做对应的开发工作,来满足自己的需求了。
如果自己的需求被满足了以后,然后把对应的需求部分所做的工作贡献出来,回馈给社区,就能进一步推动产品的发展,让产品功能更丰富。
某种意义上来说,编程语言、框架何尝又不是一种产品呢?只不过,大多数情况下,我们都是这些产品的用户而已。