Потоки Geo
Справочник API ▸ Geo ▸ Потоки Geo
Для быстрых преобразований геометрии без временных копий объектов геометрии D3 использует потоки геометрии. Основной метод d3.geo.stream преобразует входной объект GeoJSON в поток: последовательность вызовов методов на слушателе потока. Кроме того, D3 предоставляет несколько преобразований потоков, которые оборачивают слушателей и преобразуют геометрию. Например, интерфейс projection.stream преобразует сферические координаты в декартовы, а d3.geo.path сериализует геометрию в SVG или Canvas. Внутренне обрезка и поворот также реализованы как преобразования потоков.
d3.geo.stream(объект, слушатель)
Передает указанный GeoJSON объект указанному слушателю потока. (Несмотря на название «поток», эти вызовы методов в настоящее время являются синхронными.) Хотя в качестве входных данных поддерживаются как объекты функций, так и геометрии, интерфейс потока описывает только геометрию, поэтому дополнительные свойства функций не видны слушателям.
Слушатели потока
Слушатели потока должны реализовывать несколько методов для обхода геометрии. Слушатели по своей природе обладают состоянием; значение точки зависит от того, находится ли точка внутри линии, и аналогично линия отличается от кольца с помощью многоугольника.
listener.point(x, y[, z])
Указывает точку с указанными координатами x и y (и необязательно z). Система координат не определена и зависит от реализации; например, потоки проекций требуют сферических координат в градусах в качестве входных данных. Вне контекста многоугольника или линии точка указывает объект геометрии точки (Точка или Многоточечная). Внутри линии или кольца многоугольника точка указывает контрольную точку.
listener.lineStart()
Указывает начало линии или кольца. Внутри многоугольника указывает начало кольца. Первое кольцо многоугольника — внешнее кольцо, обычно по часовой стрелке. Любые последующие кольца указывают дыры в многоугольнике и обычно против часовой стрелки.
listener.lineEnd()
Указывает конец линии или кольца. Внутри многоугольника указывает конец кольца. В отличие от GeoJSON, избыточная заключительная координата кольца не указывается с помощью point, а вместо этого подразумевается с помощью lineEnd в пределах многоугольника. Таким образом, данный входной многоугольник:
{
"type": "Polygon",
"coordinates": [
[[0, 0], [1, 0], [1, 1], [0, 1], [0, 0]]
]
} Создаст следующую серию вызовов методов слушателя:
listener.polygonStart(); listener.lineStart(); listener.point(0, 0); listener.point(1, 0); listener.point(1, 1); listener.point(0, 1); listener.lineEnd(); listener.polygonEnd();
listener.polygonStart()
Указывает начало многоугольника. Первая линия многоугольника указывает внешнее кольцо, а любые последующие линии указывают внутренние дыры.
listener.polygonEnd()
Указывает конец многоугольника.
listener.sphere()
Указывает сферу (глобус; единичную сферу с центром в ⟨0,0,0⟩).
Преобразования потоков
Преобразование потока оборачивает слушателя потока, преобразуя геометрию перед передачей ее обернутому слушателю. Географическая проекция является примером преобразования потока. Класс d3.geo.transform предоставляет простой способ реализации пользовательского преобразования потока.
d3.geo.transform(методы)
Создает новое преобразование потока, используя указанный хеш методов. Хеш может содержать реализации любого из стандартных методов слушателя потока: sphere, point, lineStart, lineEnd, polygonStart и polygonEnd. Любой метод, который отсутствует в указанном хеше, будет реализован как проход непосредственно к обернутому потоку. Чтобы получить доступ к обернутому потоку внутри метода, используйте this.stream. Например, чтобы реализовать простое преобразование матрицы 2D:
function matrix(a, b, c, d, tx, ty) {
return d3.geo.transform({
point: function(x, y) { this.stream.point(a * x + b * y + tx, c * x + d * y + ty); },
});
} Это преобразование затем может быть использовано совместно с d3.geo.path. Например, чтобы реализовать 2D аффинное преобразование, которое переворачивает ось y:
var path = d3.geo.path()
.projection(matrix(1, 0, 0, -1, 0, height)); transform.stream(слушатель)
При заданном слушателе потока слушатель возвращает обернутого слушателя потока, который применяет это преобразование к любой входной геометрии перед передачей ее обернутому слушателю.
d3.geo.clipExtent()
Создает новое преобразование потока преобразования, которое реализует обрезку прямоугольника, выровненного по осям. Это обычно используется для обрезки геометрии до области просмотра после проектирования.
clipExtent.extent([extent])
Если extent задан, устанавливает обрезку до указанного прямоугольника [[x0, y0], [x1, y1]] и возвращает это преобразование. Если extent не задан, возвращает текущую обрезку, которая по умолчанию равна [[0, 0], [960, 500]].
© 2010–2016 Michael Bostock
Licensed under the BSD License.
https://github.com/d3/d3-3.x-api-reference/blob/master/Geo-Streams.md