Merge pull request #8618 from fredj/topojson_types
Use TopoJSON types from @types/topojson
This commit is contained in:
@@ -41,6 +41,7 @@
|
||||
"devDependencies": {
|
||||
"@openlayers/eslint-plugin": "^4.0.0-beta.1",
|
||||
"@types/geojson": "^7946.0.4",
|
||||
"@types/topojson-specification": "^1.0.0",
|
||||
"buble": "^0.19.3",
|
||||
"buble-loader": "^0.5.1",
|
||||
"chaikin-smooth": "^1.0.4",
|
||||
|
||||
@@ -12,6 +12,17 @@ import Point from '../geom/Point.js';
|
||||
import Polygon from '../geom/Polygon.js';
|
||||
import {get as getProjection} from '../proj.js';
|
||||
|
||||
/**
|
||||
* @typedef {import("topojson-specification").Topology} TopoJSONTopology
|
||||
* @typedef {import("topojson-specification").GeometryCollection} TopoJSONGeometryCollection
|
||||
* @typedef {import("topojson-specification").GeometryObject} TopoJSONGeometry
|
||||
* @typedef {import("topojson-specification").Point} TopoJSONPoint
|
||||
* @typedef {import("topojson-specification").MultiPoint} TopoJSONMultiPoint
|
||||
* @typedef {import("topojson-specification").LineString} TopoJSONLineString
|
||||
* @typedef {import("topojson-specification").MultiLineString} TopoJSONMultiLineString
|
||||
* @typedef {import("topojson-specification").Polygon} TopoJSONPolygon
|
||||
* @typedef {import("topojson-specification").MultiPolygon} TopoJSONMultiPolygon
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} Options
|
||||
@@ -82,18 +93,18 @@ class TopoJSON extends JSONFeature {
|
||||
if (object.type == 'Topology') {
|
||||
const topoJSONTopology = /** @type {TopoJSONTopology} */ (object);
|
||||
let transform, scale = null, translate = null;
|
||||
if (topoJSONTopology.transform) {
|
||||
transform = topoJSONTopology.transform;
|
||||
scale = transform.scale;
|
||||
translate = transform.translate;
|
||||
if (topoJSONTopology['transform']) {
|
||||
transform = topoJSONTopology['transform'];
|
||||
scale = transform['scale'];
|
||||
translate = transform['translate'];
|
||||
}
|
||||
const arcs = topoJSONTopology.arcs;
|
||||
const arcs = topoJSONTopology['arcs'];
|
||||
if (transform) {
|
||||
transformArcs(arcs, scale, translate);
|
||||
}
|
||||
/** @type {Array<Feature>} */
|
||||
const features = [];
|
||||
const topoJSONFeatures = topoJSONTopology.objects;
|
||||
const topoJSONFeatures = topoJSONTopology['objects'];
|
||||
const property = this.layerName_;
|
||||
let feature;
|
||||
for (const objectName in topoJSONFeatures) {
|
||||
@@ -178,13 +189,13 @@ function concatenateArcs(indices, arcs) {
|
||||
/**
|
||||
* Create a point from a TopoJSON geometry object.
|
||||
*
|
||||
* @param {TopoJSONGeometry} object TopoJSON object.
|
||||
* @param {TopoJSONPoint} object TopoJSON object.
|
||||
* @param {Array<number>} scale Scale for each dimension.
|
||||
* @param {Array<number>} translate Translation for each dimension.
|
||||
* @return {Point} Geometry.
|
||||
*/
|
||||
function readPointGeometry(object, scale, translate) {
|
||||
const coordinates = object.coordinates;
|
||||
const coordinates = object['coordinates'];
|
||||
if (scale && translate) {
|
||||
transformVertex(coordinates, scale, translate);
|
||||
}
|
||||
@@ -195,13 +206,13 @@ function readPointGeometry(object, scale, translate) {
|
||||
/**
|
||||
* Create a multi-point from a TopoJSON geometry object.
|
||||
*
|
||||
* @param {TopoJSONGeometry} object TopoJSON object.
|
||||
* @param {TopoJSONMultiPoint} object TopoJSON object.
|
||||
* @param {Array<number>} scale Scale for each dimension.
|
||||
* @param {Array<number>} translate Translation for each dimension.
|
||||
* @return {MultiPoint} Geometry.
|
||||
*/
|
||||
function readMultiPointGeometry(object, scale, translate) {
|
||||
const coordinates = object.coordinates;
|
||||
const coordinates = object['coordinates'];
|
||||
if (scale && translate) {
|
||||
for (let i = 0, ii = coordinates.length; i < ii; ++i) {
|
||||
transformVertex(coordinates[i], scale, translate);
|
||||
@@ -214,12 +225,12 @@ function readMultiPointGeometry(object, scale, translate) {
|
||||
/**
|
||||
* Create a linestring from a TopoJSON geometry object.
|
||||
*
|
||||
* @param {TopoJSONGeometry} object TopoJSON object.
|
||||
* @param {TopoJSONLineString} object TopoJSON object.
|
||||
* @param {Array<Array<import("../coordinate.js").Coordinate>>} arcs Array of arcs.
|
||||
* @return {LineString} Geometry.
|
||||
*/
|
||||
function readLineStringGeometry(object, arcs) {
|
||||
const coordinates = concatenateArcs(object.arcs, arcs);
|
||||
const coordinates = concatenateArcs(object['arcs'], arcs);
|
||||
return new LineString(coordinates);
|
||||
}
|
||||
|
||||
@@ -227,14 +238,14 @@ function readLineStringGeometry(object, arcs) {
|
||||
/**
|
||||
* Create a multi-linestring from a TopoJSON geometry object.
|
||||
*
|
||||
* @param {TopoJSONGeometry} object TopoJSON object.
|
||||
* @param {TopoJSONMultiLineString} object TopoJSON object.
|
||||
* @param {Array<Array<import("../coordinate.js").Coordinate>>} arcs Array of arcs.
|
||||
* @return {MultiLineString} Geometry.
|
||||
*/
|
||||
function readMultiLineStringGeometry(object, arcs) {
|
||||
const coordinates = [];
|
||||
for (let i = 0, ii = object.arcs.length; i < ii; ++i) {
|
||||
coordinates[i] = concatenateArcs(object.arcs[i], arcs);
|
||||
for (let i = 0, ii = object['arcs'].length; i < ii; ++i) {
|
||||
coordinates[i] = concatenateArcs(object['arcs'][i], arcs);
|
||||
}
|
||||
return new MultiLineString(coordinates);
|
||||
}
|
||||
@@ -243,14 +254,14 @@ function readMultiLineStringGeometry(object, arcs) {
|
||||
/**
|
||||
* Create a polygon from a TopoJSON geometry object.
|
||||
*
|
||||
* @param {TopoJSONGeometry} object TopoJSON object.
|
||||
* @param {TopoJSONPolygon} object TopoJSON object.
|
||||
* @param {Array<Array<import("../coordinate.js").Coordinate>>} arcs Array of arcs.
|
||||
* @return {Polygon} Geometry.
|
||||
*/
|
||||
function readPolygonGeometry(object, arcs) {
|
||||
const coordinates = [];
|
||||
for (let i = 0, ii = object.arcs.length; i < ii; ++i) {
|
||||
coordinates[i] = concatenateArcs(object.arcs[i], arcs);
|
||||
for (let i = 0, ii = object['arcs'].length; i < ii; ++i) {
|
||||
coordinates[i] = concatenateArcs(object['arcs'][i], arcs);
|
||||
}
|
||||
return new Polygon(coordinates);
|
||||
}
|
||||
@@ -259,15 +270,15 @@ function readPolygonGeometry(object, arcs) {
|
||||
/**
|
||||
* Create a multi-polygon from a TopoJSON geometry object.
|
||||
*
|
||||
* @param {TopoJSONGeometry} object TopoJSON object.
|
||||
* @param {TopoJSONMultiPolygon} object TopoJSON object.
|
||||
* @param {Array<Array<import("../coordinate.js").Coordinate>>} arcs Array of arcs.
|
||||
* @return {MultiPolygon} Geometry.
|
||||
*/
|
||||
function readMultiPolygonGeometry(object, arcs) {
|
||||
const coordinates = [];
|
||||
for (let i = 0, ii = object.arcs.length; i < ii; ++i) {
|
||||
for (let i = 0, ii = object['arcs'].length; i < ii; ++i) {
|
||||
// for each polygon
|
||||
const polyArray = object.arcs[i];
|
||||
const polyArray = object['arcs'][i];
|
||||
const ringCoords = [];
|
||||
for (let j = 0, jj = polyArray.length; j < jj; ++j) {
|
||||
// for each ring
|
||||
@@ -294,7 +305,7 @@ function readMultiPolygonGeometry(object, arcs) {
|
||||
* @return {Array<Feature>} Array of features.
|
||||
*/
|
||||
function readFeaturesFromGeometryCollection(collection, arcs, scale, translate, property, name, opt_options) {
|
||||
const geometries = collection.geometries;
|
||||
const geometries = collection['geometries'];
|
||||
const features = [];
|
||||
for (let i = 0, ii = geometries.length; i < ii; ++i) {
|
||||
features[i] = readFeatureFromGeometry(
|
||||
|
||||
Reference in New Issue
Block a user