Spec-Zone.ru › D3.js 4

d3-geo

Картографические проекции иногда реализуются как преобразования точек. Например, сферический Меркатор:

function mercator(x, y) {
  return [x, Math.log(Math.tan(Math.PI / 4 + y / 2))];
}

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

Дискретная геометрия усложняет задачу проектирования сферы на плоскость. Стороны сферического многоугольника являются геодезическими (отрезками больших кругов), а не прямыми линиями. При проектировании на плоскость геодезические линии являются кривыми во всех картографических проекциях, кроме гномонической, и поэтому для точного проектирования требуется интерполяция вдоль каждой дуги. D3 использует адаптивную выборку, вдохновленную популярным методом упрощения линий, для баланса точности и производительности.

Проекция многоугольников и ломаных линий также должна учитывать топологические различия между сферой и плоскостью. Некоторые проекции требуют разделения геометрии, пересекающей антимеридиан, в то время как другие требуют обрезки геометрии до большого круга.

Сферические многоугольники также требуют конвенции порядка обхода, чтобы определить, какая сторона многоугольника является внутренней: внешняя обводка для многоугольников, меньших полусферы, должна быть по часовой стрелке, в то время как внешняя обводка для многоугольников, больших полусферы, должна быть против часовой стрелки. Внутренние контуры, представляющие отверстия, должны использовать порядок обхода, противоположный порядку обхода их внешнего контура. Эта конвенция порядка обхода также используется в TopoJSON и ESRI shapefiles; однако это противоположная конвенция по сравнению с RFC 7946 GeoJSON. (Обратите также внимание, что стандартный GeoJSON WGS84 использует плоские прямоугольные координаты, а не сферические, и поэтому может потребоваться склейка для удаления разрезов антимеридиана.)

Подход D3 обеспечивает большую выразительность: вы можете выбрать подходящую проекцию и вид для своих данных. D3 поддерживает широкий спектр общих и необычных картографических проекций. Дополнительную информацию см. во второй части Руководства разработчика инструментов.

D3 использует GeoJSON для представления географических объектов в JavaScript. (См. также TopoJSON, расширение GeoJSON, которое значительно более компактное и кодирует топологию). Для преобразования shapefiles в GeoJSON используйте shp2geo, часть пакета shapefile. Ознакомьтесь со статьей Command-Line Cartography, чтобы узнать больше о d3-geo и связанных инструментах.

Установка

Если вы используете NPM, npm install d3-geo. В противном случае загрузите последнюю версию. Вы также можете загрузить её напрямую с d3js.org как отдельную библиотеку или в составе D3 4.0. Поддерживаются среды AMD, CommonJS и vanilla. В vanilla, экспортируется d3 глобальная переменная:

<script src="https://d3js.org/d3-array.v1.min.js"></script>
<script src="https://d3js.org/d3-geo.v1.min.js"></script>
<script>

var projection = d3.geoNaturalEarth1(),
    path = d3.geoPath(projection);

</script>

Попробуйте d3-geo в вашем браузере.

Справочник API

  • Пути
  • Проекции (Азимутальные, Композитные, Конические, Цилиндрические)
  • Необработанные проекции
  • Сферическая математика
  • Сферические фигуры
  • Потоки
  • Преобразования
  • Обрезка

Пути

Генератор географических путей d3.geoPath похож на генераторы фигур в d3-shape: используя объект GeoJSON геометрии или объекта, он генерирует строку данных SVG пути или отрисовывает путь на Canvas. Для динамических или интерактивных проекций рекомендуется использовать Canvas для повышения производительности. Пути могут быть использованы с проекциями или преобразованиями, или они могут использоваться для непосредственного отрисовки плоской геометрии на Canvas или SVG.

d3.geoPath([projection[, context]]) Источник

Создает новый генератор географических путей со стандартными настройками. Если указана projection, устанавливает текущую проекцию. Если указан context, устанавливает текущий контекст.

path(object[, arguments…]) Источник

Отображает заданный object, который может быть любым объектом GeoJSON фигуры или геометрии:

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

Также поддерживается тип Sphere, который полезен для отрисовки контура глобуса; у сферы нет координат. Любые дополнительные arguments передаются в аксессор pointRadius.

