Коническая конформная проекция Ламберта в d3

Я пытаюсь спроецировать набор точек (кортежи [long, lat]) поверх SVG-карты моей родной страны - Австрии:

https://commons.wikimedia.org/wiki/File:Austria-geographic_map-blank.svg

Описание файла SVG на Викимедиа дает имя проекции и границы карты:

Конформно-коническая форма Ламберта, датум WGS84
Географические границы карты:

Запад: 17,2 ° з.д.
восток: 9,3 ° з.д.
север: 49,2 ° с.ш.
юг: 46,0 ° с.ш.

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

Это то, что я попробовал сначала:

    let gcc = d3.geoConicConformal()
        .fitSize([width, height], bbox)

Где bbox - многоугольник GeoJSON, представляющий границы карты, как указано выше.

К сожалению, результат неверный:

введите описание изображения здесь

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

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

Может ли кто-нибудь дать мне какие-либо указания по правильной настройке конической конформной проекции Ламберта?


person zinfandel    schedule 22.12.2016    source источник


Ответы (1)


Fitsize будет правильно перемещать и масштабировать карту, однако с конической проекцией вам нужно повернуть и, как вы отметили, установить параллели.

Параллели:

Существует задокументированная картографическая проекция Австрии с коническим конусом Ламберта, ее характеристики можно найти здесь или здесь. Параллели, которые, вероятно, верны, в этом случае - [46,49], хотя карта, которую вы используете, может быть настраиваемой проекцией.

Вращение

Теперь вам нужно повернуть карту по оси x по долготе. Конические карты обычно вращаются по оси x и центрируются по оси y (см. Мой ответ здесь здесь для графического объяснения того, почему (и как параллели меняют вашу проекцию).

Вращение перемещает мир таким образом, чтобы интересующая вас область была выровнена должным образом, так что центральный меридиан карты был вертикальным на вашей карте. Исходя из указанных выше характеристик проекции, центральный меридиан должен находиться под углом 13 градусов 20 минут (13,333 градуса), хотя между двумя эталонами есть небольшое расхождение. Вращение по оси x установлено на отрицательное значение этого значения.

Используя эти параметры:

d3.geoConicConformal()
    .parallels([46,49])
    .rotate([-13.333,0])
    .fitSize([width,height],bbox)

Мне удалось довольно хорошо вписаться в мой мир goto с очень низкой степенью дискретизации topojson:

введите описание изображения здесь

Возможно, что изображение svg использует параметры, которые немного отличаются от опубликованных параметров (округление, опечатки) или параллели выбраны пользователем; однако это должно быть довольно плотно.

person Andrew Reid    schedule 23.12.2016