Я работаю над этим, и у меня возникают проблемы с обрезкой элементов красного круга, когда они появляются на глобусе даже после угол зажима 90˚. Кроме того, есть ли способ применить проекцию к красным кругам, чтобы они выглядели так, как будто они находятся на поверхности земного шара относительно орфографического угла? На данный момент они просто отображаются как 2d круги относительно экрана.
Клип круга и проекция с орфографическим D3
Ответы (1)
Вместо использования элементов <circle>
вы можете использовать геометрию точек GeoJSON:
{type: "Point", coordinates: [λ, φ]}
Затем их можно обрезать через проекционную систему D3, в зависимости от установленного вами clipAngle. Итак, у вас может быть что-то вроде:
var path = d3.geo.path().projection(…);
data.forEach(function(d) {
svg.append("path")
.datum({type: "Point", coordinates: [d.Lon, d.Lat]})
.attr("d", path.pointRadius(d.Magnitude));
});
Обратите внимание, как радиус точки задается через путь для каждой точки. Вы также можете установить pointRadius как функцию, чтобы вы могли сделать что-то вроде:
var path = d3.geo.path()
.projection(…)
.pointRadius(function(d) { return d.radius; });
svg.selectAll("path.point")
.data(data)
.enter().append("path")
.datum(function(d) {
return {type: "Point", coordinates: [d.Lon, d.Lat], radius: d.Magnitude};
})
.attr("class", "point")
.attr("d", path);
Вторая часть вашего вопроса спрашивает, могут ли круги быть настоящими географическими кругами. d3.geo.circle может генерировать объекты географического круга (опять же, как GeoJSON), который будет правильно обрезан:
var path = d3.geo.path().projection(…),
circle = d3.geo.circle();
svg.selectAll("path.point")
.data(data)
.enter().append("path")
.datum(function(d) {
return circle
.origin([d.Lon, d.Lat])
.angle(d.Magnitude)();
})
.attr("class", "point")
.attr("d", path);
person
Jason Davies
schedule
04.04.2013
Спасибо, что нашли время дать ответ, я очень ценю это. Ваш код был именно тем, что мне было нужно. Кроме того, спасибо за все ваши замечательные вклады в D3!
- person Tom Stove; 04.04.2013
@ Джейсон, есть ли способ изменить угол / радиус
d3.geo.circle
s? Как насчет происхождения?
- person Fresheyeball; 06.05.2013
Есть ли у вас какие-либо предложения о том, как лучше всего обрабатывать большие наборы данных? Я реализовал что-то похожее на ваше последнее предложение, но обнаружил значительное отставание с 2k+ точками на вращающемся глобусе (как и следовало ожидать). Интересно, есть ли какие-нибудь хитрости, чтобы немного сгладить ситуацию.
- person ruddfawcett; 16.10.2017