地理投影

tianxuzhang edited this page Nov 23, 2015 · 1 revision

WikiAPI--中文手册地理地理投影

D3默认包括了一些常见投影,如下所示。众多的(不太常用的)投影在扩展地理投影插件和多面体投影插件中是可用的。

由D3提供的大多数投影都是通过d3.geo.projection来创建并配置的,你可以旋转这个地球,缩放或转换画布等。除非你正在执行一个新的原始投影,否则你可能不会用D3.geo.projection来构造,但是你有可能使用这个配置方法。

d3.geo.projection(raw)

从指定的原始raw 点投影的函数,构造一个新的投影。例如,一个Mercator投影可实现为: varmercator=d3.geo.projection(function(λ,φ){ return[ λ, Math.log(Math.tan(π/4+φ/2)) ]; }); (可以参考src/geo/mercator.js全面的实现。)如果原始函数支持反转方法,则返回的投影将会显示一个对应的反转方法。 src/geo/mercator.js:ttps://github.com/mbostock/d3/blob/master/src/geo/mercator.js

projection(location)

投影从球面坐标(单位:度)转到笛卡尔坐标(单位:像素),返回数组[x, y],给出输入数组[longitude, latitude]。如果指定的位置没有定义投影的位置,那么返回可能为null。例如,当位置在投影的裁剪边界之外的时候。

projection.invert(point)

投影反向是从直角坐标(像素),到球面坐标(度),返回一个数组[longitude, latitude],给定输入数组[x, y]。但并非所有的投影都会实现反转,对于可逆投影,这种方法是undefined。

projection.rotate([rotation])

如果rotation 旋转指定了,设置投影的三轴旋转为指定的角度λ,φ和γ(偏航角,倾斜角和滚动角,或等效地经度,纬度和滚动),以度并返回投影。如果rotation 未指定,返回当前缺省的转动值[0, 0, 0]。如果rotation 指定且只有两个值,而不是3个值,那么滚动的角度被假设为0°。

projection.center([location])

如果center 重心指定了,则设置投影中心为指定的位置,经度和纬度度数的两元数组,并返回投影。如果没有指定中心,则返回当前的中心,默认为⟨0°,0°⟩。

projection.translate([point])

如果point 点指定了,则设置投影转变的位移为指定的二元数组[x, y]并返回的投影。如果未指定点,则返回当前变换的位移,默认为[480, 250]。变换的位移确定投影的中心像素坐标。默认转换位移的位置是⟨0°,0°⟩,在一个960×500区域的中心。

projection.scale([scale])

如果scale 比例尺指定了,则设置投影的比例尺为特定的值,并返回投影。如果未指定比例尺,返回默认的值150。比例尺因子线性地对应于投影点之间的距离。然而,比例尺因子不能一直越过投影。

projection.clipAngle(angle)

如果angle 角度指定了,则设置投影的裁剪圆半径,指定角度并返回投影。如果角度为null,切换到子午线切割,而不是小圈的裁剪。如果没有指定角度,返回当前裁剪的角度,默认为空。小圈裁剪是独立于通过clipExtent的视窗裁剪。 antimeridian cutting:http://bl.ocks.org/mbostock/3788999

projection.clipExtent(extent)