Для отображения нескольких фигур объедините их в коллекцию фигур:

svg.append("path")
    .datum({type: "FeatureCollection", features: features})
    .attr("d", d3.geoPath());

Или используйте несколько элементов пути:

svg.selectAll("path")
  .data(features)
  .enter().append("path")
    .attr("d", d3.geoPath());

Отдельные элементы пути, как правило, медленнее, чем один элемент пути. Однако отдельные элементы пути полезны для стилизации и взаимодействия (например, щелчок или наведение курсора). Отрисовка на Canvas (см. path.context) обычно быстрее, чем SVG, но требует больше усилий для реализации стилизации и взаимодействия.

path.area(object) Источник

Возвращает рассчитанную на плоскости площадь (обычно в квадратных пикселях) для указанного объекта GeoJSON object. Геометрии Точка, Многоточечный, Линейный отрезок и Многолинейный отрезок имеют площадь 0. Для многоугольников и многомногоугольников этот метод сначала вычисляет площадь внешнего контура, а затем вычитает площадь всех внутренних отверстий. Этот метод учитывает любую обрезку, выполненную проекцией; см. projection.clipAngle и projection.clipExtent. Это эквивалент вычисления площади на плоскости d3.geoArea.

path.bounds(object) Источник

Возвращает проекционную ограничивающую рамку на плоскости (обычно в пикселях) для указанного объекта GeoJSON object. Ограничивающая рамка представлена двумерным массивом: [[x₀, y₀], [x₁, y₁]], где x₀ — минимальная координата x, y₀ — минимальная координата y, x₁ — максимальная координата x, а y₁ — максимальная координата y. Это удобно, например, для масштабирования в определённую область. (Обратите внимание, что в проекционных координатах на плоскости минимальная широта обычно является максимальным значением y, а максимальная широта обычно является минимальным значением y.) Этот метод учитывает любую обрезку, выполненную проекцией; см. projection.clipAngle и projection.clipExtent. Это эквивалент вычисления границ на плоскости d3.geoBounds.

path.centroid(object) Источник

Возвращает проекционный центр масс на плоскости (обычно в пикселях) для указанного объекта GeoJSON object. Это удобно, например, при маркировке границ штатов или округов или отображения карты символов. Например, несмежная карта-картограмма может масштабировать каждый штат вокруг его центра масс. Этот метод учитывает любую обрезку, выполненную проекцией; см. projection.clipAngle и projection.clipExtent. Это эквивалент вычисления центра масс на плоскости d3.geoCentroid.

path.measure(object) Источник

Возвращает рассчитанную на плоскости длину (обычно в пикселях) для указанного объекта GeoJSON object. Геометрии Точка и Многоточечный имеют нулевую длину. Для многоугольников и многомногоугольников этот метод вычисляет суммарную длину всех контуров. Этот метод учитывает любую обрезку, выполненную проекцией; см. projection.clipAngle и projection.clipExtent. Это эквивалент вычисления длины на плоскости d3.geoLength.

path.projection([projection]) Источник

Если указана projection, устанавливает текущую проекцию на указанную проекцию. Если projection не указана, возвращает текущую проекцию, которая по умолчанию равна null. Нулевая проекция представляет тождественное преобразование: входящая геометрия не проектируется и вместо этого отображается непосредственно в исходных координатах. Это может быть полезно для быстрой отрисовки заранее спроектированной геометрии или для быстрой отрисовки прямоугольной проекции.

Указанная проекция обычно является одной из встроенных географических проекций D3; однако, может быть использован любой объект, который предоставляет функцию projection.stream, что позволяет использовать пользовательские проекции. См. преобразования D3 в разделе преобразования для получения дополнительных примеров произвольных геометрических преобразований.

path.context([context]) Источник

Если context указан, устанавливает текущий контекст отрисовки и возвращает генератор пути. Если context равен null, то генератор пути вернёт строку SVG пути; если контекст не равен null, генератор пути вместо этого вызовет методы, указанные в контексте, для отрисовки геометрии. Контекст должен реализовывать следующий подмножество API CanvasRenderingContext2D:

  • context.beginPath()
  • context.moveTo(x, y)
  • context.lineTo(x, y)
  • context.arc(x, y, radius, startAngle, endAngle)
  • context.closePath()

