From d7cf323b9315000b03e7f73b9ea818e54e7c8e51 Mon Sep 17 00:00:00 2001
From: sbjw <sbjw.happy@163.com>
Date: Sun, 21 Sep 2025 13:23:06 +0000
Subject: [PATCH] 1、增加getAllDraw()方法 2、增加默认初始化参数2dMap的功能,设置为true,表示默认为2d地图 3、修改线在加载地形的时候会出现空间断层的问题 4、修复动态修改颜色的bug 5、简标文本与详标文本对齐 6、修复扇形与面的显示问题

---
 src/example/ExampleFlyPage.js        |    2 
 src/example/ExamplePage.js           |    3 
 package.json                         |    4 
 src/App.js                           |    4 +
 src/example/ExampleDynamicBlcPage.js |    2 
 public/军事标绘文档.md                     |   43 +++++-----
 public/example/ExampleFlyPage.md     |    2 
 src/example/ExampleDrawPage.js       |   10 +
 src/example/ExampleAggregatorPage.js |  103 +++++++++++++++++++++++++
 public/GIS_API.md                    |   29 ++++---
 10 files changed, 159 insertions(+), 43 deletions(-)

diff --git a/package.json b/package.json
index af859ce..cbe37cc 100644
--- a/package.json
+++ b/package.json
@@ -19,8 +19,8 @@
         "@ant-design/icons": "^4.0.0",
         "antd": "^4.24.16",
         "echarts": "^5.6.0",
-        "iclient3d-plot-diy": "^1.0.17",
-        "iclient3d-plot-diy-attachment": "^1.0.1",
+        "iclient3d-plot-diy": "^1.0.22",
+        "iclient3d-plot-diy-attachment": "^1.0.2",
         "jquery": "^3.7.1",
         "react-draggable": "^3.3.2",
         "react-router-dom": "^5.3.4",
diff --git a/public/GIS_API.md b/public/GIS_API.md
index e42bd2b..c69fe91 100644
--- a/public/GIS_API.md
+++ b/public/GIS_API.md
@@ -15,19 +15,22 @@
 
 ### 构建参数
 
-| 参数                | 说明                                                                                                                                        | 类型              | 默认值      |
-|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------|----------|
-| mapRef            | 父组件引用                                                                                                                                     | React.Component | -        |
-| showDefaultLayer  | 显示默认图层(国内天地图)                                                                                                                             | boolean         | true     |
-| addressSearchUrl  | 地址查询基础服务                                                                                                                                  | string          | -        |
-| terrainUrl        | 地形服务地址                                                                                                                                    | string          | -        |
-| terrainUrlIsSct   | 是否是超图地形                                                                                                                                   | boolean         | true     |
-| baseImageUrl      | 默认影像图层(iserver对应的地址) <br/>                                                                                                                | string          | -        |
-| plotUrl           | 标绘服务地址                                                                                                                                  |                 |
-| global            | 最小矩形框范围。( minx ,miny, maxx, maxy)                                                                                                         | number[]        | -        |
-| toolbars          | 自定义工具栏,例子:['global', 'fullscreen', {key: 'seethrough2',icon: 'seethrough',titleI18n: 'seethrough2',handleClick: () => {alert('通视分析2') }}] | string          | object[] | -      |
-| language          | 语言                                                                                                                                        | string          | -        |
-| i18nObj           | obj对象,参考多语言例子                                                                                                                             | object          | -        |
+| 参数                       | 说明                                                                                                                                        | 类型              | 默认值      |
+|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------|----------|
+| mapRef                   | 父组件引用                                                                                                                                     | React.Component | -        |
+| showDefaultLayer         | 显示默认图层(国内天地图)                                                                                                                             | boolean         | true     |
+| addressSearchUrl         | 地址查询基础服务                                                                                                                                  | string          | -        |
+| terrainUrl               | 地形服务地址                                                                                                                                    | string          | -        |
+| terrainUrlIsSct          | 是否是超图地形                                                                                                                                   | boolean         | true     |
+| baseImageUrl             | 默认影像图层(iserver对应的地址) <br/>                                                                                                                | string          | -        |
+| plotUrl                  | 标绘服务地址                                                                                                                                    |                 |
+| global                   | 最小矩形框范围。( minx ,miny, maxx, maxy)                                                                                                         | number[]        | -        |
+| toolbars                 | 自定义工具栏,例子:['global', 'fullscreen', {key: 'seethrough2',icon: 'seethrough',titleI18n: 'seethrough2',handleClick: () => {alert('通视分析2') }}] | string          | object[] | -      |
+| language                 | 语言                                                                                                                                        | string          | -        |
+| i18nObj                  | obj对象,参考多语言例子                                                                                                                             | object          | -        |
+| defaultSelectedEdit      | 是否启用点击就进入编辑                                                                                                                               | object          | -        |
+| defaultShowPropertyPanel | 进入编辑是否显示属性编辑面板                                                                                                                            | object          | -        |
+| useSvgIcon               | 是否使用svg图标,启用svg图标后,允许动态使用图标边框和颜色                                                                                                          | boolean         | -        |                                                                                                                                      | object          | -        |
 
 
 ### 工具栏功能介绍
