是否可以在d3.js中将地理要素周围的缓冲区(另一个要素)绘制为固定距离单位(公里或英里)?
例如,我如何在每个方向上从该点延伸25英里的点周围画一条路径。我已经尝试过使用d3.geo.circle并传递一小部分度数(25英里/每纬度大约69英里或25/69),但我意识到虽然d3.geo.circle处理度数的重投影但它不适应对于每个纵向度的不同长度。
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 :(得分:0)
AFAIK在D3中做这件事会非常痛苦,因为它并不意味着创建/修改功能。我建议将此作为GIS程序中的预处理步骤,例如QGIS,它允许您以多种方式buffer features。从那里,您可以导出为GeoJSON并以通常的方式使用D3。
答案 1 :(得分:0)
我能够通过从给定距离和从起点开始的一系列目标点绘制路径来创建一个点周围的缓冲区。
有关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)); // See link
}
// Draw path using pointsData;
}