Если context не указан, возвращает текущий контекст отрисовки, который по умолчанию равен null.

path.pointRadius([radius]) Источник

Если radius указан, устанавливает радиус для отображения геометрии Точки и Многоточек до указанного числа. Если radius не указан, возвращает текущую функцию доступа к радиусу, которая по умолчанию равна 4,5. Хотя радиус обычно задаётся как числовая константа, он также может быть задан как функция, вычисляемая для каждой сущности и получающая любые аргументы, переданные генератору пути. Например, если ваши данные GeoJSON имеют дополнительные свойства, вы можете получить доступ к этим свойствам внутри функции радиуса, чтобы изменять размер точки; альтернативно, вы можете использовать d3.symbol и проекцию для большей гибкости.

Проекции

Проекции преобразуют сферическую полигональную геометрию в плоскую полигональную геометрию. D3 предоставляет реализации нескольких классов стандартных проекций:

  • Азимутальные
  • Составные
  • Конические
  • Цилиндрические

Для получения множества других проекций, см. d3-geo-projection. Вы можете реализовать пользовательские проекции с помощью d3.geoProjection или d3.geoProjectionMutator.

projection(point) Источник

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

projection.invert(point) Источник

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

Этот метод определён только для обратимых проекций.

projection.stream(stream) Источник

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

projection.preclip([preclip])

Если preclip указан, устанавливает сферическую обрезку проекции на указанную функцию и возвращает проекцию. Если preclip не указан, возвращает текущую функцию сферической обрезки (см. preclip).

projection.postclip([postclip])

Если postclip указан, устанавливает карtezianскую обрезку проекции на указанную функцию и возвращает проекцию. Если postclip не указан, возвращает текущую функцию карtezianской обрезки (см. postclip).

projection.clipAngle([angle]) Источник

Если angle указан, устанавливает радиус круга обрезки проекции на указанный угол в градусах и возвращает проекцию. Если angle равен null, переключается на разрез по антимеридиану вместо обрезки малой окружности. Если angle не указан, возвращает текущий угол обрезки, который по умолчанию равен null. Обрезка малой окружности независима от обрезки области просмотра через projection.clipExtent.

См. также projection.preclip, d3.geoClipAntimeridian, d3.geoClipCircle.

projection.clipExtent([extent]) Источник

Если extent указан, устанавливает область обрезки области просмотра проекции до заданных границ в пикселях и возвращает проекцию. Границы extent задаются как массив [[x₀, y₀], [x₁, y₁]], где x₀ - левая сторона области просмотра, y₀ - верхняя, x₁ - правая и y₁ - нижняя. Если extent равен null, обрезка области просмотра не выполняется. Если extent не указан, возвращает текущую область обрезки области просмотра, которая по умолчанию равна null. Обрезка области просмотра независима от обрезки малой окружности через projection.clipAngle.

См. также projection.postclip, d3.geoClipRectangle.

projection.scale([scale]) Источник

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

projection.translate([translate]) Источник

Если translate указан, устанавливает смещение переноса проекции на указанный массив из двух элементов [tx, ty] и возвращает проекцию. Если translate не указан, возвращает текущее смещение переноса, которое по умолчанию равно [480, 250]. Смещение переноса определяет пиксельные координаты центра проекции центра. Смещение переноса по умолчанию размещает ⟨0°,0°⟩ в центре области 960×500.

projection.center([center]) Источник

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

projection.rotate([angles]) Источник

Если rotation указан, устанавливает вращение по трём осям проекции на указанные углы, которые должны быть массивом из двух или трёх элементов чисел [lambda, phi, gamma], определяющих углы вращения в градусах вокруг каждой сферической оси. (Эти соответствуют курсу, тангажу и рысканию.) Если угол вращения gamma опущен, он по умолчанию равен 0. См. также d3.geoRotation. Если rotation не указан, возвращает текущее вращение, которое по умолчанию [0, 0, 0].

projection.precision([precision]) Источник

Если precision указан, устанавливает порог для адаптивной ресемплинга проекции на указанное значение в пикселях и возвращает проекцию. Это значение соответствует расстоянию по алгоритму Douglas–Peucker. Если precision не указан, возвращает текущую точность ресемплинга проекции, которая по умолчанию равна √0.5 ≅ 0.70710…

