Для собранного мудрого пути d3,
Я создал интерактивную карту из шейп-файла. http://neolography.com/staging/d3counties/d3test_mapAndDot.html С ним связаны события щелчка, перетаскивания и масштабирования. Пока все хорошо.
Теперь я сгенерировал ориентированный граф и развернул его в другом элементе <g>
в том же элементе <svg>
, что и карта http://neolography.com/staging/d3counties/d3test_HostageMapAndDot.html. Некоторые узлы этого графа имеют свойство «latLong» (массив [lat,long]
). Я стремлюсь к следующему:
Я бы хотел, чтобы эти узлы были прикреплены к (или тяготели к) соответствующая локация на карте с учетом ее масштаба и статуса перетаскивания.
Большая часть кода до сих пор относится к разновидности «monkey see monkey do», выкованной из примеров Майкла Бостока и других. Оно усыпано console.log()
утверждениями, когда я пытаюсь понять, как все работает. Может показаться, что я могу назначить атрибуты "cx" и "cy" окружностям узлов по мере их создания, но я затрудняюсь понять, как заставить их реагировать на увеличенное / перетаскиваемое состояние карты.
Любые подсказки приветствуются. Примеры чего-то подобного?
EDIT
> простите, что я здесь вслух подумал. Мне удалось зафиксировать узлы на координатах на карте. В верхней части моей функции drawGraph
я добавил свойства fx
и fy
к данным узла:
function drawGraph(data) {
data.nodes.forEach(
function(n){
if (n.latLong){
ll = projection(n.latLong.reverse());
n['fx'] = ll[0];
n['fy'] = ll[1];
}
}
)
//... continue to define the graph ...
Более того, в моей функции zoomed()
(в своей области видимости) я Добавлены строки для обновления атрибутов fx
и fy
соответствующих кругов:
d3.selectAll("circle.node")
.attr("fx", function (d) { if (d.latLong){ return projection(d.latLong)[0]; } })
.attr("fy", function (d) { if (d.latLong){ return projection(d.latLong)[1]; } })
Цель здесь - закрепить эти узлы графа в соответствующих местах на карте. Несмотря на то, что строки выше обновляют атрибуты кругов fx
и fy
, я до сих пор не обнаружил заклинание, которое влияет на это изменение: круги узлов не перемещаются, чтобы отразить увеличенный масштаб. или перетянутое состояние карты.
Без сомнения, я пропускаю что-то очевидное. Какие-нибудь мысли? J * * тысячу сорок-два