72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
import { LngLatBounds } from 'mapbox-gl';
|
|
|
|
export function getBounds(geometry) {
|
|
const bbox = new LngLatBounds();
|
|
|
|
if (geometry.type === 'Point') {
|
|
return [geometry.coordinates, geometry.coordinates];
|
|
} else if (geometry.type === 'LineString') {
|
|
for (const coordinate of geometry.coordinates) {
|
|
bbox.extend(coordinate);
|
|
}
|
|
} else {
|
|
for (const coordinate of geometry.coordinates[0]) {
|
|
bbox.extend(coordinate);
|
|
}
|
|
}
|
|
return bbox;
|
|
}
|
|
|
|
export function findFeature(featureCollection, value, property = 'id') {
|
|
return featureCollection.features.find(
|
|
(feature) => feature.properties[property] === value
|
|
);
|
|
}
|
|
|
|
export function filterFeatureCollection(featureCollection, source) {
|
|
return {
|
|
type: 'FeatureCollection',
|
|
features: featureCollection.features.filter(
|
|
(feature) => feature.properties.source === source
|
|
)
|
|
};
|
|
}
|
|
|
|
export function filterFeatureCollectionByGeometryType(featureCollection, type) {
|
|
return {
|
|
type: 'FeatureCollection',
|
|
features: featureCollection.features.filter(
|
|
(feature) => feature.geometry.type === type
|
|
)
|
|
};
|
|
}
|
|
|
|
export function generateId() {
|
|
return Math.random().toString(20).substr(2, 6);
|
|
}
|
|
|
|
export function getCenter(geometry, lngLat) {
|
|
const bbox = new LngLatBounds();
|
|
|
|
switch (geometry.type) {
|
|
case 'Point':
|
|
return [...geometry.coordinates];
|
|
case 'LineString':
|
|
return [lngLat.lng, lngLat.lat];
|
|
default:
|
|
for (const coordinate of geometry.coordinates[0]) {
|
|
bbox.extend(coordinate);
|
|
}
|
|
return bbox.getCenter();
|
|
}
|
|
}
|
|
|
|
export function defer() {
|
|
const deferred = {};
|
|
const promise = new Promise(function (resolve, reject) {
|
|
deferred.resolve = resolve;
|
|
deferred.reject = reject;
|
|
});
|
|
deferred.promise = promise;
|
|
return deferred;
|
|
}
|