projection.fitExtent(extent, object) Источник

Устанавливает масштаб и смещение проекции для подгонки указанного объекта GeoJSON в центре заданного extent. Область задаётся как массив [[x₀, y₀], [x₁, y₁]], где x₀ - левая сторона ограничивающей рамки, y₀ - верхняя, x₁ - правая и y₁ - нижняя. Возвращает проекцию.

Например, чтобы масштабировать и сместить проекцию Нью-Джерси State Plane для подгонки объекта GeoJSON nj в центр прямоугольной области 960×500 с отступом 20 пикселей с каждой стороны:

var projection = d3.geoTransverseMercator()
    .rotate([74 + 30 / 60, -38 - 50 / 60])
    .fitExtent([[20, 20], [940, 480]], nj);

Любой предел обрезки игнорируется при определении нового масштаба и сдвига. Точность вычисления для вычисления ограничивающей рамки заданного объекта вычисляется с эффективным масштабом 150.

projection.fitSize(size, object) Источник

Удобный метод для projection.fitExtent, где верхний левый угол рамки — [0, 0]. Следующие два утверждения эквивалентны:

projection.fitExtent([[0, 0], [width, height]], object);
projection.fitSize([width, height], object);
projection.fitWidth(width, object) Источник

Удобный метод для projection.fitSize, где высота автоматически выбирается из соотношения сторон объекта и заданного ограничения по ширине.

projection.fitHeight(height, object) Источник

Удобный метод для projection.fitSize, где ширина автоматически выбирается из соотношения сторон объекта и заданного ограничения по высоте.

Азимутальные проекции

Азимутальные проекции отображают сферу непосредственно на плоскость.

d3.geoAzimuthalEqualArea() Источник
d3.geoAzimuthalEqualAreaRaw

Азимутальная равноплощадная проекция.

d3.geoAzimuthalEquidistant() Источник
d3.geoAzimuthalEquidistantRaw

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

d3.geoGnomonic() Источник
d3.geoGnomonicRaw

Гномоническая проекция.

d3.geoOrthographic() Источник
d3.geoOrthographicRaw

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

d3.geoStereographic() Источник
d3.geoStereographicRaw

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

Составные проекции

Составные проекции состоят из нескольких проекций, объединённых в единое отображение. Составляющие проекции имеют фиксированные значения обрезки, центра и поворота, и, следовательно, составные проекции не поддерживают projection.center, projection.rotate, projection.clipAngle или projection.clipExtent.

d3.geoAlbersUsa() Источник

Это центрированная на США составная проекция из трёх d3.geoConicEqualArea проекций: d3.geoAlbers используется для сорока восьми штатов, а отдельные равноплощадные конические проекции используются для Аляски и Гавайских островов. Обратите внимание, что масштаб для Аляски уменьшен: она отображается с 0,35× её реальной относительной площадью. Эта диаграмма Филиппа Ривьера иллюстрирует, как эта проекция использует два прямоугольных вкладыша для Аляски и Гавайев:

См. d3-composite-projections для получения дополнительных примеров.

Конические проекции

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

conic.parallels([parallels]) Источник

Две стандартные параллели, определяющие макет карты в конических проекциях.

d3.geoAlbers() Источник

Равноплощадная коническая проекция Альберса. Это центрированная на США конфигурация d3.geoConicEqualArea.

d3.geoConicConformal() Источник
d3.geoConicConformalRaw(phi0, phi1) Источник

Коническая конформная проекция. Параллели по умолчанию равны [30°, 30°], что приводит к плоскому верху. См. также conic.parallels.

d3.geoConicEqualArea() Источник
d3.geoConicEqualAreaRaw(phi0, phi1) Источник

Равноплощадная коническая проекция Альберса. См. также conic.parallels.

d3.geoConicEquidistant() Источник
d3.geoConicEquidistantRaw(phi0, phi1) Источник

Коническая равнорасстоянная проекция. См. также conic.parallels.

Цилиндрические проекции

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

d3.geoEquirectangular() Источник
d3.geoEquirectangularRaw

Прямоугольная (плакара) проекция.

