fixTransmeridian = {
function fixTransmeridianCoord(coord) {
const lng = coord[0];
coord[0] = lng < 0 ? lng + 360 : lng;
}
function fixTransmeridianLoop(loop) {
let isTransmeridian = false;
for (let i = 0; i < loop.length; i++) {
if (Math.abs(loop[0][0] - loop[(i + 1) % loop.length][0]) > 180) {
isTransmeridian = true;
break;
}
}
if (isTransmeridian) {
loop.forEach(fixTransmeridianCoord);
}
}
function fixTransmeridianPolygon(polygon) {
polygon.forEach(fixTransmeridianLoop);
}
function fixTransmeridian(feature) {
const {type} = feature;
if (type === 'FeatureCollection') {
feature.features.map(fixTransmeridian);
return;
}
const {type: geometryType, coordinates} = feature.geometry;
switch (geometryType) {
case 'LineString':
fixTransmeridianLoop(coordinates);
return;
case 'Polygon':
fixTransmeridianPolygon(coordinates);
return;
case 'MultiPolygon':
coordinates.forEach(fixTransmeridianPolygon);
return;
default:
throw new Error(`Unknown geometry type: ${geometryType}`);
}
}
return fixTransmeridian;
}