Skip to content

RU Географические проекции

mingun edited this page Jun 16, 2014 · 2 revisions

ВикиСправка по APIГеографияГеографические проекции
English | Русский

Некоторые распрастранённые проекции включены в сборку 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 для полной реализации. Если сырая функция поддерживает метод invert, то возвращённая проекция расширится соответствующим методом invert.

# projection(location)

Производит прямую проекцию из сферических координат (в градусах) в декартовые координаты (в пикселях). Возвращает массив [x, y] по данному входному массиву [longitude, latitude]. Может вернуть null, если указанное местоположение location не имеет определённой спроецированной позиции, например, если местоположение находится за пределами границ отсечения проекции.

# projection.invert(point)

Производит обратную проекцию из декартовых координат (в пикселях) в сферические координаты (в градусах). Возвращает массив [longitude, latitude] по данному входному массиву [x, y]. Не все проекции реализуют метод invert; для необратимых проекций этот метод неопределён.

# projection.rotate([rotation])

Если указан параметр rotation, устанавливает трёх-осевое вращение проекции в указанные углы λ, φ и γ (рысканье, тангаж и крен или эквивалентные долгота, широта и крен) в градусах и возвращает проекцию. Если параметр rotation не указан, возвращает текущее вращение, которое по умолчанию установлено в [0, 0, 0]. Если указанное вращение rotation содержит только два значения вместо трёх, крен принимается равным 0°.

# projection.center([location])

Если указан параметр center, устанавливает смещение центра проекции в указанный двухэлементный массив [x, y] и возвращает проекцию. Если параметр center не указан, возвращает текущий центр, который по умолчанию установлен в ⟨0°, 0°⟩.

# projection.translate([point])

Если указан параметр point, устанавливает смещение проекции в указанный двухэлементный массив [x, y] и возвращает проекцию. Если параметр point не указан, возвращает текущее смещение, которое по умолчанию установлено в [480, 250]. Смещение определяет координаты пикселей центра проекции. По умолчанию смещение помещает точку ⟨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, устанавливает предел для адаптивной передискретизации проекции в указанное значение в пикселях и возвращает проекцию. Это значение соответствует расстоянию Дугласа-Пекера. Если параметр precision не указан, возвращает текущую точность передискретизации проекции, которая по умолчанию установлена в Math.sqrt(1/2).

Параметр precision, равный 0, отключает адаптивную передискретизацию.

# projection.stream(listener)

Возвращает проецирующий поток, обёртывающий указанный слушатель listener. Любая геометрия, проходящая через обёртку, проецируется перед передачей в обёрнутый слушатель. Типичная проекция включает в себя несколько потоковых преобразований: входная геометрия сначала конвертируется в радианы, поворачивается по трём осям, обрезается по малому кругу или разрезается по антимеридиану и, наконец, проецируется на декартову плоскость с адаптивной передискретизацией, масштабированием и смещением.

# d3.geo.projectionMutator(rawFactory)

Конструерует новую проекцию из указанной сырой фабричной функции проецирования точек rawFactory. Эта функция не возвращает проекцию непосредственно, но вместо этого возвращает метод mutate, который вы можете вызывать всякий раз при изменении функции сырой проекции. Например, скажем вы реализовали равновеликую коническую проекцию Альберса, которая требует конфигурурования проекции двумя параллелями. Используя замыкания, вы можете реализовать сырую проекцию следующим образом:

// φ0 и φ1 - это две параллели
function albersRaw(φ0, φ1) {
  return function(λ, φ) {
    return [
      /* здесь вычисляем x */,
      /* здесь вычисляем y */
    ];
  };
}

Используя 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 (коэффициент лжи (lie factor) равен 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.raw0, φ1)

Псевдоним для d3.geo.conicEqualArea.raw.

# d3.geo.azimuthalEqualArea.raw

Сырая равновеликая азимутальная проекция.

# d3.geo.azimuthalEquidistant.raw

Сырая равнопромежуточная азимутальная проекция.

# d3.geo.conicConformal.raw0, φ1)

Возвращает сырую конформную коническую проекцию с указанными параллелями в радианах.

# d3.geo.conicEqualArea.raw0, φ1)

Возвращает сырую проекцию Альберса с указанными параллелями в радианах.

# d3.geo.conicEquidistant.raw0, φ1)

Возвращает сырую равнопромежуточную коническую проекцию с указанными параллелями в радианах.

# d3.geo.equirectangular.raw

Сырая равнопромежуточная проекция.

# d3.geo.gnomonic.raw

Сырая гномоническая проекция.

# d3.geo.mercator.raw

Сырая проекция Меркатора.

# d3.geo.orthographic.raw

Сырая ортографическая проекция.

# d3.geo.stereographic.raw

Сырая стереографическая проекция.

Clone this wiki locally