v4 ссылка направленный граф силы на карту Geo JSON - PullRequest
0 голосов
/ 14 апреля 2020

Для собранного мудрого пути 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 * * тысячу сорок-два

...