You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.0 KiB

import { Props as MarkerProps, useInit as useInitMarker } from "../overlay/marker/use";
/**
*
* @param lnglat
*/
export const toLngLat = (lnglat: VT.LngLat) => {
const [lng, lat] = lnglat;
return new T.LngLat(lng, lat);
};
/**
*
* @param lngLats
*/
export const toLngLats = (lnglats: VT.LngLats) => {
return lnglats.map(lnglat => {
const [lng, lat] = lnglat;
return new T.LngLat(lng, lat);
});
};
/**
*
* @param bounds
*/
export const toBounds = (bounds: VT.Bounds) => {
const [[lng1, lat1], [lng2, lat2]] = bounds;
return new T.LngLatBounds(new T.LngLat(lng1, lat1), new T.LngLat(lng2, lat2));
};
/**
*
* @param point
*/
export const toPoint = (point: VT.Point) => {
const [x, y] = point;
return new T.Point(x, y);
};
/**
* undefined
* @param obj
*/
export const objectFilter = (obj: Record<string, any>) => {
const res: Record<string, any> = {};
Object.keys(obj).forEach(key => {
if (obj[key] !== undefined) {
res[key] = obj[key];
}
});
return res;
};
/**
*
* @param icon
*/
export const toIcon = (icon: VT.IconOptions | string) => {
if (typeof icon === "string") {
return new T.Icon({ iconUrl: icon });
} else {
const { iconUrl, iconSize, iconAnchor } = icon;
const iconOption = {
iconUrl,
iconSize: iconSize && toPoint(iconSize),
iconAnchor: iconAnchor && toPoint(iconAnchor)
};
return new T.Icon(objectFilter(iconOption));
}
};
/**
*
* @param option
*/
export const toMarker = (option: MarkerProps) => {
const marker = useInitMarker(option);
option.icon && marker.setIcon(toIcon(option.icon));
// @ts-ignore
marker.extData = option.extData;
return marker;
};