diff --git a/src/MarkerCluster/demo.tsx b/src/MarkerCluster/demo.tsx new file mode 100644 index 0000000..41a72f5 --- /dev/null +++ b/src/MarkerCluster/demo.tsx @@ -0,0 +1,78 @@ +/** + * compact: true + * transform: true + * defaultShowCode: true + */ +/** + * @desc 点聚合组件 demo + */ +import React, { useCallback, useRef } from 'react'; +import { Button } from 'tdesign-react'; +import { MarkerCluster, BaseMap } from 'tlbs-map-react'; + +/** 数据 */ +const geometries = [ + { + position: { lat: 39.953416, lng: 116.480945 }, + }, + { + position: { lat: 39.984104, lng: 116.407503 }, + }, + { + position: { lat: 39.908802, lng: 116.497502 }, + }, + { + position: { lat: 40.040417, lng: 116.373514 }, + }, + { + position: { lat: 39.953416, lng: 116.380945 }, + }, + { + position: { lat: 39.984104, lng: 116.307503 }, + }, + { + position: { lat: 39.908802, lng: 116.397502 }, + }, + { + position: { lat: 40.040417, lng: 116.273514 }, + }, +]; + +export default () => { + const markerClusterRef: any = useRef(null); + + /** 打印图层实例 */ + const printInstance = useCallback(() => { + console.log('🚀🚀🚀 打印图层实例', markerClusterRef.current); + }, []); + + /** + * 图层点击事件处理器 + * @param event + */ + const clickHandler = useCallback((event: TMap.MapEvent) => { + console.log('🚀🚀🚀 图层点击事件', event); + }, []); + + return ( +
+
+ +
+ + + +
+ ); +}; diff --git a/src/MarkerCluster/index.md b/src/MarkerCluster/index.md new file mode 100644 index 0000000..d38da39 --- /dev/null +++ b/src/MarkerCluster/index.md @@ -0,0 +1,31 @@ +# 点聚合 MarkerCluster + +**1. 组件示例** + + +:::info{title=提示} +点击地图下方最右侧图标 `` 可展开代码 +::: + +**2. 组件 Props** + +| 属性 | 类型 | 说明 | 可选性 | 默认值 | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------- | :----- | :--------- | +| id | string | 图层 id,若没有会自动分配一个 | 可选 | | +| geometries | [PointGeometry[]](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocMarker#6) | 点聚合数据数组 | 可选 | [] | +| **options** | [Omit](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocCluster#2) | 点聚合配置参数(官网) | 可选 | 官网默认值 | + +**MarkerClusterOptions** +| 属性名称 | 类型 | 说明 | +| :--------- | :-------------------- | :------------------------------ | +| id | String | 图层 id,若没有会自动分配一个。 | +| map | Map | 显示点聚合图层的底图。 | +| zIndex | Number | 图层绘制顺序。 | +| geometries | PointGeometry[] | 点聚合数据数组。 | +| enableDefaultStyle | Boolean | 是否启用默认的聚合样式。 | +| minimumClusterSize | Number | 形成聚合簇的最小个数,默认为 2。 | +| zoomOnClick | Boolean | 点击已经聚合的标记点时是否实现聚合分离,默认为 true。 | +| gridSize | Number | 聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,默认为 60,以像素为单位,指的是地图 pitch 为 0 时的屏幕像素大小。 | +| averageCenter | Boolean | 每个聚和簇的中心是否应该是聚类中所有标记的平均值,默认为 false。 | +| maxZoom | Number | 采用聚合策略的最大缩放级别,若地图缩放级别大于该值,则不进行聚合。默认为 20。 | +| collisionOptions |[CollisionOptions](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocCluster#4) | 图层碰撞配置参数。 | diff --git a/src/MarkerCluster/index.tsx b/src/MarkerCluster/index.tsx new file mode 100644 index 0000000..f19ad23 --- /dev/null +++ b/src/MarkerCluster/index.tsx @@ -0,0 +1,82 @@ +/** + * @desc 点聚合组件 + */ +import React, { useContext, useEffect, useImperativeHandle, useState } from 'react'; +import { MapContext, useEventListener } from 'tlbs-map-react'; +import { CustomPointGeometry } from 'tlbs-map-react/interfaces'; + +/** + * 生成几何信息数组 + * @param geos 几何信息数组 + */ +const getGeometries = (geos: CustomPointGeometry[]) => geos.map((item) => { + const { position, ...rest } = item; + return { + ...rest, + position: new TMap.LatLng(item.position.lat, item.position.lng), + }; +}); + +interface MarkerClusterProps { + /** + * 图层id,若没有会自动分配一个 + */ + id?: string; + /** + * 点聚合数据数组 + */ + geometries?: CustomPointGeometry[] + /** + * GL API 参数 + */ + options?: Omit; + [key: string]: any; +} + +const MarkerClusterComponent: React.FC = React.forwardRef((props, ref) => { + const { + id, + geometries = [], + options = {}, + } = props as MarkerClusterProps; + + const map = useContext(MapContext); // 获取地图实例 + const [instance, setInstance] = useState(); // 存储点聚合图层实例 + + /** 初始化点聚合图层 */ + const initMarkerCluster = () => { + if (!map) return; + + const markerClusterInstance = new TMap.MarkerCluster({ + ...options, + map, + id, + geometries: getGeometries(geometries), + }); + setInstance(markerClusterInstance); + }; + + // @hook 初始化点聚合图层 + useEffect(() => { + if (!instance) initMarkerCluster(); + + return () => { + instance?.setMap(null); + }; + }, [map, instance]); + + // @hook 绑定事件 + useEventListener(instance, props); + + // @hook 给父组件暴露实例 + useImperativeHandle(ref, () => instance, [instance]); + + // @hook 监听几何信息改变 + useEffect(() => { + instance?.setGeometries(getGeometries(geometries)); + }, [geometries]); + + return null; +}); + +export default MarkerClusterComponent; diff --git a/src/MultiCircle/demo.tsx b/src/MultiCircle/demo.tsx index a063a71..fe012c5 100644 --- a/src/MultiCircle/demo.tsx +++ b/src/MultiCircle/demo.tsx @@ -1,44 +1,60 @@ - +/** + * compact: true + * transform: true + * defaultShowCode: true + */ +/** + * @desc 圆形组件 demo + */ import React, { useCallback, useRef, useState } from 'react'; -import { MultiCircle, BaseMap } from 'tlbs-map-react'; import { Button } from 'tdesign-react'; +import { MultiCircle, BaseMap } from 'tlbs-map-react'; /** 样式 */ const styles = { - circleStyle1: { - color: 'rgba(41,91,255,0.16)', + circle1: { + color: 'rgba(255, 73, 0, 0.2)', + borderColor: '#FF4900', showBorder: true, - borderColor: 'rgba(41,91,255,1)', - borderWidth: 2, }, - circleStyle2: { - color: 'rgba(41,91,255, 0.6)', + circle2: { + color: 'rgba(255, 206, 0, 0.2)', + borderColor: '#FC0', showBorder: true, - borderColor: 'rgba(41,91,255,1)', - borderWidth: 2, }, }; /** 数据 */ -const geometriesData1 = [{ - styleId: 'circleStyle1', - center: { lat: 40.0404, lng: 116.2735 }, - radius: 100, -}]; -const geometriesData2 = [{ - styleId: 'circleStyle2', - center: { lat: 40.0415, lng: 116.2763 }, - radius: 100, -}]; - +const geometriesData1 = [ + { + styleId: 'circle1', + center: { lat: 40.0404, lng: 116.2735 }, + radius: 100, + }, +]; +const geometriesData2 = [ + { + styleId: 'circle2', + center: { lat: 40.0415, lng: 116.2763 }, + radius: 80, + }, +]; export default () => { - const layerRef: any = useRef(null); // 图层实例 + const circleRef: any = useRef(null); + const [geometries, setGeometries] = useState(geometriesData1); - const [geometries, setGeometries] = useState(geometriesData1); /** 打印图层实例 */ const printInstance = useCallback(() => { - console.log('🚀🚀🚀 打印图层实例', layerRef.current); + console.log('🚀🚀🚀 打印图层实例', circleRef.current); + }, []); + + /** + * 图层点击事件处理器 + * @param event + */ + const clickHandler = useCallback((event: TMap.MapEvent) => { + console.log('🚀🚀🚀 图层点击事件', event); }, []); return ( @@ -48,24 +64,23 @@ export default () => { 打印图层实例 diff --git a/src/MultiCircle/index.tsx b/src/MultiCircle/index.tsx index 27761ec..6c0a404 100644 --- a/src/MultiCircle/index.tsx +++ b/src/MultiCircle/index.tsx @@ -1,57 +1,78 @@ - -import React, { useContext, useEffect, useImperativeHandle, useState, type FC } from 'react'; +/** + * @desc 圆形组件 + */ +import React, { useContext, useEffect, useImperativeHandle, useState } from 'react'; import { MapContext, useEventListener } from 'tlbs-map-react'; +import { CustomCircleGeometry } from 'tlbs-map-react/interfaces'; import { getStyle } from 'tlbs-map-react/utils'; -export function getGeometries(geometries: TMap.CircleGeometry[]): TMap.CircleGeometry[] { - return geometries.map((item: TMap.CircleGeometry) => ({ - ...item, - center: new TMap.LatLng(item.center.lat, item.center.lng), - })); -} +/** + * 生成几何信息数组 + * @param geos 几何信息数组 + */ +const getGeometries = (geos: CustomCircleGeometry[]) => geos.map((item) => { + const { center, ...rest } = item; + return { + ...rest, + center: new TMap.LatLng(center.lat, center.lng), + }; +}); interface MultiCircleProps { + /** + * 是否显示圆形组件 + */ + visible?: boolean; /** * 图层id,若没有会自动分配一个 */ id?: string; - styles?: { [key: string]: TMap.CircleStyleOptions }; - gemeitries?: TMap.CircleGeometry[]; - options?: Omit; + /** + * 圆形相关样式 + */ + styles?: TMap.MultiCircleStyleHash; + /** + * 圆形数据数组 + */ + geometries?: CustomCircleGeometry[] + /** + * GL API 参数 + */ + options?: Omit; [key: string]: any; } -const MultiCircleComponent: FC = React.forwardRef((props, ref) => { - const map = useContext(MapContext); // 获取地图实例 - const [instance, setInstance] = useState(); // 存储圆形图层实例 - +const MultiCircleComponent: React.FC = React.forwardRef((props, ref) => { const { + visible = true, id, styles = {}, geometries = [], options = {}, - }: MultiCircleProps = props as MultiCircleProps; + } = props as MultiCircleProps; + + const map = useContext(MapContext); // 获取地图实例 + const [instance, setInstance] = useState(); // 存储圆形图层实例 - /** 初始化图层 */ + /** 初始化圆形图层 */ const initMultiCircle = () => { if (!map) return; - // 图层初始化代码 + const multiCircleInstance = new TMap.MultiCircle({ + ...options, id, map, styles: getStyle('circle', styles), geometries: getGeometries(geometries), - ...options, }); setInstance(multiCircleInstance); }; - // @hook 初始化图层 + // @hook 初始化圆形图层 useEffect(() => { if (!instance) initMultiCircle(); return () => { - // 图层销毁 instance?.setMap(null); }; }, [map, instance]); @@ -72,6 +93,11 @@ const MultiCircleComponent: FC = React.forwardRef((props, ref) instance?.setGeometries(getGeometries(geometries)); }, [geometries]); + // @hook 监听图层可见性改变 + useEffect(() => { + instance?.setVisible(visible); + }, [visible, instance]); + return null; }); diff --git a/src/MultiEllipse/demo.tsx b/src/MultiEllipse/demo.tsx new file mode 100644 index 0000000..56779f0 --- /dev/null +++ b/src/MultiEllipse/demo.tsx @@ -0,0 +1,90 @@ +/** + * compact: true + * transform: true + * defaultShowCode: true + */ +/** + * @desc 椭圆组件 demo + */ +import React, { useCallback, useRef, useState } from 'react'; +import { Button } from 'tdesign-react'; +import { MultiEllipse, BaseMap } from 'tlbs-map-react'; + +/** 样式 */ +const styles = { + ellipse1: { + color: 'rgba(255, 73, 0, 0.2)', + borderColor: '#FF4900', + showBorder: true, + }, + ellipse2: { + color: 'rgba(255, 206, 0, 0.2)', + borderColor: '#FC0', + showBorder: true, + }, +}; + +/** 数据 */ +const geometriesData1 = [ + { + styleId: 'ellipse1', + center: { lat: 40.0404, lng: 116.2735 }, + majorRadius: 100, + minorRadius: 80, + }, +]; +const geometriesData2 = [ + { + styleId: 'ellipse2', + center: { lat: 40.0415, lng: 116.2763 }, + majorRadius: 80, + minorRadius: 100, + }, +]; + +export default () => { + const ellipseRef: any = useRef(null); + const [geometries, setGeometries] = useState(geometriesData1); + + /** 打印图层实例 */ + const printInstance = useCallback(() => { + console.log('🚀🚀🚀 打印图层实例', ellipseRef.current); + }, []); + + /** + * 图层点击事件处理器 + * @param event + */ + const clickHandler = useCallback((event: TMap.MapEvent) => { + console.log('🚀🚀🚀 图层点击事件', event); + }, []); + + return ( +
+
+ + + +
+ + + +
+ ); +}; diff --git a/src/MultiEllipse/index.md b/src/MultiEllipse/index.md new file mode 100644 index 0000000..a2635dd --- /dev/null +++ b/src/MultiEllipse/index.md @@ -0,0 +1,26 @@ +# 椭圆 MultiEllipse + +**1. 组件示例** + + +:::info{title=提示} +点击地图下方最右侧图标 `` 可展开代码 +::: + +**2. 组件 Props** + +| 属性 | 类型 | 说明 | 可选性 | 默认值 | +| :---------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------- | :----- | :--------- | +| id | string | 图层 id,若没有会自动分配一个 | 可选 | | +| styles | [MultiEllipseStyleHash](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVector#MultiEllipseStyleHash) | 椭圆相关样式 | 可选 | {} | +| geometries | [EllipseGeometry[]](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVector#EllipseGeometry) | 椭圆数据数组 | 可选 | [] | +| **options** | [Omit](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVector#MultiEllipseOptions) | 椭圆配置参数(官网) | 可选 | 官网默认值 | + +**MultiEllipseOptions** +| 属性名称 | 类型 | 说明 | +| :--------- | :-------------------- | :------------------------------ | +| id | String | 图层 id,若没有会自动分配一个。 | +| map | Map | 显示椭圆图层的底图。 | +| zIndex | Number | 图层绘制顺序。 | +| styles | MultiEllipseStyleHash | 椭圆的相关样式。 | +| geometries | PolygonGeometry[] | 椭圆数据数组。 | diff --git a/src/MultiEllipse/index.tsx b/src/MultiEllipse/index.tsx new file mode 100644 index 0000000..da08849 --- /dev/null +++ b/src/MultiEllipse/index.tsx @@ -0,0 +1,108 @@ +/** + * @desc 椭圆组件 + */ +import React, { useContext, useEffect, useImperativeHandle, useState } from 'react'; +import { MapContext, useEventListener } from 'tlbs-map-react'; +import { CustomEllipseGeometry } from 'tlbs-map-react/interfaces'; +import { getStyle } from 'tlbs-map-react/utils'; + +/** + * 生成几何信息数组 + * @param geos 几何信息数组 + */ +const getGeometries = (geos: CustomEllipseGeometry[]) => geos.map((item) => { + const { center, ...rest } = item; + return { + ...rest, + center: new TMap.LatLng(center.lat, center.lng), + }; +}); + +interface MultiEllipseProps { + /** + * 是否显示椭圆组件 + */ + visible?: boolean; + /** + * 图层id,若没有会自动分配一个 + */ + id?: string; + /** + * 椭圆相关样式 + */ + styles?: TMap.MultiEllipseStyleHash; + /** + * 椭圆数据数组 + */ + geometries?: CustomEllipseGeometry[] + /** + * GL API 参数 + */ + options?: Omit; + [key: string]: any; +} + +const MultiEllipseComponent: React.FC = React.forwardRef((props, ref) => { + const { + visible = true, + id, + styles = {}, + geometries = [], + options = {}, + } = props as MultiEllipseProps; + + const map = useContext(MapContext); // 获取地图实例 + const [instance, setInstance] = useState(); // 存储椭圆图层实例 + + /** 初始化椭圆图层 */ + const initMultiEllipse = () => { + if (!map) return; + + const multiEllipseInstance = new TMap.MultiEllipse({ + ...options, + id, + map, + styles: getStyle('ellipse', styles), + geometries: getGeometries(geometries), + }); + setInstance(multiEllipseInstance); + }; + + // @hook 初始化椭圆图层 + useEffect(() => { + if (!instance) initMultiEllipse(); + + return () => { + // NOTE tmap-gl-types 库中 MultiEllipse 类定义错误,没有 extends GeometryOverlay + // @ts-ignore + instance?.setMap(null); + }; + }, [map, instance]); + + // @hook 绑定事件 + useEventListener(instance, props); + + // @hook 给父组件暴露实例 + useImperativeHandle(ref, () => instance, [instance]); + + // @hook 监听样式改变 + useEffect(() => { + instance?.setStyles(getStyle('ellipse', styles)); + }, [styles]); + + // @hook 监听几何信息改变 + useEffect(() => { + instance?.setGeometries(getGeometries(geometries)); + }, [geometries]); + + // @hook 监听图层可见性改变 + useEffect(() => { + // NOTE tmap-gl-types 库中 MultiEllipse 类定义错误,没有 extends GeometryOverlay + // @ts-ignore + instance?.setVisible(visible); + }, [visible, instance]); + + return null; +}); + +export default MultiEllipseComponent; diff --git a/src/MultiRectangle/demo.tsx b/src/MultiRectangle/demo.tsx new file mode 100644 index 0000000..fa23a4b --- /dev/null +++ b/src/MultiRectangle/demo.tsx @@ -0,0 +1,90 @@ +/** + * compact: true + * transform: true + * defaultShowCode: true + */ +/** + * @desc 矩形组件 demo + */ +import React, { useCallback, useRef, useState } from 'react'; +import { Button } from 'tdesign-react'; +import { MultiRectangle, BaseMap } from 'tlbs-map-react'; + +/** 样式 */ +const styles = { + rectangle1: { + color: 'rgba(255, 73, 0, 0.2)', + borderColor: '#FF4900', + showBorder: true, + }, + rectangle2: { + color: 'rgba(255, 206, 0, 0.2)', + borderColor: '#FC0', + showBorder: true, + }, +}; + +/** 数据 */ +const geometriesData1 = [ + { + styleId: 'rectangle1', + center: { lat: 40.0404, lng: 116.2735 }, + width: 100, + height: 200, + }, +]; +const geometriesData2 = [ + { + styleId: 'rectangle2', + center: { lat: 40.0415, lng: 116.2763 }, + width: 200, + height: 100, + }, +]; + +export default () => { + const rectangleRef: any = useRef(null); + const [geometries, setGeometries] = useState(geometriesData1); + + /** 打印图层实例 */ + const printInstance = useCallback(() => { + console.log('🚀🚀🚀 打印图层实例', rectangleRef.current); + }, []); + + /** + * 图层点击事件处理器 + * @param event + */ + const clickHandler = useCallback((event: TMap.MapEvent) => { + console.log('🚀🚀🚀 图层点击事件', event); + }, []); + + return ( +
+
+ + + +
+ + + +
+ ); +}; diff --git a/src/MultiRectangle/index.md b/src/MultiRectangle/index.md new file mode 100644 index 0000000..3682072 --- /dev/null +++ b/src/MultiRectangle/index.md @@ -0,0 +1,26 @@ +# 矩形 MultiRectangle + +**1. 组件示例** + + +:::info{title=提示} +点击地图下方最右侧图标 `` 可展开代码 +::: + +**2. 组件 Props** + +| 属性 | 类型 | 说明 | 可选性 | 默认值 | +| :---------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------- | :----- | :--------- | +| id | string | 图层 id,若没有会自动分配一个 | 可选 | | +| styles | [MultiRectangleStyleHash](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVector#MultiRectangleStyleHash) | 矩形相关样式 | 可选 | {} | +| geometries | [RectangleGeometry[]](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVector#RectangleGeometry) | 矩形数据数组 | 可选 | [] | +| **options** | [Omit](https://lbs.qq.com/webApi/javascriptGL/glDoc/glDocVector#MultiRectangleOptions) | 矩形配置参数(官网) | 可选 | 官网默认值 | + +**MultiRectangleOptions** +| 属性名称 | 类型 | 说明 | +| :--------- | :-------------------- | :------------------------------ | +| id | String | 图层 id,若没有会自动分配一个。 | +| map | Map | 显示矩形图层的底图。 | +| zIndex | Number | 图层绘制顺序。 | +| styles | MultiRectangleStyleHash | 矩形的相关样式。 | +| geometries | PolygonGeometry[] | 矩形数据数组。 | diff --git a/src/MultiRectangle/index.tsx b/src/MultiRectangle/index.tsx new file mode 100644 index 0000000..d1d7b0e --- /dev/null +++ b/src/MultiRectangle/index.tsx @@ -0,0 +1,104 @@ +/** + * @desc 矩形组件 + */ +import React, { useContext, useEffect, useImperativeHandle, useState } from 'react'; +import { MapContext, useEventListener } from 'tlbs-map-react'; +import { CustomRectangleGeometry } from 'tlbs-map-react/interfaces'; +import { getStyle } from 'tlbs-map-react/utils'; + +/** + * 生成几何信息数组 + * @param geos 几何信息数组 + */ +const getGeometries = (geos: CustomRectangleGeometry[]) => geos.map((item) => { + const { center, ...rest } = item; + return { + ...rest, + center: new TMap.LatLng(center.lat, center.lng), + }; +}); + +interface MultiRectangleProps { + /** + * 是否显示矩形组件 + */ + visible?: boolean; + /** + * 图层id,若没有会自动分配一个 + */ + id?: string; + /** + * 矩形相关样式 + */ + styles?: TMap.MultiRectangleStyleHash; + /** + * 矩形数据数组 + */ + geometries?: CustomRectangleGeometry[] + /** + * GL API 参数 + */ + options?: Omit; + [key: string]: any; +} + +const MultiRectangleComponent: React.FC = React.forwardRef((props, ref) => { + const { + visible = true, + id, + styles = {}, + geometries = [], + options = {}, + } = props as MultiRectangleProps; + + const map = useContext(MapContext); // 获取地图实例 + const [instance, setInstance] = useState(); // 存储矩形图层实例 + + /** 初始化矩形图层 */ + const initMultiRectangle = () => { + if (!map) return; + + const multiRectangleInstance = new TMap.MultiRectangle({ + ...options, + id, + map, + styles: getStyle('rectangle', styles), + geometries: getGeometries(geometries), + }); + setInstance(multiRectangleInstance); + }; + + // @hook 初始化矩形图层 + useEffect(() => { + if (!instance) initMultiRectangle(); + + return () => { + instance?.setMap(null); + }; + }, [map, instance]); + + // @hook 绑定事件 + useEventListener(instance, props); + + // @hook 给父组件暴露实例 + useImperativeHandle(ref, () => instance, [instance]); + + // @hook 监听样式改变 + useEffect(() => { + instance?.setStyles(getStyle('rectangle', styles)); + }, [styles]); + + // @hook 监听几何信息改变 + useEffect(() => { + instance?.setGeometries(getGeometries(geometries)); + }, [geometries]); + + // @hook 监听图层可见性改变 + useEffect(() => { + instance?.setVisible(visible); + }, [visible, instance]); + + return null; +}); + +export default MultiRectangleComponent; diff --git a/src/index.ts b/src/index.ts index f65f4db..638fd84 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,3 +13,6 @@ export { default as MultiMarker } from './MultiMarker'; export { default as MultiPolygon } from './MultiPolygon'; export { default as MultiPolyline } from './MultiPolyline'; export { default as MultiCircle } from './MultiCircle'; +export { default as MarkerCluster } from './MarkerCluster'; +export { default as MultiRectangle } from './MultiRectangle'; +export { default as MultiEllipse } from './MultiEllipse'; diff --git a/src/interfaces.ts b/src/interfaces.ts index 691b106..6f8b386 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -19,7 +19,7 @@ export interface CustomMapOptions extends Omit { position: TMap.LatLngData; } @@ -44,6 +44,21 @@ export interface CustomPolygonGeometry extends Omit { + center: TMap.LatLngData; +} + +/* ------------------------- Circle ------------------------- */ +export interface CustomCircleGeometry extends Omit { + center: TMap.LatLngData; +} + +/* ------------------------- Ellipse ------------------------- */ +export interface CustomEllipseGeometry extends Omit { + center: TMap.LatLngData; +} + /* ------------------------- Arc ------------------------- */ export interface CustomArcLine extends Omit { from: TMap.LatLngData; diff --git a/src/utils.ts b/src/utils.ts index b5d3ba5..48bec0d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -50,7 +50,9 @@ export const getStyle = ( | TMap.MultiLabelStyleHash | TMap.MultiPolylineStyleHash | TMap.MultiPolygonStyleHash - | TMap.MultiCircleStyleHash, + | TMap.MultiCircleStyleHash + | TMap.MultiRectangleStyleHash + | TMap.MultiEllipseStyleHash, ) => { const styles: any = {}; @@ -66,10 +68,20 @@ export const getStyle = ( styles[item] = new TMap.PolylineStyle(stylesObj[item]); break; case 'polygon': - styles[item] = new TMap.PolygonStyle(stylesObj[item]); + if ((stylesObj[item] as TMap.MultiPolygonStyleHash).extrudeHeight) { + styles[item] = new TMap.ExtrudablePolygonStyle(stylesObj[item]); + } else { + styles[item] = new TMap.PolygonStyle(stylesObj[item]); + } break; case 'circle': styles[item] = new TMap.CircleStyle(stylesObj[item]); + case 'rectangle': + styles[item] = new TMap.RectangleStyle(stylesObj[item]); + break; + case 'ellipse': + styles[item] = new TMap.EllipseStyle(stylesObj[item]); + break; default: break; }