Как перевести выражение MKT в опции D3 на проекции Альберса? - PullRequest
1 голос
/ 28 октября 2019

Это стандартное выражение MKT ( здесь также переводится в строку Proj.4 ) Альберса conicEqualArea для официальной статистической сетки Бразилии :

PROJCS["Conica_Equivalente_de_Albers_Brasil",
    GEOGCS["GCS_SIRGAS2000",
        DATUM["D_SIRGAS2000",
            SPHEROID["Geodetic_Reference_System_of_1980",6378137,298.2572221009113]],
        PRIMEM["Greenwich",0],
        UNIT["Degree",0.017453292519943295]],
    PROJECTION["Albers"],
    PARAMETER["standard_parallel_1",-2],
    PARAMETER["standard_parallel_2",-22],
    PARAMETER["latitude_of_origin",-12],
    PARAMETER["central_meridian",-54],
    PARAMETER["false_easting",5000000],
    PARAMETER["false_northing",10000000],
    UNIT["Meter",1]]

DATUM - это WGS 84 (для него "SIRGAS2000" - псевдоним).

Как перевести все детали в D3. js v5 параметризация?

Я пробую очевидное, как центр и параллели, но этого было недостаточно

var projection = d3.geoConicEqualArea()
  .parallels([-2,-22])  // IS IT?
  .scale(815)
  //.rotate([??,??]) // HERE THE PROBLEM... 
  .center([-54, -12])  // IS IT?

PS: где документация D3 дляЭто? Исходный код D3 geoConicEqualArea () не имеет никаких подсказок.

1 Ответ

1 голос
/ 28 октября 2019

Части, которые переводятся в проекцию d3 Альберса, следующие:

    PROJECTION["Albers"],
    PARAMETER["standard_parallel_1",-2],
    PARAMETER["standard_parallel_2",-22],
    PARAMETER["latitude_of_origin",-12],
    PARAMETER["central_meridian",-54],

У вас есть параллели, теперь вам нужно повернуть. Также обратите внимание, что для любой проекции D3 вращение применяется к координатам центрирования. Как правило, вам нужно вращаться по оси x, а по центру - y:

d3.geoAlbers()
 .parallels([-2,-22])
 .center([0,-12])
 .rotate([54,0])
 .translate([width/2,height/2])
 .scale(k)

Я повернулся в противоположном направлении вдоль оси x (повернул землю под собой, так что я перевернулсяцентрального меридиана, следовательно, мое вращение на -x). Затем я сосредоточился на Y. Наконец, я перевожу так, чтобы пересечение центральной долготы и меридиана было центрировано на карте, и применяю соответствующее значение масштаба.

Если я хочу центрироваться в другой области, но оставить проекцию неизменной, я могу изменить projection.center(), но имейте в виду, что приведенные здесь координаты относятся к повороту. Я также могу использовать projection.fitSize() или projection.fitExtent(), которые устанавливают значения «translate» и «scale» для проекции. Ни один из центров / масштабов / сдвигов не изменяет искажения в проекции D3.

Конечно, это не является точной копией вашей проекции, поскольку единицы измерения координат - это пиксели, вы по-прежнему не сможете измерять расстояния в метрах. напрямую, без дополнительной работы.

См. , также

...