d3.geoMercator() Источник
d3.geoMercatorRaw

Сферическая проекция Меркатора. Определяет значение по умолчанию projection.clipExtent таким образом, что мир отображается на квадрат, ограниченный приблизительно ±85° широтой.

d3.geoTransverseMercator() Источник
d3.geoTransverseMercatorRaw

Поперечная сферическая проекция Меркатора. Определяет значение по умолчанию projection.clipExtent таким образом, что мир отображается на квадрат, ограниченный приблизительно ±85° широтой.

d3.geoNaturalEarth1() Источник
d3.geoNaturalEarth1Raw

Естественная проекция Земли — псевдоцилиндрическая проекция, разработанная Томом Паттерсоном. Она не является ни конформной, ни равноплощадной, но привлекательна для восприятия на небольших масштабных картах всего мира.

Проекции "сырых данных"

Проекции "сырых данных" — функции преобразования точек, используемые для реализации пользовательских проекций; они обычно передаются в d3.geoProjection или d3.geoProjectionMutator. Они показаны здесь, чтобы облегчить вывод связанных проекций. Проекции "сырых данных" принимают сферические координаты [lambda, phi] в радианах (а не градусах!) и возвращают точку [x, y], обычно в единичном квадрате, центрированном вокруг начала координат.

project(lambda, phi)

Проецирует указанную точку [lambda, phi] в радианах, возвращая новую точку [x, y] в безразмерных координатах.

project.invert(x, y)

Обратное преобразование project.

d3.geoProjection(project) Источник

Создаёт новую проекцию из указанной проекции "сырых данных" project. Функция project принимает долготу и широту заданной точки в радианах, часто обозначаемые как lambda (λ) и phi (φ), и возвращает двумерный массив [x, y], представляющий её единичную проекцию. Функции project не нужно масштабировать или смещать точку, так как это делается автоматически функциями projection.scale, projection.translate и projection.center. Аналогично, функции project не нужно выполнять никаких сферических вращений, так как projection.rotate применяется до проекции.

Например, сферическую проекцию Меркатора можно реализовать как:

var mercator = d3.geoProjection(function(x, y) {
  return [x, Math.log(Math.tan(Math.PI / 4 + y / 2))];
});

Если функция project имеет метод invert, возвращаемая проекция также будет иметь projection.invert.

d3.geoProjectionMutator(factory) Источник

Создаёт новую проекцию из указанного сырого объекта проекции фабрики и возвращает функцию mutate, которую нужно вызывать всякий раз, когда сырая проекция изменяется. Фабрика должна возвращать сырую проекцию. Возвращаемая функция mutate возвращает обёрнутую проекцию. Например, у конической проекции обычно есть две настраиваемые параллели. Подходящая функция фабрики, например, d3.geoConicEqualAreaRaw, будет иметь вид:

// y0 and y1 represent two parallels
function conicFactory(phi0, phi1) {
  return function conicRaw(lambda, phi) {
    return […, …];
  };
}

Используя d3.geoProjectionMutator, вы можете реализовать стандартную проекцию, которая позволяет изменять параллели, переназначая сырую проекцию, используемую внутри d3.geoProjection:

function conicCustom() {
  var phi0 = 29.5,
      phi1 = 45.5,
      mutate = d3.geoProjectionMutator(conicFactory),
      projection = mutate(phi0, phi1);

  projection.parallels = function(_) {
    return arguments.length ? mutate(phi0 = +_[0], phi1 = +_[1]) : [phi0, phi1];
  };

  return projection;
}

При создании изменяемой проекции функция mutate обычно не экспонируется.

Сферическая математика

d3.geoArea(объект) Источник

Возвращает сферическую площадь указанного GeoJSON объекта в стерадианах. Это сферический эквивалент пути.area.

d3.geoBounds(объект) Источник

Возвращает сферическую ограничивающую рамку для указанного GeoJSON объекта. Ограничивающая рамка представлена двумерным массивом: [[левый, нижний], [правый, верхний]], где левый — минимальная долгота, нижний — минимальная широта, правый — максимальная долгота, а верхний — максимальная широта. Все координаты указаны в градусах. (Обратите внимание, что в проектных плоских координатах минимальная широта обычно является максимальным значением y, а максимальная широта обычно является минимальным значением y.) Это сферический эквивалент пути.bounds.

