Могу ли я превратить проекцию карты D3 по часовой стрелке вокруг ее центральной точки?

Как я могу повернуть свою карту - если могу - по часовой стрелке примерно на 15-20 градусов, так что это выглядит как карта среднего востока, которую я увижу в атласе?

Интуитивно, .rotate выглядит так, как будто он должен это делать, но я попытался вставить разные значения, и он просто "не центрирует" карту.

Важным моментом кода D3, я считаю, является:

var projection = d3.geo.albers()
      .center([49.7, 27.4])
      .rotate([0, 0, 0])
      .parallels([12.6, 40])
      .scale(800)
      .translate([width / 2, height / 2]);

(1)

enter image description here

Спасибо.


(2)

enter image description here

Я пытаюсь воспроизвести карту, похожую на это (2), - только потому, что это то, что люди знакомы с обычным атласом.

Ответы

Ответ 1

Не зная, что вы пытались использовать с помощью projection.rotate() Я все еще думаю, что этот метод даст желаемый результат. Например, вращение по часовой стрелке на 20 градусов вокруг LAT = 49,7N, LON = 27,4E, как указано в вашем примере, может быть выполнено с помощью:

projection.rotate([-49.7,-27.4,-20])

Я установил Plunk, демонстрируя результат.


Update

Если вы не обязаны использовать проекцию Albers, могут быть другие параметры, дающие результаты, которые лучше соответствуют вашим потребностям

что люди знакомы с обычным атласом.

Я просмотрел его в трех атласах, где изображен Аравийский полуостров с использованием равноугольной проекции, которая выглядит как ваш желаемый результат:

var projection = d3.geo.equirectangular()
    .rotate([-49.7,-27.4])

Вы просто сосредотачиваетесь на LAT = 49.7N, LON = 27.4E, применяя .rotate([-49.7,-27.4]) без необходимости дальнейшего свертывания проекции, т.е. у вас не будет третьего элемента в массиве, поставляемого в rotate(). См. Мой обновленный Plunk. Для меня это выглядит так, как я ожидаю, когда он увидит его в атласе.