最近,我从北京搬到上海,开始了新的生活。这是生活中一个相对较大的事件,所以我使用了三个。JS进行可视化。
在此视觉案例相关的地理信息情况下,我们可以学习如何绘制地图以及如何将纬度和纬度转换为坐标值。这些是地理视觉通用技术。
然后让我们开始。
三。绘制立方体,圆柱体和不规则图形,但是如何绘制地图?
实际上,该地图也由线和多边形组成。我们可以用数据绘制它。缺少的只是数据。
地图信息的描述是一般需求,因此有一个相应的国际标准,即通过点,线和多边形描述地理信息。
通过指定点,线和多边形的类型,然后指定几个坐标位置,可以描述相应的形状。
Geojson的数据可以通过geojson.io网站预览。
例如,中国地图Geojson:
有了这个JSON,只需通过两种方式用三个JS绘制它:线和多边形。
但是还有另一个问题。Geojson记录了纬度和经度信息。我们应该如何切换到两个维度坐标?
这涉及它,这是两个维度坐标的纬度和经度问题。
这种转换无需我们自己实施。可以使用D3构建的Makato坐标转换功能来完成。
通过这种方式,我们使用三分js绘制基于Geojson的地图。
我们还需要从北京到上海。这仅是绘制Bezer曲线所必需的。我们知道两个端点的坐标,并且控制点放置在中间。
那么,您怎么知道两个端点的坐标,即上海和北京呢?
这可用于使用“ Baidu坐标拾取系统”工具。单击地图的某个位置,以直接获得该位置的纬度和经度。然后,我们进行了Makato转换并获得坐标。
绘制地图,并且也绘制了旅行的曲线。接下来,调整相机的位置,然后从北京慢慢移动到上海。
这个想法很清楚,让我们写下代码。
我们想介绍D3,然后使用D3的Makato Converting功能,
中点的坐标是北京的纬度和经度,这是我们通过“百度坐标拾取工具”获得的。
北京和上海的坐标位置也可以转换为马卡托的纬度和经度:
不用担心绘制旅行曲线,让我们先绘制地图。
首先加载Geojson:
然后绘制JSON信息的地图。
像Geojson的数据一样,将每个纬度和经度更改为通过Makato的坐标,然后分别用线和多边形绘制。
绘制多边形时,它会在北京和上海遇到黄色,而其他城市则使用蓝色。
然后实现图形线的轮廓和多边形:
轮廓线(线)指定了一系列形成几何形状的顶点,然后材料的颜色为黄色:
效果就是这样:
多边形是挤出的,也就是说,可以先绘制形状,然后通过拉伸将其变成三维。
第一个点使用moveto,后一个点为linedo,使其连接到多边形,然后厚度为0。指定的侧没有更多的斜角(斜角)。
通过这种方式,我们充满了每个省的颜色。北京和上海是黄色的,其余为蓝色。
接下来,在北京和上海之间画一条贝塞尔曲线:
用QuadraticBezierCurve3绘制Bessel曲线,控制点指定中间位置的点。
这样,地图和旅行轨迹就完成了:两者:
当然,渲染,相机和光的初始化代码:
渲染器:
渲染器的背景颜色是黑色的,画布的大小是窗户的大小。
光:
照明与每个方向的光和黑暗相同。
相机:
该摄像机使用透视摄像机,其特征是观看角,宽度和高度比以及距离范围的四个参数。
该位置设置为00 10位置,并在此位置观察0 0 0,这是北京上方的最高视图(我们将北京指定为Makato Conversion时的中心)。
修改了相机位置后,我看到的地图要大得多:
下一步是框架的渲染。每帧的渲染渲染时移动相机位置。这是从北京转移到上海的影响:
更大的功绩!让我们看一下最终效果:
该代码已上传到github:https://github.com/quarkgluonplasma/threejs-earpercize
还在此处发布副本:
地图的形状基于Geojson的规范,该规范由点,线,多边形等信息组成。
使用三分或其他绘图方法绘制地图只需要加载Geojson数据,然后通过线和多边类型绘制每个部分。
在绘画之前,应将纬度和经度转换为坐标,这需要Makato转换。
我们使用这三个.j绘制一系列顶点以形成几何形状,而绘制多边形是通过绘制形状绘制的,然后用挤出测定学(挤压几何形状)伸展到三个维度。Makato的转换直接使用D3的构建-IN函数旅行的效果是通过移动摄像机的框架实现的。
即使条目与地理相关的可视化是熟悉Geojson和Makoto的转换。
您还想做一些与地理有关的视觉或互动吗?让我们尝试一下。