如果extent 范围指定了,则设置投影的剪辑视窗范围为指定的边界,以像素为单位并返回投影。extent 范围边界被指定为一个数组x0, y0], [x1,y1,其中x0 是视窗的左侧,y0 是顶部,x1 为右侧和y1 是底部。如果范围为null,则视窗裁剪不执行。如果extent 范围没有指定,则返回当前视窗裁剪的范围,默认为null。视窗裁剪是独立于通过clipAngle的小圈剪裁。

projection.precision(precision)

如果precision 精度指定了,则设置投影自适应重采样的临界值为指定的值,以像素为单位,并返回投影。此值对应于Douglas–Peucker 距离。如果precision 精度没有指定,则返回投影当前重采样的精度,其精度默认为Math.SQRT(1/2)。 0的精密度禁止自适应重采样。

projection.stream(listener)

返回一个投影流,包装了特定的监听器。任何几何形状的流对封装器,都是在被传输到包监听之前投影的。一个典型的投影包含多个流的变换:输入的几何形首先被转换为弧度,在三轴上旋转,在小圆圈或沿着子午线切割,最后投射到具有自适应重采样,缩放和平移的笛卡尔平面上。

d3.geo.projectionMutator(rawFactory)

构造一个新的投影,是从指定的原始点投影函数factory开始。此函数不直接返回投影,而是返回一个变换的方法,且你可以随时调用原始投影函数发生变换的方法。例如,假设你正在实施Albers equal-area conic投影,它需要配置投影的两大相似之处。使用闭包,可以实现原始投影,如下所示: // φ0 and φ1 are the two parallels functionalbersRaw(φ0,φ1){ returnfunction(λ,φ){ return[ /* compute x here /, / compute y here */ ]; }; }

使用d3.geo.projectionMutator,可以实现一个标准的投影,使相似之处有所改变,重新分配由d3.geo.projection内部使用的原始投影: functionalbers(){ varφ0=29.5, φ1=45.5, mutate=d3.geo.projectionMutator(albersRaw), projection=mutate(φ0,φ1);

projection.parallels=function(){ if(!arguments.length)return[φ0,φ1]; returnmutate(φ0=+[0],φ1=+_[1]); };

returnprojection; } 因此,在创建一个可变的投影时,变化的函数永远不会暴露出来,但可以很容易地重新创建底层的原始投影。对于完全实现,可以参考src/geo/albers.js。 Standard Projections

d3.geo.albers()

d3.geo.albers是d3.geo.conicEqualArea的一个别名,默认为美国中心:scale 1000,translate [480, 250],rotation [96°, 0°],center ⟨-0.6°, 38.7°⟩ 和parallels [29.5°, 45.5°],使其能够适合的显示美国,中心围绕着Hutchinson,Kansas在一个960×500的区域。中央经线和纬线是由美国地质调查局在1970年国家地图集规定的。

d3.geo.albersUsa()

埃尔伯USA投影是一个复合投影,这复合的四个埃尔伯投影的设计是用来显示美国下部48,在阿拉斯加和夏威夷旁边。虽然用于等值线图,它扩展阿拉斯加0.35x倍的区域(估计是3倍),夏威夷作为下部48显示在相同比例尺的。 埃尔伯USA投影不支持旋转或者居中。

d3.geo.azimuthalEqualArea()

方位角等面积投影也适用于等值线图。这个投影的极性方面用于联合国标志。 polar aspect:ttp://bl.ocks.org/mbostock/4364903

d3.geo.azimuthalEquidistant()

方位角的等距投影保留了从投影中心的距离,从任何投影点到投影中心的距离到大弧距离是成比例的。因此,围绕投影中心的圆圈是投影在笛卡尔平面的圆圈。这可以用于相对一个参考点的可视化距离,如可交换距离。

d3.geo.conicConformal()

兰伯特的等角的二次曲线投影投影地球形状成为一个锥形。

conicConformal.parallels([parallels])

如果parallels 指定了,则设定投影的标准平行线为特定的二元纬度数组,并返回这个投影。如果parallels 没有指定,返回当前的parallels 。

d3.geo.conicEqualArea()

埃尔伯投影,作为一个区域相等的投影,被推荐用于等值线图,因为它保留了地理特征的相对区域。

conicEqualArea.parallels([parallels])

如果parallels 指定了,设置埃尔伯投影的标准平行线为指定的二元纬度数组(以度为单位),并返回投影。如果parallels 没有指定,返回当前parallels 。为了最大限度地减少失真,平行线应选择为围绕投影的中心。

d3.geo.conicEquidistant()

conicEquidistant.parallels([parallels])

如果parallels 指定了,设定投影的标准parallels 到指定的二元纬度数组(度),并返回投影。如果parallels 没有指定,返回当前的parallels 。

d3.geo.equirectangular()

这个正方形投影,或plate carrée投影,是最简单可行的地理投影:标识函数。它既不等面积也不等角,但有时用于光栅数据。见光栅重投影的一个例子,源图像使用正方形投影。 raster reprojection:ttp://bl.ocks.org/mbostock/4329423

d3.geo.gnomonic()

球心投影是一个方位角投影,它投射大圆为直线。参考interactive gnomonic 的例子。 interactive gnomonic:ttp://bl.ocks.org/mbostock/3795048

d3.geo.mercator()

这个球面的Mercator投影是常用的分片式映射库(例如OpenLayers 和Leaflet)。例如显示栅格分片与Mercator投影,可以参见d3.geo.tile插件,它是正形投影的,然而,它的推行造成了世界范围地区严重失真,因此不建议使用choropleths。

d3.geo.orthographic()

正投影是适合于显示单个半球的方位投影,透视的点在无穷远处。可以看世界观光的动画和互动正投影的例子。对于一般的透视投影,可以参考卫星投影。

d3.geo.stereographic()

立体投影是另一个角度(方位)投影。在表面上看,透视的点是球体。因此,这是常用的天体图。参考交互式立体为例。  

d3.geo.transverseMercator()

横向的墨卡托投影。 Raw Projections

D3提供了几个原始的投影,当一个复合投影实现时,设计重用(如Sinu–Mollweide,它结合了原始的正弦曲线和摩尔维特投影)。原始投影在使用之前,通常是用d3.geo.projection封装着。这些点函数都是采用球面坐标λ和φ(弧度)作为输入,并返回一个二元数组(也是用弧度)作为输出。许多原始投影从平面坐标映射到球面坐标,实现了一个反转的投影。

d3.geo.albers.raw(φ0, φ1)

是d3.geo.conicEqualArea.raw的一个别名。

d3.geo.azimuthalEqualArea.raw

原始方位角的等面积投影。

d3.geo.azimuthalEquidistant.raw

原始的等距方位投影。

d3.geo.conicConformal.raw(φ0, φ1)

返回一个原始的等角的二次曲线投影,并用弧度指定parallels。

d3.geo.conicEqualArea.raw(φ0, φ1)

返回一个原始的埃尔伯投影,并用弧度指定parallels。

d3.geo.conicEquidistant.raw(φ0, φ1)

返回一个原始等距圆锥投影,并用弧度指定parallels。

d3.geo.equirectangular.raw

原始的正方形投影。

d3.geo.gnomonic.raw

原始的球心投影。

d3.geo.mercator.raw

原始的墨卡托投影。

d3.geo.orthographic.raw

原始的正投影。

d3.geo.stereographic.raw

原始的立体投影。

  • 何凯琳译20141129
  • gulu校对2014-12-7 23:27:06
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.