Аффинное преобразование в d3.geo (поворот углов Эйлера)

Я хотел бы выполнить вращение полигона страны против часовой стрелки вокруг начала координат в d3.geo.

Например, повернем Италию на -7,2 градуса вокруг точки с λ=0,5, φ=49,9. Во-первых, нам нужно преобразовать эти углы Эйлера в параметры аффинного преобразования. В нашем случае параметры будут такими:

affine(0.5, 49.9, -7.2)
   scaleX      rotY    transX       rotX    scaleY   transY
0.9921147 0.1253332 -6.250186 -0.1253332 0.9921147 0.456143

Когда я использую плагин QGIS Affine Transform с такими параметрами, результирующая карта имеет вид here.

Когда я применяю те же параметры к projection.stream в d3.js, результат сильно отличается (и неверен): https://bl.ocks.org/memoryfull/946a8172d074a865c4ff

Я правильно обрабатываю поток проекции в своем коде, потому что (1, 0, 0, 0, 1, 0) аффинное преобразование дает ожидаемый результат отсутствия преобразования.

Спасибо заранее за вашу помощь.


person Dmitriy Skougarevskiy    schedule 11.10.2015    source источник
comment
Похоже, что он был повернут вокруг начала координат (вверху слева) всего элемента SVG в вашем коде. Что вам, вероятно, нужно, так это перевести Италию в источник, применить преобразование, а затем перевести обратно.   -  person Roland Heath    schedule 12.10.2015
comment
@RolandHeath спасибо за предложение. Боюсь, это не так. Было бы, если бы я сделал простое преобразование Италии без второго потока: .attr("d", d3.geo.path().projection(d3.geo.transform({ point: function(x, y) { this.stream.point(0.992 * x + 0.125 * y - 6.25, -0.125 * x + 0.992 * y + 0.456); } }) ));   -  person Dmitriy Skougarevskiy    schedule 12.10.2015