2013-11-21 41 views
0

是否可以在d3.js的地理要素周围绘制缓冲区(另一个功能)作为固定距离单位(公里或英里)?例如,我将如何绘制一条从每个方向延伸25英里的点的路径。我尝试过使用d3.geo.circle并传递一定的度数(25英里/每纬度约69英里或25/69),但意识到尽管d3.geo.circle处理度数的重投影,但它不适应针对每个纵向度的不同长度。d3.geo缓冲区周围的缓冲区

buffer = d3.geo.circle().angle(25/69).origin(function(x, y) { return [x, y]; }) 

我从这个借款:

http://bl.ocks.org/mbostock/5628479

更新:

看起来想什么,我要做的就是创建一个缓冲测地线。

更新:

我能够从一系列的给定的距离和从起点轴承的目标点绘制路径创建缓冲区。

的JavaScript实现

喜欢这个显示http://www.movable-type.co.uk/scripts/latlong.html

function drawBuffer(lat, long, distance){ 
    var intervals = 18; 
    var intervalAngle = (360/intervals); 
    var pointsData = []; 
    for(var i = 0; i < intervals; i++){ 
     pointsData.push(getDestinationPoint(lat, long, i * intervalAngle, distance)); 
    } 
    // Draw path using pointsData; 
} 
+0

也许有助于采取看看[大地插件(https://github.com/d3/d3-plugins/tree/主/短程线) – cengel

回答

0

我能够通过从一系列目标点绘制一条路径,从一个起点给定距离和方位,从而创建一个缓冲区。

http://www.movable-type.co.uk/scripts/latlong.html的JavaScript实现

像这样:

function drawBuffer(lat, long, distance){ 
    var intervals = 18; 
    var intervalAngle = (360/intervals); 
    var pointsData = []; 
    for(var i = 0; i < intervals; i++){ 
     pointsData.push(getDestinationPoint(lat, long, i * intervalAngle, distance)); // See link 
    } 
    // Draw path using pointsData; 
} 
0

AFAIK在D3本身做这将是相当痛苦的,因为它不是真正的意思创建/修改功能。我建议将其作为GIS程序中的预处理步骤,如QGIS,它允许您以多种方式登录buffer features。从那里,您可以以常规方式导出为GeoJSON并与D3一起使用。