D3 Geo 地理路径
地理路径生成器(Geographic Path Generator
),对于地图可视化,D3 支持少数的组建来显示或操作地理数据,通常使用 GeoJSON 格式(这也是在 JavaScript中的标准的地理特征表示方法,而TopoJSON则是GeoJSON的扩展)。
对于 TopoJSON、GeoJSON,可以通过使用 ogr2ogr 或 ogr2topo or geo2topo
来分别进行转换的数据通过地理路径生成器生成该地图的路径值,通过使用 d3.geo.path
类来直接渲染到画布中。
ID | FA | DA |
---|---|---|
d3.gao.path | 创建一个新的地理路径生成器,可以使用默认的 abersUsa投影和 4.5个像素点半径 | |
path(feature[,index]) | 给制定的功能返回路径的数据串,可以是 GeoJSON 的特征或集合对象 | |
Point | 单个位置 | |
MultiPoint | 一组位置 | |
LineString | 一组位置形成一条连续的线 | |
MultiLineString | 位置数组的数组,形成多条线 | |
Polygon | 位置数组的数组,形成一个多边形 | |
MultiPolygon | 位置的多维数组,形成了多个多边形 | |
GeometryCollection | 几何对象的数组 | |
Feature | 包含了几何对喜爱那个其中的一个特征 | |
FeatureCollection | 特征对象的数组 | |
path.projection([projection]) | 指定投影,如果投影被有被制定,那么就会返回当前的投影默认为alberUsa(艾伯斯美国投影) |
美国地图常见的就是 alberUsa 这可以使得地图更加的紧凑和可用 |
path.context[context] | 设置渲染上下文并发那会生成路径,默认为 null,如果为空的当一个给定调用时路径生成器会返回一个SVG路径字符串。非空则路径生成器替换调用函数为指定调查上下文来渲染几何图形 | |
path.pointRadius([radius]) | 设置点半径,用于显示点(Point) 和多点(MultPoint)的功能,如果未指定则返回当前的半径 | |
path.area(feature) | 计算出指定几何体的投影面积点(Point)、多点(MultiPoint)、LineString(线串) 则面积为0,如果类型为Polygon(多边形)、MultiPolygon(多点多边形) 那么先计算外部环面积,在减去内部空洞 |
|
path.centroid(feature) | 对指定的功能计算几何体的中心,单位为像素 | |
path.bounds(feature) | 对特定的功能计算投影的边框 |
d3.geo.path
d3.geo.path 内计算方法主要分为计算面积(area)、中心(centroid)、边界框(bounds),Area 用于计算出几何体的投影面积,centroid 来计算出几何体的中心及当前选择的中心(由于使用的是 TopoJSON 他是可以做到的),bounds(投影边框)。
area and centroid as well as bounds
Area 用于计算出几何体的投影面积,centroid 来计算出几何体的中心及当前选择的中心(由于使用的是 TopoJSON 他是可以做到的),bounds(投影边框)当鼠标经过图标数据的时候显示出 area、centroid、bounds
总共加起来绘制出的数据。
1 | var padding = { |
CSS
1 | .province { |
形状生成器
形状生成器(Shape Geeratior)可以在地图上绘制网格,即经度和纬度来展现出一种视觉效果,也能让其图标先的更加专业:
ID | DA | FA |
---|---|---|
d3.geo.graticule() | 构造一个经纬线 | |
graticule() | 返回一个类型为 MultiLineString 几何对象表示这个刻度的所有经纬线 | |
lines() | 返回一个 LineString 集合对象,用于这个刻度的为一个经线和纬线 | |
outline() | 返回一个类型为 Polygon 的对象,表示出网格的轮廓 | |
extent([extent] ) |
设置网格范围,如果没有指定范围,那么则返回抢钱的次要范围,默认为[[-180,-80], [180,80]] |
|
step(step ) |
设置网格的主要和次要间隔,如果没有则返回(10,10) |
经纬线网络
经纬线网络可以通过过使用d3.geo.path()
进行绘制,在graticule中,网格的范围被使用经度范围为 -180~180,纬度范围是-90~90,每隔 10 度画一条经纬线
来通过step
表示间隔距离。
中国地图
1 | var padding = { |
CSS
1 | .province { |
世界地图
地图JSON: https://gitee.com/mirrors_jamiebuilds/world.geo.json/blob/master/countries.geo.json#
1 | var padding = { |
圆形网络
除了绘制经纬线网络之外,还有原型网络的绘制,同样是通过使用d3.geo.path()
进行绘制,地图和网格都会自动进行适应,需要注意的是如果出现问题那基本上就是地图数据的原因,目前支持绘制圆形网络的生成器方法如下:
ID | DA | FA |
---|---|---|
d3.geo.circle | 为一个指定的地理位置创建带有设置的半径,在圆中心创建一个特征生成器 | |
circle(arguments) | 返回一个类型为多边形的 GeoJSON 对象 | |
circle.origin([origin]) 设置圆的圆点 ,默认值为 (0,0) |
||
circle.precision([precision]) 设置圆半径,默认为90度 |
圆形网络是一个分别在平面地图和球面地图,平面主要是将球面地图展开后进行的结果,我们可以使用d3.geo.mercator()
,来绘制出平面图,而通过使用d3.geo.orthographic
,来绘制出球形网络。
ID | DA | FA |
---|---|---|
d3.gao.orthographic() | 来显示出适合单个半球的投影,即球面投影 | |
rotation([rotate] ) |
指定旋转,设置投影的三个轴的指定角度 | |
clipAngle(angle ) |
设置投影和裁剪圆的半径,指定角度并返回。如果角度为 null则切换到子午线切割,而不是小圆裁剪。(如果没有指定角度,则发那会出当前的裁剪角度,默认为空) |
mercator
1 | var padding = { |
orthographic
1 | var padding = { |