diff --git a/public/example/ExampleFlyPage.md b/public/example/ExampleFlyPage.md
index ba62d60..41dc89a 100644
--- a/public/example/ExampleFlyPage.md
+++ b/public/example/ExampleFlyPage.md
@@ -8,7 +8,7 @@
 import {interval, take} from "rxjs";
 import {Bp} from "iclient3d-plot-diy";
 
-const {Cesium} = window;
+const Cesium = window['Cesium'];
 
 export default class ExampleFlyPage extends Component {
 
diff --git "a/public/\345\206\233\344\272\213\346\240\207\347\273\230\346\226\207\346\241\243.md" "b/public/\345\206\233\344\272\213\346\240\207\347\273\230\346\226\207\346\241\243.md"
index dcce92a..647897f 100644
--- "a/public/\345\206\233\344\272\213\346\240\207\347\273\230\346\226\207\346\241\243.md"
+++ "b/public/\345\206\233\344\272\213\346\240\207\347\273\230\346\226\207\346\241\243.md"
@@ -5,27 +5,28 @@
 > 通用属性
 
 
-| 属性              | 英文              | 备注                                      |
-|-----------------|-----------------|-----------------------------------------|
-| 唯一标识            | code            | 唯一标识,如果不传会动态生成一个唯一标识                    |
-| 军标代码类型          | type            | 1001,1002...                            |
-| 显示图标文本            | showText        | false                                   |
-| 图标文本            | text            | 空                                       |
-| 标注              | bz              | 是否有标柱                                   |
-| 图标大小            | tbdx            | 数字数组,例如[64,64]表示宽64px,高64px             |
-| 标注类型            | bzlx            | 详标(detail)、简标(simple)、正常(normal),       |
-| 详标文本            | xbwb            | 多行文本用\n进行分隔                             |
-| 简标文本            | jbwb            | 简标文本                                    |
-| 选中              | xz              | true(选中), false(不选中,默认)                 |
-| 经度              | lat             | 经度                                      |
-| 纬度              | lon             | 纬度                                      |
-| 高度              | height          | 高度                                      |
-| 航迹点             | points          | 格式:{lon: 111, lat:22,  height: 10000}[] |
-| 显示航迹            | showHj          | boolean                                 |
-| 航迹颜色            | hjColor         | 航迹颜色 默认#0000ff                          |
-| 航迹大小            | hjSize          | 航迹大小 默认 2                               |
-| 图标增加的大小         | iconOutlineSize | 地图参数要设置useSvgIcon才有效。默认 0               |
-| 图标颜色            | iconColor       | 地图参数要设置useSvgIcon才有效。默认 #000000         |
+| 属性               | 英文              | 备注                                      |
+|------------------|-----------------|-----------------------------------------|
+| 唯一标识             | code            | 唯一标识,如果不传会动态生成一个唯一标识                    |
+| 军标代码类型           | type            | 1001,1002...                            |
+| 显示图标文本           | showText        | false                                   |
+| 图标文本             | text            | 空                                       |
+| 图标文本颜色           | textColor       | #000000                                 |
+| 标注               | bz              | 是否有标柱                                   |
+| 图标大小             | tbdx            | 数字数组,例如[64,64]表示宽64px,高64px             |
+| 标注类型             | bzlx            | 详标(detail)、简标(simple)、正常(normal),       |
+| 详标文本             | xbwb            | 多行文本用\n进行分隔                             |
+| 简标文本             | jbwb            | 简标文本                                    |
+| 选中               | xz              | true(选中), false(不选中,默认)                 |
+| 经度               | lat             | 经度                                      |
+| 纬度               | lon             | 纬度                                      |
+| 高度               | height          | 高度                                      |
+| 航迹点              | points          | 格式:{lon: 111, lat:22,  height: 10000}[] |
+| 显示航迹             | showHj          | boolean                                 |
+| 航迹颜色             | hjColor         | 航迹颜色 默认#0000ff                          |
+| 航迹大小             | hjSize          | 航迹大小 默认 2                               |
+| 图标增加的大小          | iconOutlineSize | 地图参数要设置useSvgIcon才有效。默认 0               |
+| 图标颜色             | iconColor       | 地图参数要设置useSvgIcon才有效。默认 #000000         |
 
 <br />
 
diff --git a/src/App.js b/src/App.js
index 2ab863d..fc77ca4 100644
--- a/src/App.js
+++ b/src/App.js
@@ -19,6 +19,8 @@
 import ExampleDefaultSelectPage from "./example/ExampleDefaultSelectPage";
 import ExampleFlyPage from "./example/ExampleFlyPage";
 import ExampleDynamicDlcPage from "./example/ExampleDynamicBlcPage";
+import ExampleSimpleEventPage from "./example/ExampleSimpleEventPage";
+import ExampleAggregatorPage from "./example/ExampleAggregatorPage";
 
 function App() {
     return (
@@ -39,7 +41,9 @@
                     <Route path="/example/hideToolBar" exact component={ExampleHideToolBarPage}/>
                     <Route path="/example/defaultSelect" exact component={ExampleDefaultSelectPage}/>
                     <Route path="/example/fly" exact component={ExampleFlyPage}/>
+                    <Route path="/example/simpleEvent" exact component={ExampleSimpleEventPage}/>
                     <Route path="/example/dynamicBlc" exact component={ExampleDynamicDlcPage}/>
+                    <Route path="/example/aggregator" exact component={ExampleAggregatorPage}/>
                     <Route path="/doc" exact component={DocPage}/>
                     <Route path="/doc/:page" exact component={DocPage}/>
                     <Route path="/test" exact component={TestPage}/>
diff --git a/src/example/ExampleAggregatorPage.js b/src/example/ExampleAggregatorPage.js
new file mode 100644
index 0000000..99779d6
--- /dev/null
+++ b/src/example/ExampleAggregatorPage.js
@@ -0,0 +1,103 @@
+import React, {Component} from 'react'
+import './ExampleDrawPage.css'
+import {GIS} from "iclient3d-plot-diy";
+
+export default class ExampleAggregatorPage extends Component {
+
+
+    constructor(props) {
+        super(props);
+        this.state = {
+            htmlString: '<h3>正在加载中...</h3>',
+        };
+    }
+
+    componentDidMount() {
+        fetch('./example/ExampleAggregatorPage.md')
+            .then(response => response.text())
+            .then(mdText => {
+                this.setState({htmlString: window.marked.parse(mdText)});
+            });
+
+        const randomPoints = this.generateRandomPointsInRadius(35.9042, 112.4074, 10, 200);
+
+        let options = [];
+        for (let i = 0; i < randomPoints.length; i++) {
+            options.push({
+                type: "2002",
+                useModify: false,
+                lon: randomPoints[i].lng,
+                lat: randomPoints[i].lat,
+            });
+        }
+        this.mapFunction.mapApiService.showDrawDatas(options);
+    }
+
+    /**
+     * 生成指定中心点周围100公里内的2000个随机点
+     * @param {number} centerLat - 中心点纬度(度)
+     * @param {number} centerLng - 中心点经度(度)
+     * @param {number} radiusKm - 半径(公里)
+     * @param {number} count - 生成点数
+     * @returns {Array<{lat: number, lng: number}>} 随机点数组
+     */
+    generateRandomPointsInRadius(centerLat, centerLng, radiusKm = 100, count = 2000) {
+        const points = [];
+        const earthRadius = 6371; // 地球半径(公里)
+
+        for (let i = 0; i < count; i++) {
+            // 1. 生成随机方向(0-2π)
+            const angle = Math.random() * 2 * Math.PI;
+
+            // 2. 生成随机距离(考虑平方根确保均匀分布)
+            const distance = Math.sqrt(Math.random()) * radiusKm;
+
+            // 3. 将距离转换为弧度
+            const distanceRad = distance / earthRadius;
+
+            // 4. 计算新点坐标(哈弗辛公式)
+            const latRad = centerLat * Math.PI / 180;
+            const lngRad = centerLng * Math.PI / 180;
+
+            const newLat = Math.asin(
+                Math.sin(latRad) * Math.cos(distanceRad) +
+                Math.cos(latRad) * Math.sin(distanceRad) * Math.cos(angle)
+            );
+
+            const newLng = lngRad + Math.atan2(
+                Math.sin(angle) * Math.sin(distanceRad) * Math.cos(latRad),
+                Math.cos(distanceRad) - Math.sin(latRad) * Math.sin(newLat)
+            );
+
+            // 5. 转换为度数并存储
+            points.push({
+                lat: newLat * 180 / Math.PI,
+                lng: newLng * 180 / Math.PI
+            });
+        }
+
+        return points;
+    }
+
+    render() {
+        return (
+            <div className={"example_draw_container"}>
+                <h3>自动聚合</h3>
+                <div className={"map_wrapper"}>
+                    <GIS refs={e => {
+                        this.mapFunction = e
+                    }}
+                         useSvgIcon={true}
+                         mapRef={this}
+                         global={[112, 35, 113, 36]}
+                    />
+                </div>
+                <div className={"code_wrapper"}>
+                    <div dangerouslySetInnerHTML={{__html: this.state.htmlString}}></div>
+                </div>
+            </div>
+        )
+    }
+}
+
+
diff --git a/src/example/ExampleDrawPage.js b/src/example/ExampleDrawPage.js
index 67a2dce..4e77aac 100644
--- a/src/example/ExampleDrawPage.js
+++ b/src/example/ExampleDrawPage.js
@@ -35,7 +35,7 @@
             bz: true,
             bzlx: 'simple',
             jbwb: "P:00019",
-            type: "fx",
+            type: "2010",
             useModify: false,
             lon: 102.76054539488224, lat: 31.000468100060593, height: 0,
             points: [{lon: 102.76554539488224, lat: 31.000468100060593, height: 0}, {
@@ -50,7 +50,7 @@
             bzlx: 'detail',
             jbwb: 'P:00019',
             xbwb: "F16-1\n美国\n16:45:56\nR:00019\nC:00019",
-            type: "fx",
+            type: "2010",
             useModify: false,
             lon: 102.73054539488224, lat: 31.001068100060593, height: 0,
             points: [{lon: 102.73554539488224, lat: 31.001068100060593, height: 0}, {
@@ -259,7 +259,10 @@
         delete option.lon;
         delete option.lat;
         delete option.height;
-        let p = await this.mapFunction.mapApiService.draw(option)
+        let p = await this.mapFunction.mapApiService.draw(option);
+        p.drawEnd.subscribe(value => {
+            alert(p.export());
+        })
         this.drawOps.push(p);
     }
 
@@ -404,6 +407,7 @@
                             this.mapFunction = e
                         }
                     }
+                         useSvgIcon={true}
                          iconScales={[[0, 2000], [2000, 10000], [10000, 5000000]]}
                          plotUrl={this.state.plotUrl}
                          mapRef={this}
diff --git a/src/example/ExampleDynamicBlcPage.js b/src/example/ExampleDynamicBlcPage.js
index 5097d00..66dcc8f 100644
--- a/src/example/ExampleDynamicBlcPage.js
+++ b/src/example/ExampleDynamicBlcPage.js
@@ -44,7 +44,7 @@
     render() {
         return (
             <div className={"example_draw_container"}>
-                <h3>切换比例尺</h3>
+                <h3>动态比例尺</h3>
                 <div className={"map_wrapper"}>
                     <GIS refs={(e) => this.mapFunction = e}
                          plotUrl={this.state.plotUrl}
diff --git a/src/example/ExampleFlyPage.js b/src/example/ExampleFlyPage.js
index c9d728f..a99c0da 100644
--- a/src/example/ExampleFlyPage.js
+++ b/src/example/ExampleFlyPage.js
@@ -4,7 +4,7 @@
 import {interval, take} from "rxjs";
 import {Bp} from "iclient3d-plot-diy";
 
-const {Cesium} = window;
+const Cesium = window['Cesium'];
 
 export default class ExampleFlyPage extends Component {
 
diff --git a/src/example/ExamplePage.js b/src/example/ExamplePage.js
index 907f622..093b42f 100644
--- a/src/example/ExamplePage.js
+++ b/src/example/ExamplePage.js
@@ -5,7 +5,6 @@
 import {Button, Input} from "antd";
 import {updateLanguage} from "iclient3d-plot-diy";
 
-;
 
 export default class ExamplePage extends Component {
     constructor(props) {
@@ -74,6 +73,8 @@
                     <li><NavLink to='/example/defaultSelect'>初始化事件</NavLink></li>
                     <li><NavLink to='/example/fly'>飞行</NavLink></li>
                     <li><NavLink to='/example/dynamicBlc'>动态比例尺</NavLink></li>
+                    <li><NavLink to='/example/simpleEvent'>简单事件</NavLink></li>
+                    <li><NavLink to='/example/aggregator'>自动聚合</NavLink></li>
                 </ul>
                 <div className={"button_wrapper"}>
 

--
Gitblit v1.9.3