d3.geoCentroid(объект) Источник

Возвращает сферический центр тяжести указанного GeoJSON объекта. Это сферический эквивалент пути.centroid.

d3.geoDistance(a, b) Источник

Возвращает расстояние по большой дуге в радианах между двумя точками a и b. Каждая точка должна быть указана как массив из двух элементов [долгота, широта] в градусах. Это сферический эквивалент пути.measure для LineString из двух точек.

d3.geoLength(объект) Источник

Возвращает длину по большой дуге указанного GeoJSON объекта в радианах. Для полигонов возвращает периметр внешней линии плюс периметр внутренних линий. Это сферический эквивалент пути.measure.

d3.geoInterpolate(a, b) Источник

Возвращает функцию интерполяции для двух точек a и b. Каждая точка должна быть указана как массив из двух элементов [долгота, широта] в градусах. Возвращаемая функция интерполяции принимает один аргумент t, где t — число от 0 до 1; значение 0 возвращает точку a, а значение 1 возвращает точку b. Промежуточные значения интерполируют от a до b вдоль большой дуги, проходящей через a и b. Если a и b являются антиподами, выбирается произвольная большая дуга.

d3.geoContains(объект, точка) Источник

Возвращает true тогда и только тогда, когда указанный GeoJSON объект содержит указанную точку, или false, если объект не содержит точку. Точка должна быть указана как массив из двух элементов [долгота, широта] в градусах. Для геометрий Point и MultiPoint используется точное сравнение; для Sphere всегда возвращается true; для других геометрий применяется пороговое значение epsilon.

d3.geoRotation(углы) Источник

Возвращает функцию вращения для заданных углов, которые должны быть массивом из двух или трёх чисел [лямбда, фи, гамма], задающим углы вращения в градусах вокруг каждой сферической оси. (Они соответствуют курсу, тангажу и крену.) Если угол вращения гамма опущен, он по умолчанию равен 0. См. также проекция.rotate.

вращение(точка) Источник

Возвращает новый массив [долгота, широта] в градусах, представляющий повернутую точку заданной точки. Точка должна быть указана как массив из двух элементов [долгота, широта] в градусах.

вращение.invert(точка) Источник

Возвращает новый массив [долгота, широта] в градусах, представляющий точку заданной повернутой точки; обратная функция вращения. Точка должна быть указана как массив из двух элементов [долгота, широта] в градусах.

Сферические фигуры

Для создания большой дуги (отрезка большой окружности) просто передайте объект GeoJSON LineString в d3.geoPath. Проекции D3 используют интерполяцию по большой дуге для промежуточных точек, поэтому для генератора фигур большой дуги нет необходимости.

d3.geoCircle() Источник

Возвращает новый генератор окружности.

окружность(аргументы…) Источник

Возвращает новый GeoJSON-объект геометрии типа «Полигон», приближающий окружность на поверхности сферы с текущим центром, радиусом и точностью. Любые аргументы передаются в обработчики.

окружность.center([центр]) Источник

Если центр указан, устанавливает центр окружности в заданную точку [долгота, широта] в градусах и возвращает этот генератор окружности. Центр также может быть указан как функция; эта функция будет вызываться всякий раз, когда окружность генерируется, получая любые аргументы, переданные генератору окружности. Если центр не указан, возвращает текущий обработчик центра, по умолчанию:

function center() {
  return [0, 0];
}
окружность.radius([радиус]) Источник

Если радиус указан, устанавливает радиус окружности в указанный угол в градусах и возвращает этот генератор окружности. Радиус также может быть указан как функция; эта функция будет вызываться всякий раз, когда окружность генерируется, получая любые аргументы, переданные генератору окружности. Если радиус не указан, возвращает текущий обработчик радиуса, по умолчанию:

function radius() {
  return 90;
}
окружность.precision([угол]) Источник

Если точность указана, устанавливает точность окружности в указанный угол в градусах и возвращает этот генератор окружности. Точность также может быть указана как функция; эта функция будет вызываться всякий раз, когда окружность генерируется, получая любые аргументы, переданные генератору окружности. Если точность не указана, возвращает текущий обработчик точности, по умолчанию:

