Географические проекции
Справочник API ▸ Geo ▸ Географические проекции
Библиотека D3 по умолчанию включает несколько распространённых проекций, как показано ниже. Многочисленные (менее часто используемые) проекции доступны в плагине расширенных географических проекций и плагине полиэдрической проекции.
| d3.geo.albersUsa | d3.geo.azimuthalEqualArea | d3.geo.azimuthalEquidistant |
| d3.geo.conicEqualArea | d3.geo.conicConformal | d3.geo.conicEquidistant |
| d3.geo.equirectangular | d3.geo.gnomonic | d3.geo.mercator |
| d3.geo.orthographic | d3.geo.stereographic | d3.geo.transverseMercator |
Стандартная абстрактная проекция
Большинство проекций, предоставляемых D3, создаются с помощью d3.geo.projection и настраиваются: вы можете вращать глобус, масштабировать или преобразовывать холст и т. д. Если вы не реализуете новую исходную проекцию, вы, вероятно, не будете использовать конструктор d3.geo.projection, но скорее всего, будете использовать методы конфигурации.
d3.geo.projection(raw)
Создаёт новую проекцию из указанной функции raw проекции точек. Например, проекцию Меркатора можно реализовать как:
var mercator = d3.geo.projection(function(λ, φ) {
return [
λ,
Math.log(Math.tan(π / 4 + φ / 2))
];
}); (См. src/geo/mercator.js для полной реализации.) Если функция raw поддерживает метод invert, возвращаемая проекция предоставит соответствующий метод invert.
projection(location)
Проецирует вперёд из сферических координат (в градусах) в декартовы координаты (в пикселях). Возвращает массив [x, y] по заданному входному массиву [долгота, широта]. Может вернуть null, если для указанной location нет определённой проецированной позиции, например, если расположение находится вне области обрезки проекции.
projection.invert(point)
Проецирует назад из декартовых координат (в пикселях) в сферические координаты (в градусах). Возвращает массив [долгота, широта] по заданному входному массиву [x, y]. Не все проекции реализуют invert; для непроецируемых проекций этот метод не определён.
projection.rotate([rotation])
Если rotation задан, устанавливает вращение проекции по трём осям на указанные углы λ, φ и γ (yaw, pitch and roll, или эквивалентно долгота, широта и крен) в градусах и возвращает проекцию. Если rotation не задан, возвращает текущее вращение, которое по умолчанию равно [0, 0, 0]. Если указанный rotation имеет только два значения вместо трёх, крен предполагается равным 0°.
projection.center([location])
Если location задан, устанавливает центр проекции на указанную location, двумерный массив долготы и широты в градусах и возвращает проекцию. Если center не задан, возвращает текущий центр, который по умолчанию равен ⟨0°,0°⟩.
projection.translate([point])
Если point задан, устанавливает смещение переноса проекции на указанный двумерный массив [x, y] и возвращает проекцию. Если point не задан, возвращает текущее смещение переноса, которое по умолчанию равно [480, 250]. Смещение переноса определяет пиксельные координаты центра проекции center. По умолчанию смещение переноса помещает ⟨0°,0°⟩ в центр области 960×500.
projection.scale([scale])
Если scale задан, устанавливает коэффициент масштаба проекции на указанное значение и возвращает проекцию. Если scale не задан, возвращает текущий коэффициент масштаба, который по умолчанию равен 150. Коэффициент масштаба линейно соответствует расстоянию между проецируемыми точками. Однако коэффициенты масштаба не являются постоянными для всех проекций.
projection.clipAngle(angle)
Если angle задан, устанавливает радиус круга обрезки проекции на указанный угол в градусах и возвращает проекцию. Если angle равен null, переключается на обрезку по антимеридиану вместо обрезки по малой окружности. Если angle не задан, возвращает текущий угол обрезки, который по умолчанию равен null. Обрезка по малой окружности независима от обрезки по области просмотра с помощью clipExtent.
projection.clipExtent(extent)
Если extent задан, устанавливает область обрезки по области просмотра проекции на указанные границы в пикселях и возвращает проекцию. Границы extent задаются как массив [[x0, y0], [x1, y1]], где x0 — левая сторона области просмотра, y0 — верхняя, x1 — правая и y1 — нижняя. Если extent равен null, обрезка по области просмотра не выполняется. Если extent не задан, возвращает текущую область обрезки по области просмотра, которая по умолчанию равна null. Обрезка по области просмотра независима от обрезки по малой окружности с помощью clipAngle.
projection.precision(precision)
Если precision задан, устанавливает порог для адаптивной ресемплирования проекции на указанное значение в пикселях и возвращает проекцию. Это значение соответствует расстоянию Douglas–Peucker. Если precision не задан, возвращает текущую точность ресемплирования проекции, которая по умолчанию равна Math.SQRT(1/2).
precision значение 0 отключает адаптивную ресемплинг.
projection.stream(listener)
Возвращает обертывающую потоковую функцию проекции для указанного listener. Любая геометрия, отправленная в обёртку, проецируется перед отправкой в упакованный listener. Типичная проекция включает несколько преобразований потоков: входная геометрия сначала преобразуется в радианы, вращается по трём осям, обрезается до малой окружности или обрезается вдоль антимеридиана, а затем проецируется на декартову плоскость с адаптивным ресемплированием, масштабированием и переносом.
d3.geo.projectionMutator(rawFactory)
Создаёт новую проекцию из указанной функции raw проекции точек factory. Эта функция не возвращает проекцию напрямую, но вместо этого возвращает метод mutate, который можно вызывать всякий раз, когда функция исходной проекции изменяется. Например, скажем, вы реализуете коническую проекцию Альберса с равными площадями, которая требует настройки двух параллелей. Используя замыкания, вы можете реализовать исходную проекцию следующим образом:
// φ0 and φ1 are the two parallels
function albersRaw(φ0, φ1) {
return function(λ, φ) {
return [
/* compute x here */,
/* compute y here */
];
};
} Используя d3.geo.projectionMutator, вы можете реализовать стандартную проекцию, которая позволяет изменять параллели, повторно назначая исходную проекцию, используемую внутри d3.geo.projection:
function albers() {
var φ0 = 29.5,
φ1 = 45.5,
mutate = d3.geo.projectionMutator(albersRaw),
projection = mutate(φ0, φ1);
projection.parallels = function(_) {
if (!arguments.length) return [φ0, φ1];
return mutate(φ0 = +_[0], φ1 = +_[1]);
};
return projection;
} Таким образом, при создании изменяемой проекции функция mutate никогда не отображается, но может использоваться для лёгкого пересоздания исходной проекции. Полную реализацию можно найти в src/geo/albers.js.
Стандартные проекции
d3.geo.albers()
Псевдоним для d3.geo.conicEqualArea с США-ориентированными значениями по умолчанию: масштаб 1000, перенос [480, 250], вращение [96°, 0°], центр ⟨-0.6°, 38.7°⟩ и параллели [29.5°, 45.5°], что делает его подходящим для отображения США, сосредоточенного вокруг Хатчинсон, Канзас в области 960×500. Центральный меридиан и параллели указаны в национальном атласе USGS в 1970 году.
d3.geo.albersUsa()
Проекция Альберса США представляет собой составную проекцию четырёх проекций Альберса, предназначенных для отображения сорока восьми нижних штатов США вместе с Аляской и Гавайями. Несмотря на то, что она предназначена для картограмм, она масштабирует площадь Аляски на коэффициент 0,35x (коэффициент искажения 3); Гавайи отображаются в том же масштабе, что и сорок восемь нижних штатов.
Проекция Альберса США не поддерживает вращение или центрирование.
d3.geo.azimuthalEqualArea()
Азимутальная проекция с равными площадями также подходит для картограмм. Полярный аспект этой проекции используется для логотипа Организации Объединённых Наций.
d3.geo.azimuthalEquidistant()
Азимутальная равноудалённая проекция сохраняет расстояния от центра проекции: расстояние от любой проецируемой точки до центра проекции пропорционально расстоянию по большой дуге. Таким образом, окружности вокруг центра проекции проецируются на окружности на декартовой плоскости. Это может быть полезно для визуализации расстояний относительно точки отсчёта, таких как расстояния на работу.
d3.geo.conicConformal()
Конформная коническая проекция Ламберта проецирует глобус конформно на конус.
conicConformal.parallels([parallels])
Если parallels задан, устанавливает стандартные параллели проекции на указанный двумерный массив широт (в градусах) и возвращает проекцию. Если parallels не задан, возвращает текущие параллели.
d3.geo.conicEqualArea()
Проекция Альберса, как проекция с равными площадями, рекомендуется для картограмм, поскольку она сохраняет относительные площади географических объектов.
conicEqualArea.parallels([parallels])
Если параметр parallels указан, устанавливает стандартные параллели проекции Альберса на заданный двумерный массив широт (в градусах) и возвращает проекцию. Если parallels не указан, возвращает текущие параллели. Для минимизации искажений параллели следует выбирать так, чтобы они окружали центр проекции центра.
d3.geo.conicEquidistant()
conicEquidistant.parallels([parallels])
Если параметр parallels указан, устанавливает стандартные параллели проекции на заданный двумерный массив широт (в градусах) и возвращает проекцию. Если parallels не указан, возвращает текущие параллели.
d3.geo.equirectangular()
Прямоугольная проекция, или проекция «пластина с прямоугольными границами», — это самая простая возможная географическая проекция: тождественная функция. Она не является ни равноплощадной, ни конформной, но иногда используется для растровых данных. См. перепроектирование растровых данных для примера; исходное изображение использует прямоугольную проекцию.
d3.geo.gnomonic()
Гномоническая проекция — это азимутальная проекция, которая отображает большие окружности прямыми линиями. См. интерактивную гномоническую проекцию для примера.
d3.geo.mercator()
Сферическая проекция Меркатора широко используется библиотеками по созданию карт с использованием плиток (такими как OpenLayers и Leaflet). Для примера отображения растровых плиток с проекцией Меркатора см. плагин d3.geo.tile. Она является конформной; однако она вносит существенные искажения площади в глобальном масштабе и, следовательно, не рекомендуется для картограмм.
d3.geo.orthographic()
Ортографическая проекция — это азимутальная проекция, подходящая для отображения одного полушария; точка перспективы находится в бесконечности. См. анимированный тур по миру и интерактивную ортографическую проекцию для примеров. Для общей проекции с перспективой см. спутниковый проект.
d3.geo.stereographic()
Стереографическая проекция — это еще одна проекция с перспективой (азимутальная). Точка перспективы находится на поверхности сферы, смотря внутрь; поэтому она часто используется для небесных карт. См. интерактивную стереографическую проекцию для примера.
d3.geo.transverseMercator()
Проекция поперечного Меркатора.
Сырые проекции
D3 предоставляет несколько сырых проекций, предназначенных для повторного использования при реализации составной проекции (например, Синусоидально-Мольвейде, которая объединяет исходные синусоидальные и проекции Мольвейде). Сырые проекции обычно обертываются с помощью d3.geo.projection перед использованием. Это функции, принимающие сферические координаты λ и φ (в радианах) на входе и возвращающие двумерный массив (также в радианах) на выходе. Многие сырые проекции также реализуют обратную проекцию для преобразования из плоских в сферические координаты.
d3.geo.albers.raw(φ0, φ1)
Псевдоним для d3.geo.conicEqualArea.raw.
d3.geo.azimuthalEqualArea.raw
Сырая азимутальная равноплощадная проекция.
d3.geo.azimuthalEquidistant.raw
Сырая азимутальная равнорасстоянная проекция.
d3.geo.conicConformal.raw(φ0, φ1)
Возвращает исходную конформную коническую проекцию с заданными параллелями в радианах.
d3.geo.conicEqualArea.raw(φ0, φ1)
Возвращает исходную проекцию Альберса с заданными параллелями в радианах.
d3.geo.conicEquidistant.raw(φ0, φ1)
Возвращает исходную равнорасстояную коническую проекцию с заданными параллелями в радианах.
d3.geo.equirectangular.raw
Исходная прямоугольная проекция.
d3.geo.gnomonic.raw
Исходная гномоническая проекция.
d3.geo.mercator.raw
Исходная проекция Меркатора.
d3.geo.orthographic.raw
Исходная ортографическая проекция.
d3.geo.stereographic.raw
Исходная стереографическая проекция.
© 2010–2016 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Projections.md