function precision() {
  return 6;
}

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

d3.geoGraticule() Источник

Создаёт генератор геометрии для создания меридианов: равномерной сетки меридианов и параллелей для демонстрации искажений проекции. По умолчанию меридианы и параллели имеют шаг 10° в диапазоне ±80° широты; для полярных областей меридианы имеют шаг 90°.

сетка() Источник

Возвращает объект GeoJSON MultiLineString, представляющий все меридианы и параллели для этой сетки.

сетка.lines() Источник

Возвращает массив GeoJSON-объектов геометрии LineString, по одному для каждого меридиана или параллели для этой сетки.

сетка.outline() Источник

Возвращает GeoJSON-объект геометрии Polygon, представляющий контур этой сетки, т. е. по меридианам и параллелям, определяющим её границы.

сетка.extent([диапазон]) Источник

Если диапазон указан, устанавливает основные и второстепенные диапазоны этой сетки. Если диапазон не указан, возвращает текущий второстепенный диапазон, который по умолчанию равен ⟨⟨-180°, -80° - ε⟩, ⟨180°, 80° + ε⟩⟩.

сетка.extentMajor([диапазон]) Источник

Если задано extent, устанавливает главный масштаб этого меридиана. Если extent не задано, возвращает текущий главный масштаб, который по умолчанию равен ⟨⟨-180°, -90° + ε⟩, ⟨180°, 90° - ε⟩⟩.

graticule.extentMinor([extent]) Source

Если задано extent, устанавливает вспомогательный масштаб этого меридиана. Если extent не задано, возвращает текущий вспомогательный масштаб, который по умолчанию равен ⟨⟨-180°, -80° - ε⟩, ⟨180°, 80° + ε⟩⟩.

graticule.step([step]) Source

Если задано step, устанавливает главный и вспомогательный шаг для этого меридиана. Если step не задано, возвращает текущий вспомогательный шаг, который по умолчанию равен ⟨10°, 10°⟩.

graticule.stepMajor([step]) Source

Если задано step, устанавливает главный шаг для этого меридиана. Если step не задано, возвращает текущий главный шаг, который по умолчанию равен ⟨90°, 360°⟩.

graticule.stepMinor([step]) Source

Если задано step, устанавливает вспомогательный шаг для этого меридиана. Если step не задано, возвращает текущий вспомогательный шаг, который по умолчанию равен ⟨10°, 10°⟩.

graticule.precision([angle]) Source

Если задано precision, устанавливает точность для этого меридиана в градусах. Если precision не задано, возвращает текущую точность, которая по умолчанию равна 2,5°.

d3.geoGraticule10() Source

Удобный метод для непосредственного создания глобального меридиана по умолчанию 10° как объекта геометрии GeoJSON MultiLineString. Эквивалентно:

function geoGraticule10() {
  return d3.geoGraticule()();
}

Потоки

D3 преобразует геометрию, используя последовательность вызовов функций, а не материализуя промежуточные представления, чтобы свести к минимуму накладные расходы. Потоки должны реализовывать несколько методов для получения входной геометрии. Потоки по своей природе состоят из состояний; значение точки зависит от того, находится ли точка внутри линии, и аналогично линия отличается от кольца многоугольника. Несмотря на название «поток», эти вызовы методов в настоящее время являются синхронными.

d3.geoStream(object, stream) Source

Потоки указанного GeoJSON object в указанный поток проекции stream. Хотя в качестве входных данных поддерживаются как функции, так и объекты геометрии, интерфейс потока описывает только геометрию, и поэтому дополнительные свойства функций не видны потокам.

stream.point(x, y[, z])

Указывает точку с указанными координатами x и y (и необязательно z). Система координат не определена и зависит от реализации; например, потоки проекций требуют сферических координат в градусах в качестве входных данных. Вне контекста многоугольника или линии точка обозначает объект геометрии точки (Point или MultiPoint). Внутри линии или кольца многоугольника точка обозначает контрольную точку.

stream.lineStart()

Указывает начало линии или кольца. Внутри многоугольника указывает начало кольца. Первое кольцо многоугольника — это внешнее кольцо, которое, как правило, задается по часовой стрелке. Любые последующие кольца указывают на отверстия в многоугольнике и, как правило, задаются против часовой стрелки.

stream.lineEnd()

Указывает конец линии или кольца. Внутри многоугольника указывает конец кольца. В отличие от GeoJSON, избыточная координата закрытия кольца не указывается с помощью point, а вместо этого подразумевается с помощью lineEnd внутри многоугольника. Таким образом, данный вход многоугольника:

{
  "type": "Polygon",
  "coordinates": [
    [[0, 0], [0, 1], [1, 1], [1, 0], [0, 0]]
  ]
}

Создаст следующую серию вызовов методов потока:

stream.polygonStart();
stream.lineStart();
stream.point(0, 0);
stream.point(0, 1);
stream.point(1, 1);
stream.point(1, 0);
stream.lineEnd();
stream.polygonEnd();
stream.polygonStart()

Указывает начало многоугольника. Первая линия многоугольника указывает внешнее кольцо, а любые последующие линии указывают внутренние отверстия.

stream.polygonEnd()

Указывает конец многоугольника.

stream.sphere()

Указывает сферу (глобус; единичную сферу, центрированную в ⟨0,0,0⟩).

Преобразования

Преобразования — это обобщение проекций. Преобразования реализуют projection.stream и могут быть переданы в path.projection. Однако они реализуют только подмножество других методов проекции и представляют собой произвольные геометрические преобразования, а не проекции со сферических на плоские координаты.

d3.geoTransform(methods) Source

Определяет произвольное преобразование, используя методы, определенные в указанном объекте methods. Любые неопределенные методы будут использовать методы прохождения, которые передают входные данные в выходной поток. Например, для отражения размерности y (см. также identity.reflectY):

var reflectY = d3.geoTransform({
  point: function(x, y) {
    this.stream.point(x, -y);
  }
});

Или для определения преобразования аффинной матрицы:

function matrix(a, b, c, d, tx, ty) {
  return d3.geoTransform({
    point: function(x, y) {
      this.stream.point(a * x + b * y + tx, c * x + d * y + ty);
    }
  });
}
d3.geoIdentity() Source

Преобразование тождества может быть использовано для масштабирования, перемещения и обрезки плоской геометрии. Оно реализует projection.scale, projection.translate, projection.fitExtent, projection.fitSize, projection.fitWidth, projection.fitHeight и projection.clipExtent.

identity.reflectX([reflect])

Если задано reflect, устанавливает, отражается ли размерность x (отрицается) в выводе. Если reflect не задано, возвращает true, если отражение по x включено, что по умолчанию равно false.

identity.reflectY([reflect])

Если задано reflect, устанавливает, отражается ли размерность y (отрицается) в выводе. Если reflect не задано, возвращает true, если отражение по y включено, что по умолчанию равно false. Это особенно полезно для преобразования из стандартных систем пространственных координат, в которых положительное y направлено вверх, в системы координат отображения, такие как Canvas и SVG, в которых положительное y направлено вниз.

Обрезка

Проекции выполняют обрезку геометрий в два этапа.

preclip(stream)

Предварительная обрезка происходит в географических координатах. Наиболее распространёнными стратегиями являются обрезка по антимеридианной линии или по малой окружности.

См. projection.preclip.

postclip(stream)

Последующая обрезка происходит на плоскости, когда проекция ограничена определенным масштабом, таким как прямоугольник.

См. projection.postclip.

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

d3.geoClipAntimeridian

Функция обрезки, которая преобразует поток таким образом, что геометрии (линии или многоугольники), пересекающие антимеридианную линию, разрезаются на две части, по одной с каждой стороны. Обычно используется для предварительной обрезки.

d3.geoClipCircle(angle)

Генерирует функцию обрезки, которая преобразует поток таким образом, что геометрии ограничены малой окружностью радиусом angle вокруг центра проекции center. Обычно используется для предварительной обрезки.

d3.geoClipRectangle(x0, y0, x1, y1)

Генерирует функцию обрезки, которая преобразует поток таким образом, что геометрии ограничены прямоугольником с координатами [[x0, y0], [x1, y1]]. Обычно используется для последующей обрезки.

© 2010–2017 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-geo

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API