@vtx/map 1.0.1 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,44 +1,44 @@
1
- # map
2
-
3
- > 地图控件
4
-
5
- ## 安装
6
-
7
- ```bash
8
- # Install
9
- $ npm install @vtx/map
10
- #或者
11
- $ yarn add @vtx/map
12
- ```
13
-
14
- ## 文档
15
-
16
- - [VtxMap](/docs/VtxMap.md)
17
- - [MapPlayer](/docs/MapPlayer.md)
18
- - [VtxSearchMap](/docs/VtxSearchMap.md)
19
- - [VtxOptMap](/docs/VtxOptMap.md)
20
-
21
- ### 全量导入引用方式(==不推荐==):
22
-
23
- ```js
24
- # 地图组件(地图组件的ref函数现在改为getMapInstance)
25
- $ import { VtxMap, VtxOptMap, VtxZoomMap } from '@vtx/map';
26
-
27
- # 地图弹出框组件
28
- $ import { VtxSearchMap } from '@vtx/map';
29
- ```
30
-
31
- ### 使用 babel-plugin-import 动态加载引用方式(==推荐==):
32
-
33
- ```js
34
- # 地图组件(地图组件的ref函数现在改为getMapInstance)
35
- $ import { VtxMap } from '@vtx/map';
36
- $ const { VtxOptMap, VtxZoomMap, MapPlayer } = VtxMap;
37
-
38
- # 地图弹出框组件
39
- $ import { VtxSearchMap } from '@vtx/map';
40
- ```
41
-
42
- ## License
43
-
44
- [MIT](https://tldrlegal.com/license/mit-license)
1
+ # map
2
+
3
+ > 地图控件
4
+
5
+ ## 安装
6
+
7
+ ```bash
8
+ # Install
9
+ $ npm install @vtx/map
10
+ #或者
11
+ $ yarn add @vtx/map
12
+ ```
13
+
14
+ ## 文档
15
+
16
+ - [VtxMap](/docs/VtxMap.md)
17
+ - [MapPlayer](/docs/MapPlayer.md)
18
+ - [VtxSearchMap](/docs/VtxSearchMap.md)
19
+ - [VtxOptMap](/docs/VtxOptMap.md)
20
+
21
+ ### 全量导入引用方式(==不推荐==):
22
+
23
+ ```js
24
+ # 地图组件(地图组件的ref函数现在改为getMapInstance)
25
+ $ import { VtxMap, VtxOptMap, VtxZoomMap } from '@vtx/map';
26
+
27
+ # 地图弹出框组件
28
+ $ import { VtxSearchMap } from '@vtx/map';
29
+ ```
30
+
31
+ ### 使用 babel-plugin-import 动态加载引用方式(==推荐==):
32
+
33
+ ```js
34
+ # 地图组件(地图组件的ref函数现在改为getMapInstance)
35
+ $ import { VtxMap } from '@vtx/map';
36
+ $ const { VtxOptMap, VtxZoomMap, MapPlayer } = VtxMap;
37
+
38
+ # 地图弹出框组件
39
+ $ import { VtxSearchMap } from '@vtx/map';
40
+ ```
41
+
42
+ ## License
43
+
44
+ [MIT](https://tldrlegal.com/license/mit-license)
@@ -91,6 +91,12 @@ var VortexAMap = function (_React$Component) {
91
91
  rectangle: []
92
92
  }
93
93
  };
94
+ _this.AnchorConstant = {
95
+ tr: 'RT',
96
+ tl: 'LT',
97
+ bl: 'LB',
98
+ br: 'RB'
99
+ };
94
100
  _this.loadMapJs();
95
101
  return _this;
96
102
  }
@@ -103,7 +109,7 @@ var VortexAMap = function (_React$Component) {
103
109
  resolve(window.AMap);
104
110
  } else {
105
111
  $.getScript(_default2.default.mapServerURL + '/A_content.js', function () {
106
- $.getScript('//webapi.amap.com/maps?v=1.4.14&key=e59ef9272e3788ac59d9a22f0f8cf9fe&plugin=AMap.Geolocation,AMap.MarkerClusterer,AMap.Scale,AMap.ToolBar,AMap.DistrictSearch,AMap.RangingTool,AMap.MouseTool,AMap.PolyEditor,AMap.CircleEditor,AMap.PlaceSearch,AMap.Heatmap', function () {
112
+ $.getScript('//webapi.amap.com/maps?v=1.4.14&key=e59ef9272e3788ac59d9a22f0f8cf9fe&plugin=AMap.Geolocation,AMap.MarkerClusterer,AMap.MapType,AMap.Scale,AMap.ToolBar,AMap.DistrictSearch,AMap.RangingTool,AMap.MouseTool,AMap.PolyEditor,AMap.CircleEditor,AMap.PlaceSearch,AMap.Heatmap', function () {
107
113
  var PointCollection = new Promise(function (resolve, reject) {
108
114
  $.getScript(_default2.default.mapServerURL + '/GPointCollection.js', function () {
109
115
  resolve();
@@ -111,7 +117,7 @@ var VortexAMap = function (_React$Component) {
111
117
  });
112
118
  Promise.all([PointCollection]).then(function () {
113
119
  (function setTime() {
114
- var allEvents = [window.AMap, 'MarkerClusterer', 'Scale', 'ToolBar', 'DistrictSearch', 'RangingTool', 'MouseTool', 'PolyEditor', 'CircleEditor', 'PlaceSearch', 'Heatmap'];
120
+ var allEvents = [window.AMap, 'MarkerClusterer', 'MapType', 'Scale', 'ToolBar', 'DistrictSearch', 'RangingTool', 'MouseTool', 'PolyEditor', 'CircleEditor', 'PlaceSearch', 'Heatmap'];
115
121
  var isLoading = true;
116
122
  for (var i = 0; i <= allEvents.length - 1; i++) {
117
123
  if (i === 0) {
@@ -208,7 +214,10 @@ var VortexAMap = function (_React$Component) {
208
214
  if (showControl) {
209
215
  t.showControl();
210
216
  }
211
-
217
+ //添加地图类型控件
218
+ if (t.props.satelliteSwitch) {
219
+ t.showMapTypeControl();
220
+ }
212
221
  //画边界线
213
222
  if (boundaryName instanceof Array && boundaryName.length > 0) {
214
223
  t.addBaiduBoundary(boundaryName);
@@ -735,11 +744,87 @@ var VortexAMap = function (_React$Component) {
735
744
 
736
745
  }, {
737
746
  key: 'showControl',
738
- value: function showControl() {
739
- var t = this;
740
- t.state.gis.addControl(t.scale);
741
- if (t.props.showControl.type !== 'null' && !!t.props.showControl.type) {
742
- t.state.gis.addControl(t.tool);
747
+ value: function showControl(props) {
748
+ var t = this,
749
+ location = 'RT',
750
+ offset = null;
751
+ var config = props || t.props;
752
+ if (t.scaleControl) {
753
+ t.state.gis.removeControl(t.scaleControl);
754
+ }
755
+ if (t.navigationControl) {
756
+ t.state.gis.removeControl(t.navigationControl);
757
+ }
758
+ if (config.showControl.location) {
759
+ location = t.AnchorConstant[config.showControl.location];
760
+ }
761
+ if (config.showControl.offset && config.showControl.offset.length > 0) {
762
+ offset = new AMap.Pixel(config.showControl.offset[0], config.showControl.offset[1]);
763
+ scaleOffset = new AMap.Pixel(config.showControl.offset[0] + 70, config.showControl.offset[1]);
764
+ }
765
+ // 添加比例尺
766
+ var control = new AMap.Scale({ position: location, offset: scaleOffset });
767
+ t.state.gis.addControl(control);
768
+ t.scaleControl = control;
769
+ // 包含平移和缩放按钮
770
+ var navigation = new AMap.ToolBar({ position: location, offset: offset });
771
+ t.state.gis.addControl(navigation);
772
+ t.navigationControl = navigation;
773
+ }
774
+ //展示地图切换控件
775
+
776
+ }, {
777
+ key: 'showMapTypeControl',
778
+ value: function showMapTypeControl(props) {
779
+ var t = this,
780
+ location = 'RT',
781
+ offset = null;
782
+ var config = props || t.props;
783
+ if (t.mapTypeControl) {
784
+ t.state.gis.removeControl(t.mapTypeControl);
785
+ }
786
+ if (config.satelliteSwitch.location) {
787
+ location = t.AnchorConstant[config.satelliteSwitch.location];
788
+ }
789
+
790
+ // 地图切换控件
791
+ var control = new AMap.MapType({ position: location, offset: offset });
792
+ t.state.gis.addControl(control);
793
+ t.mapTypeControl = control;
794
+
795
+ // TODO,MapType没有这些属性,所以下面定位和偏移不生效,手动修改
796
+ function reloaction() {
797
+ if (location == 'RT') {
798
+ $('div.amap-maptypecontrol').css({ right: 0, top: 0, left: 'inherit', bottom: 'inherit' });
799
+ } else if (location == 'LT') {
800
+ $('div.amap-maptypecontrol').css({ left: 0 + 64, top: 0, right: 'inherit', bottom: 'inherit' });
801
+ } else if (location == 'LB') {
802
+ $('div.amap-maptypecontrol').css({ left: 0 + 64, bottom: 0 + 84, right: 'inherit', top: 'inherit' });
803
+ } else if (location == 'RB') {
804
+ $('div.amap-maptypecontrol').css({ right: 0, bottom: 0 + 84, left: 'inherit', top: 'inherit' });
805
+ }
806
+ if (config.satelliteSwitch.offset && config.satelliteSwitch.offset.length > 0) {
807
+ if (location == 'RT') {
808
+ $('div.amap-maptypecontrol').css({ right: config.satelliteSwitch.offset[0], top: config.satelliteSwitch.offset[1], left: 'inherit', bottom: 'inherit' });
809
+ } else if (location == 'LT') {
810
+ $('div.amap-maptypecontrol').css({ left: config.satelliteSwitch.offset[0] + 64, top: config.satelliteSwitch.offset[1], right: 'inherit', bottom: 'inherit' });
811
+ } else if (location == 'LB') {
812
+ $('div.amap-maptypecontrol').css({ left: config.satelliteSwitch.offset[0] + 64, bottom: config.satelliteSwitch.offset[1] + 84, right: 'inherit', top: 'inherit' });
813
+ } else if (location == 'RB') {
814
+ $('div.amap-maptypecontrol').css({ right: config.satelliteSwitch.offset[0], bottom: config.satelliteSwitch.offset[1] + 84, left: 'inherit', top: 'inherit' });
815
+ }
816
+ }
817
+ }
818
+ if ($('div.amap-maptypecontrol').length > 0) {
819
+ reloaction();
820
+ } else {
821
+ var timer = setInterval(function () {
822
+ console.log(123);
823
+ if ($('div.amap-maptypecontrol').length > 0) {
824
+ clearInterval(timer);
825
+ reloaction();
826
+ }
827
+ }, 500);
743
828
  }
744
829
  }
745
830
  //获取图元数据
@@ -2917,6 +3002,15 @@ var VortexAMap = function (_React$Component) {
2917
3002
  if (typeof isClearAreaRestriction == 'boolean' && isClearAreaRestriction || isClearAreaRestriction && isClearAreaRestriction !== t.props.isClearAreaRestriction) {
2918
3003
  t.clearAreaRestriction();
2919
3004
  }
3005
+
3006
+ // 比例尺控件位置改变
3007
+ if (nextProps.showControl && JSON.stringify(nextProps.showControl) != JSON.stringify(t.props.showControl)) {
3008
+ t.showControl(nextProps);
3009
+ }
3010
+ // 地图类型控件位置改变
3011
+ if (nextProps.satelliteSwitch && JSON.stringify(nextProps.satelliteSwitch) != JSON.stringify(t.props.satelliteSwitch)) {
3012
+ t.showMapTypeControl(nextProps);
3013
+ }
2920
3014
  }
2921
3015
  }, {
2922
3016
  key: 'componentWillUnmount',
@@ -315,6 +315,19 @@ var BaiduMap = function (_React$Component) {
315
315
  } else {
316
316
  window.VtxMap = {};
317
317
  }
318
+ // 控件位置常量
319
+ t.AnchorConstant = {
320
+ tr: BMAP_ANCHOR_TOP_RIGHT,
321
+ tl: BMAP_ANCHOR_TOP_LEFT,
322
+ bl: BMAP_ANCHOR_BOTTOM_LEFT,
323
+ br: BMAP_ANCHOR_BOTTOM_RIGHT
324
+ // 平移缩放控件大小
325
+ };t.NavigationConstant = {
326
+ large: BMAP_NAVIGATION_CONTROL_LARGE,
327
+ small: BMAP_NAVIGATION_CONTROL_SMALL,
328
+ pan: BMAP_NAVIGATION_CONTROL_PAN,
329
+ zoom: BMAP_NAVIGATION_CONTROL_ZOOM
330
+ };
318
331
  var map = window.VtxMap[mapId] = t.state.gis = new BMap.Map(mapId.toString(), {
319
332
  enableMapClick: false,
320
333
  minZoom: options.minZoom,
@@ -333,9 +346,9 @@ var BaiduMap = function (_React$Component) {
333
346
  }, 500);
334
347
  // 初始化地图,设置中心点坐标和地图级别
335
348
  map.centerAndZoom(new BMap.Point(parseFloat(options.center[0]), parseFloat(options.center[1])), options.zoom);
336
- //添加地图类型控件(几乎不用,先写着)
349
+ //添加地图类型控件
337
350
  if (t.props.satelliteSwitch) {
338
- map.addControl(new BMap.MapTypeControl());
351
+ t.showMapTypeControl();
339
352
  }
340
353
  //初始化路况控件
341
354
  if (!t._trafficCtrl) {
@@ -2202,47 +2215,64 @@ var BaiduMap = function (_React$Component) {
2202
2215
 
2203
2216
  }, {
2204
2217
  key: 'showControl',
2205
- value: function showControl() {
2218
+ value: function showControl(props) {
2206
2219
  var t = this,
2207
- location = BMAP_ANCHOR_TOP_LEFT,
2208
- type = '';
2209
- switch (t.props.showControl.location) {
2210
- case 'tl':
2211
- location = BMAP_ANCHOR_TOP_LEFT;
2212
- break;
2213
- case 'bl':
2214
- location = BMAP_ANCHOR_BOTTOM_LEFT;
2215
- break;
2216
- case 'tr':
2217
- location = BMAP_ANCHOR_TOP_RIGHT;
2218
- break;
2219
- case 'br':
2220
- location = BMAP_ANCHOR_BOTTOM_RIGHT;
2221
- break;
2220
+ location = t.AnchorConstant['tr'],
2221
+ type = '',
2222
+ offset = null,
2223
+ scaleOffset = null;
2224
+ var config = props || t.props;
2225
+ if (t.scaleControl) {
2226
+ t.state.gis.removeControl(t.scaleControl);
2222
2227
  }
2223
- switch (t.props.showControl.type) {
2224
- case 'all':
2225
- type = '';
2226
- break;
2227
- case 'small':
2228
- type = BMAP_NAVIGATION_CONTROL_SMALL;
2229
- break;
2230
- case 'pan':
2231
- type = BMAP_NAVIGATION_CONTROL_PAN;
2232
- break;
2233
- case 'zoom':
2234
- type = BMAP_NAVIGATION_CONTROL_ZOOM;
2235
- break;
2228
+ if (t.navigationControl) {
2229
+ t.state.gis.removeControl(t.navigationControl);
2230
+ }
2231
+ if (config.showControl.location) {
2232
+ location = t.AnchorConstant[config.showControl.location];
2233
+ }
2234
+ if (config.showControl.type) {
2235
+ type = t.NavigationConstant[config.showControl.type];
2236
+ }
2237
+ if (config.showControl.offset && config.showControl.offset.length > 0) {
2238
+ offset = new BMap.Size(config.showControl.offset[0], config.showControl.offset[1]);
2239
+ scaleOffset = new BMap.Size(config.showControl.offset[0] + 70, config.showControl.offset[1]);
2236
2240
  }
2237
2241
  // 左上角,添加比例尺
2238
- var control = new BMap.ScaleControl({ anchor: location });
2242
+ var control = new BMap.ScaleControl({ anchor: location, offset: scaleOffset });
2239
2243
  t.state.gis.addControl(control);
2244
+ t.scaleControl = control;
2240
2245
  if (type !== 'null') {
2241
2246
  //右上角,仅包含平移和缩放按钮
2242
- var navigation = new BMap.NavigationControl({ anchor: location, type: type });
2247
+ var navigation = new BMap.NavigationControl({ anchor: location, type: type, offset: offset });
2243
2248
  t.state.gis.addControl(navigation);
2249
+ t.navigationControl = navigation;
2244
2250
  }
2245
2251
  }
2252
+ //展示地图切换控件
2253
+
2254
+ }, {
2255
+ key: 'showMapTypeControl',
2256
+ value: function showMapTypeControl(props) {
2257
+ var t = this,
2258
+ location = t.AnchorConstant['br'],
2259
+ offset = null;
2260
+ var config = props || t.props;
2261
+ if (t.mapTypeControl) {
2262
+ t.state.gis.removeControl(t.mapTypeControl);
2263
+ }
2264
+ if (config.satelliteSwitch.location) {
2265
+ location = t.AnchorConstant[config.satelliteSwitch.location];
2266
+ }
2267
+ if (config.satelliteSwitch.offset && config.satelliteSwitch.offset.length > 0) {
2268
+ offset = new BMap.Size(config.satelliteSwitch.offset[0], config.satelliteSwitch.offset[1]);
2269
+ }
2270
+ var mapTypes = [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP];
2271
+ // 地图切换控件
2272
+ var control = new BMap.MapTypeControl({ mapTypes: mapTypes, anchor: location, type: BMAP_MAPTYPE_CONTROL_HORIZONTAL, offset: offset });
2273
+ t.state.gis.addControl(control);
2274
+ t.mapTypeControl = control;
2275
+ }
2246
2276
  /*设置显示区域*/
2247
2277
 
2248
2278
  }, {
@@ -3097,6 +3127,14 @@ var BaiduMap = function (_React$Component) {
3097
3127
  t.removeGraphic(item.id, item.type);
3098
3128
  });
3099
3129
  }
3130
+ // 比例尺控件位置改变
3131
+ if (nextProps.showControl && JSON.stringify(nextProps.showControl) != JSON.stringify(t.props.showControl)) {
3132
+ t.showControl(nextProps);
3133
+ }
3134
+ // 地图类型控件位置改变
3135
+ if (nextProps.satelliteSwitch && JSON.stringify(nextProps.satelliteSwitch) != JSON.stringify(t.props.satelliteSwitch)) {
3136
+ t.showMapTypeControl(nextProps);
3137
+ }
3100
3138
  }
3101
3139
  }, {
3102
3140
  key: 'componentWillUnmount',
@@ -301,8 +301,8 @@ var Map = function (_React$Component) {
301
301
  }
302
302
  });
303
303
  /*=================================start========================================*/
304
- /*
305
- draw对象声明, 绘制返回方法实现
304
+ /*
305
+ draw对象声明, 绘制返回方法实现
306
306
  */
307
307
  if (!t._drawmanager) {
308
308
  t._drawmanager = new google.maps.drawing.DrawingManager({
@@ -316,9 +316,9 @@ var Map = function (_React$Component) {
316
316
  t._cluster = new OMapLib.MarkerClusterer(map, [], { maxZoom: options.maxZoom });
317
317
  }
318
318
  /*=================================start========================================*/
319
- /*
320
- 声明OverlayView 类
321
- 用于切换lnglat和 pixel
319
+ /*
320
+ 声明OverlayView 类
321
+ 用于切换lnglat和 pixel
322
322
  */
323
323
  function CanvasProjectionOverlay() {}
324
324
  CanvasProjectionOverlay.prototype = new google.maps.OverlayView();
@@ -329,9 +329,9 @@ var Map = function (_React$Component) {
329
329
  this.canvasProjectionOverlay = new CanvasProjectionOverlay();
330
330
  this.canvasProjectionOverlay.setMap(map);
331
331
  /*=================================start========================================*/
332
- /*
333
- 重写marker对象,支持html
334
- 要使用google对象,所以在creatMap中声明
332
+ /*
333
+ 重写marker对象,支持html
334
+ 要使用google对象,所以在creatMap中声明
335
335
  */
336
336
  var MyLabel = t.MyLabel = function (map) {
337
337
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
@@ -725,7 +725,7 @@ var Map = function (_React$Component) {
725
725
  var position = new t.omap.LatLng({ lng: item.longitude, lat: item.latitude });
726
726
  var marker = null;
727
727
  if (item.markerContent) {
728
- /*自定义html加点
728
+ /*自定义html加点
729
729
  用Label来实现,无法再添加label(高德有判断,实现不同)*/
730
730
  //覆盖物参数
731
731
  marker = new t.MyLabel(t.state.gis, {
@@ -747,9 +747,9 @@ var Map = function (_React$Component) {
747
747
  isLabel: true,
748
748
  labelClass: labelClass,
749
749
  labelContent: cg.labelContent,
750
- /*
751
- 为和百度等地图相同的参数 加上g.markerContentY值
752
- label是使用OverlayView手动实现,与marker没有关联的原因
750
+ /*
751
+ 为和百度等地图相同的参数 加上g.markerContentY值
752
+ label是使用OverlayView手动实现,与marker没有关联的原因
753
753
  */
754
754
  labelOffset: { x: cg.labelPixelX, y: cg.labelPixelY + cg.markerContentY }
755
755
  });
@@ -904,9 +904,9 @@ var Map = function (_React$Component) {
904
904
  var oldPosition = gc.getPosition();
905
905
  //前后点位类型都是markerContent
906
906
  if (gc.isMarkerContent && gc.isMarkerContent() && item.markerContent) {
907
- /*
908
- 自定义html加点
909
- 用Label来实现,无法再添加label(高德有判断,实现不同)
907
+ /*
908
+ 自定义html加点
909
+ 用Label来实现,无法再添加label(高德有判断,实现不同)
910
910
  */
911
911
  //覆盖物参数
912
912
  gc.setOptions({
@@ -960,9 +960,9 @@ var Map = function (_React$Component) {
960
960
  gc_label.setOptions({
961
961
  labelClass: labelClass,
962
962
  labelContent: cg.labelContent,
963
- /*
964
- 为和百度等地图相同的参数 加上g.markerContentY值
965
- label是使用OverlayView手动实现,与marker没有关联的原因
963
+ /*
964
+ 为和百度等地图相同的参数 加上g.markerContentY值
965
+ label是使用OverlayView手动实现,与marker没有关联的原因
966
966
  */
967
967
  labelOffset: { x: cg.labelPixelX, y: cg.labelPixelY + cg.markerContentY }
968
968
  });
@@ -1072,9 +1072,9 @@ var Map = function (_React$Component) {
1072
1072
  gc_label.setOptions({
1073
1073
  labelClass: _labelClass,
1074
1074
  labelContent: cg.labelContent,
1075
- /*
1076
- 为和百度等地图相同的参数 加上g.markerContentY值
1077
- label是使用OverlayView手动实现,与marker没有关联的原因
1075
+ /*
1076
+ 为和百度等地图相同的参数 加上g.markerContentY值
1077
+ label是使用OverlayView手动实现,与marker没有关联的原因
1078
1078
  */
1079
1079
  labelOffset: { x: cg.labelPixelX, y: cg.labelPixelY + cg.markerContentY }
1080
1080
  });
@@ -2396,8 +2396,8 @@ var Map = function (_React$Component) {
2396
2396
  var t = this;
2397
2397
  t._drawmanager.setDrawingMode(null);
2398
2398
  }
2399
- /*
2400
- 事件处理
2399
+ /*
2400
+ 事件处理
2401
2401
  */
2402
2402
  //点击图元事件
2403
2403
 
@@ -2482,8 +2482,8 @@ var Map = function (_React$Component) {
2482
2482
  t.props.mouseOutGraphic(obj);
2483
2483
  }
2484
2484
  }
2485
- /*
2486
- 地图服务功能
2485
+ /*
2486
+ 地图服务功能
2487
2487
  */
2488
2488
  //开启路况
2489
2489
 
@@ -3319,9 +3319,9 @@ var Map = function (_React$Component) {
3319
3319
  }
3320
3320
  return deg;
3321
3321
  }
3322
- /*
3323
- 匹配控件位置方法
3324
- (谷歌地图有8个方位,为了统一,只使用左上,左下,右上,右下)
3322
+ /*
3323
+ 匹配控件位置方法
3324
+ (谷歌地图有8个方位,为了统一,只使用左上,左下,右上,右下)
3325
3325
  */
3326
3326
 
3327
3327
  }, {
@@ -3344,8 +3344,8 @@ var Map = function (_React$Component) {
3344
3344
  }
3345
3345
  return position;
3346
3346
  }
3347
- /*
3348
- 地图内部需要公共方法
3347
+ /*
3348
+ 地图内部需要公共方法
3349
3349
  */
3350
3350
 
3351
3351
  }, {
@@ -3560,10 +3560,10 @@ var Map = function (_React$Component) {
3560
3560
  if (typeof isclearAllPointCollection == 'boolean' && isclearAllPointCollection || isclearAllPointCollection && isclearAllPointCollection !== t.props.isclearAllPointCollection) {
3561
3561
  t.clearAllPointCollection();
3562
3562
  }
3563
- /*点数据处理
3564
- pointData[2]相同的点,执行刷新
3565
- pointData[1]的数据在idsForGraphicId中不存在的,执行新增
3566
- pointData[0]数据中多余的id,执行删除
3563
+ /*点数据处理
3564
+ pointData[2]相同的点,执行刷新
3565
+ pointData[1]的数据在idsForGraphicId中不存在的,执行新增
3566
+ pointData[0]数据中多余的id,执行删除
3567
3567
  */
3568
3568
  if (mapPoints instanceof Array && props.mapPoints instanceof Array && !t.deepEqual(mapPoints, props.mapPoints)) {
3569
3569
  var oldMapPoints = props.mapPoints;
@@ -3623,9 +3623,9 @@ var Map = function (_React$Component) {
3623
3623
  //更新
3624
3624
  t.updatePoint([].concat(_toConsumableArray(upds), _toConsumableArray(otherupds)));
3625
3625
  }
3626
- /*
3627
- 面数据处理
3628
- 先全删除,再新增
3626
+ /*
3627
+ 面数据处理
3628
+ 先全删除,再新增
3629
3629
  */
3630
3630
  if (mapPolygons instanceof Array && props.mapPolygons instanceof Array && !t.deepEqual(mapPolygons, props.mapPolygons)) {
3631
3631
  var oldMapPolygons = props.mapPolygons;
@@ -3684,9 +3684,9 @@ var Map = function (_React$Component) {
3684
3684
  //更新
3685
3685
  t.updatePolygon([].concat(_toConsumableArray(_upds), _toConsumableArray(_otherupds)));
3686
3686
  }
3687
- /*
3688
- 圆数据处理
3689
- 先全删除,再新增
3687
+ /*
3688
+ 圆数据处理
3689
+ 先全删除,再新增
3690
3690
  */
3691
3691
  if (mapCircles instanceof Array && props.mapCircles instanceof Array && !t.deepEqual(mapCircles, props.mapCircles)) {
3692
3692
  var oldMapCircles = props.mapCircles;
@@ -3745,9 +3745,9 @@ var Map = function (_React$Component) {
3745
3745
  //更新
3746
3746
  t.updateCircle([].concat(_toConsumableArray(_upds2), _toConsumableArray(_otherupds2)));
3747
3747
  }
3748
- /*
3749
- 线数据处理
3750
- 先全删除,再新增
3748
+ /*
3749
+ 线数据处理
3750
+ 先全删除,再新增
3751
3751
  */
3752
3752
  if (mapLines instanceof Array && props.mapLines instanceof Array && !t.deepEqual(mapLines, props.mapLines)) {
3753
3753
  var oldMapLines = props.mapLines;
@@ -1,70 +1,70 @@
1
- .label-content{
2
- display: inline-block;
3
- padding: 5px;
4
- line-height: 22px;
5
- text-align: center;
6
- border-radius: 5px;
7
- background-color: #fff;
8
- opacity: 1;
9
- color: #5DD0EE;
10
- transform: translate(-50%);
11
- -ms-transform: translate(-50%);
12
- }
13
- .noselect {
14
- -webkit-touch-callout: none; /* iOS Safari */
15
- -webkit-user-select: none; /* Chrome/Safari/Opera */
16
- -khtml-user-select: none; /* Konqueror */
17
- -moz-user-select: none; /* Firefox */
18
- -ms-user-select: none; /* Internet Explorer/Edge */
19
- user-select: none; /* Non-prefixed version, currently
20
- not supported by any browser */
21
- }
22
- .vtx_gmap_html_pointCollection_a{
23
- position: absolute;
24
- canvas{
25
- z-index: 111;
26
- }
27
- }
28
- .vtx-g-rangingPoint{
29
- width: 8px;
30
- height: 8px;
31
- background-color: #fff;
32
- border: 2px solid #108ee9;
33
- display: inline-block;
34
- border-radius: 8px;
35
- position: relative;
36
- top: 5px;
37
- left: 1px;
38
- }
39
- .vtx-g-rangingDistance{
40
- position: relative;
41
- top: -36px;
42
- left: 15px;
43
- height: 30px;
44
- line-height: 28px;
45
- background-color: #fff;
46
- border: 1px solid #108ee9;
47
- font-size: 12px;
48
- word-break: keep-all;
49
- padding: 0px 3px;
50
- color: #108ee9;
51
- }
52
- .vtx-g-rang-exit{
53
- width: 12px;
54
- height: 12px;
55
- background-color: #fff;
56
- border: 2px solid #108ee9;
57
- color: #108ee9;
58
- line-height: 7px;
59
- text-align: center;
60
- font-size: 12px;
61
- cursor: pointer;
62
- }
63
- .vtx-g-rang-showRangTool{
64
- line-height: 18px;
65
- font-size: 12px;
66
- border: 1px solid #108ee9;
67
- word-break: keep-all;
68
- background-color: #fff;
69
- padding: 0px 5px;
70
- }
1
+ .label-content{
2
+ display: inline-block;
3
+ padding: 5px;
4
+ line-height: 22px;
5
+ text-align: center;
6
+ border-radius: 5px;
7
+ background-color: #fff;
8
+ opacity: 1;
9
+ color: #5DD0EE;
10
+ transform: translate(-50%);
11
+ -ms-transform: translate(-50%);
12
+ }
13
+ .noselect {
14
+ -webkit-touch-callout: none; /* iOS Safari */
15
+ -webkit-user-select: none; /* Chrome/Safari/Opera */
16
+ -khtml-user-select: none; /* Konqueror */
17
+ -moz-user-select: none; /* Firefox */
18
+ -ms-user-select: none; /* Internet Explorer/Edge */
19
+ user-select: none; /* Non-prefixed version, currently
20
+ not supported by any browser */
21
+ }
22
+ .vtx_gmap_html_pointCollection_a{
23
+ position: absolute;
24
+ canvas{
25
+ z-index: 111;
26
+ }
27
+ }
28
+ .vtx-g-rangingPoint{
29
+ width: 8px;
30
+ height: 8px;
31
+ background-color: #fff;
32
+ border: 2px solid #108ee9;
33
+ display: inline-block;
34
+ border-radius: 8px;
35
+ position: relative;
36
+ top: 5px;
37
+ left: 1px;
38
+ }
39
+ .vtx-g-rangingDistance{
40
+ position: relative;
41
+ top: -36px;
42
+ left: 15px;
43
+ height: 30px;
44
+ line-height: 28px;
45
+ background-color: #fff;
46
+ border: 1px solid #108ee9;
47
+ font-size: 12px;
48
+ word-break: keep-all;
49
+ padding: 0px 3px;
50
+ color: #108ee9;
51
+ }
52
+ .vtx-g-rang-exit{
53
+ width: 12px;
54
+ height: 12px;
55
+ background-color: #fff;
56
+ border: 2px solid #108ee9;
57
+ color: #108ee9;
58
+ line-height: 7px;
59
+ text-align: center;
60
+ font-size: 12px;
61
+ cursor: pointer;
62
+ }
63
+ .vtx-g-rang-showRangTool{
64
+ line-height: 18px;
65
+ font-size: 12px;
66
+ border: 1px solid #108ee9;
67
+ word-break: keep-all;
68
+ background-color: #fff;
69
+ padding: 0px 5px;
70
+ }
@@ -218,7 +218,10 @@ var TMap = function (_React$Component) {
218
218
  if (showControl) {
219
219
  t.showControl();
220
220
  }
221
-
221
+ //添加地图类型控件
222
+ if (t.props.satelliteSwitch) {
223
+ t.showMapTypeControl();
224
+ }
222
225
  // //画边界线
223
226
  // if(boundaryName instanceof Array && boundaryName.length>0){
224
227
  // t.addBaiduBoundary(boundaryName);
@@ -263,6 +266,13 @@ var TMap = function (_React$Component) {
263
266
  if (!window.VtxMap) {
264
267
  window.VtxMap = {};
265
268
  }
269
+ // 控件位置常量
270
+ t.AnchorConstant = {
271
+ tr: T_ANCHOR_TOP_RIGHT,
272
+ tl: T_ANCHOR_TOP_LEFT,
273
+ bl: T_ANCHOR_BOTTOM_LEFT,
274
+ br: T_ANCHOR_BOTTOM_RIGHT
275
+ };
266
276
  window.VtxMap[mapId] = t.state.gis = new T.Map(mapId.toString(), {
267
277
  //zoom等级,和百度一样默认10
268
278
  zoom: mapZoomLevel || 10,
@@ -555,63 +565,74 @@ var TMap = function (_React$Component) {
555
565
 
556
566
  }, {
557
567
  key: 'showControl',
558
- value: function showControl() {
559
- var t = this;
560
- var zlt = T_ANCHOR_BOTTOM_RIGHT;
561
- var zls = T_ANCHOR_BOTTOM_RIGHT;
562
- if (t.props.showControl) {
563
- switch (t.props.showControl.location) {
564
- case 'tl':
565
- zlt = T_ANCHOR_TOP_LEFT;
566
- zls = T_ANCHOR_BOTTOM_LEFT;
567
- break;
568
- case 'bl':
569
- zlt = T_ANCHOR_BOTTOM_LEFT;
570
- zls = T_ANCHOR_BOTTOM_LEFT;
571
- break;
572
- case 'tr':
573
- zlt = T_ANCHOR_TOP_RIGHT;
574
- zls = T_ANCHOR_BOTTOM_RIGHT;
575
- break;
576
- case 'br':
577
- zlt = T_ANCHOR_BOTTOM_RIGHT;
578
- zls = T_ANCHOR_BOTTOM_RIGHT;
579
- break;
580
- }
581
- }
582
- var zoomControl = void 0,
583
- scaleControl = void 0;
584
- switch (t.props.showControl.type) {
585
- case 'all':
586
- case 'small':
587
- case 'pan':
588
- case 'zoom':
589
- zoomControl = new T.Control.Zoom();
590
- scaleControl = new T.Control.Scale();
591
- this.state.gis.addControl(scaleControl);
592
- this.state.gis.addControl(zoomControl);
593
- zoomControl.setPosition(zlt);
594
- scaleControl.setPosition(zls);
595
- break;
596
- default:
597
- scaleControl = new T.Control.Scale();
598
- this.state.gis.addControl(scaleControl);
599
- scaleControl.setPosition(zls);
600
- break;
568
+ value: function showControl(props) {
569
+ var t = this,
570
+ location = t.AnchorConstant['tr'],
571
+ offset = null,
572
+ scaleOffset = null;
573
+ var config = props || t.props;
574
+ if (t.scaleControl) {
575
+ t.state.gis.removeControl(t.scaleControl);
576
+ }
577
+ if (t.navigationControl) {
578
+ t.state.gis.removeControl(t.navigationControl);
579
+ }
580
+ if (config.showControl.location) {
581
+ location = t.AnchorConstant[config.showControl.location];
582
+ }
583
+ // 添加比例尺
584
+ var control = new T.Control.Scale({ position: location, offset: scaleOffset });
585
+ t.state.gis.addControl(control);
586
+ t.scaleControl = control;
587
+ // 缩放地图
588
+ var navigation = new T.Control.Zoom({ position: location, offset: offset });
589
+ t.state.gis.addControl(navigation);
590
+ t.navigationControl = navigation;
591
+
592
+ // TODO不支持偏移,手动偏移
593
+ if (config.showControl.offset && config.showControl.offset.length > 0) {
594
+ if (location == "topright") {
595
+ $('div.tdt-top.tdt-right').css({ right: config.showControl.offset[0], top: config.showControl.offset[1] });
596
+ } else if (location == "topleft") {
597
+ $('div.tdt-top.tdt-left').css({ left: config.showControl.offset[0], top: config.showControl.offset[1] });
598
+ } else if (location == "bottomleft") {
599
+ $('div.tdt-bottom.tdt-left').css({ left: config.showControl.offset[0], bottom: config.showControl.offset[1] });
600
+ } else if (location == "bottomright") {
601
+ $('div.tdt-bottom.tdt-right').css({ right: config.showControl.offset[0], bottom: config.showControl.offset[1] });
602
+ }
603
+ }
604
+ }
605
+ //展示地图切换控件
606
+
607
+ }, {
608
+ key: 'showMapTypeControl',
609
+ value: function showMapTypeControl(props) {
610
+ var t = this,
611
+ location = t.AnchorConstant['br'],
612
+ offset = null;
613
+ var config = props || t.props;
614
+ if (t.mapTypeControl) {
615
+ t.state.gis.removeControl(t.mapTypeControl);
601
616
  }
602
- var fdom = document.getElementById(t.props.mapId);
603
- //天地图 api问题 使用js dom操作css
604
- if (t.props.showControl && t.props.showControl.location == 'bl') {
605
- var dom = fdom.getElementsByClassName('tdt-control-scale')[0];
606
- dom.style.position = 'relative';
607
- dom.style.top = '65px';
608
- dom.style.left = '45px';
617
+ if (config.satelliteSwitch.location) {
618
+ location = t.AnchorConstant[config.satelliteSwitch.location];
609
619
  }
610
- if (t.props.showControl && t.props.showControl.location == 'br') {
611
- var _dom = fdom.getElementsByClassName('tdt-control-scale')[0];
612
- _dom.style.position = 'relative';
613
- _dom.style.top = '65px';
614
- _dom.style.right = '45px';
620
+ // 地图切换控件
621
+ var control = new T.Control.MapType({ position: location, offset: offset });
622
+ t.state.gis.addControl(control);
623
+ t.mapTypeControl = control;
624
+
625
+ // TODO不支持偏移,手动偏移
626
+ if (config.satelliteSwitch.offset && config.satelliteSwitch.offset.length > 0) {
627
+ if (location == "topright") {
628
+ $('div.tdt-top.tdt-right').css({ right: config.satelliteSwitch.offset[0], top: config.satelliteSwitch.offset[1] });
629
+ } else if (location == "topleft") {
630
+ $('div.tdt-top.tdt-left').css({ left: config.satelliteSwitch.offset[0], top: config.satelliteSwitch.offset[1] });
631
+ } else if (location == "bottomleft") {
632
+ $('div.tdt-bottom.tdt-left').css({ left: config.satelliteSwitch.offset[0], bottom: config.satelliteSwitch.offset[1] });
633
+ } else if (location == "bottomright") {
634
+ $('div.tdt-bottom.tdt-right').css({ right: config.satelliteSwitch.offset[0], bottom: config.satelliteSwitch.offset[1] });
635
+ }
615
636
  }
616
637
  }
617
638
  //测距
@@ -3119,6 +3140,15 @@ var TMap = function (_React$Component) {
3119
3140
  }
3120
3141
  }, 100);
3121
3142
  }
3143
+
3144
+ // 比例尺控件位置改变
3145
+ if (nextProps.showControl && JSON.stringify(nextProps.showControl) != JSON.stringify(t.props.showControl)) {
3146
+ t.showControl(nextProps);
3147
+ }
3148
+ // 地图类型控件位置改变
3149
+ if (nextProps.satelliteSwitch && JSON.stringify(nextProps.satelliteSwitch) != JSON.stringify(t.props.satelliteSwitch)) {
3150
+ t.showMapTypeControl(nextProps);
3151
+ }
3122
3152
  }
3123
3153
  }, {
3124
3154
  key: 'componentWillUnmount',
@@ -3140,7 +3170,7 @@ var TMap = function (_React$Component) {
3140
3170
  clearInterval(t.animTimer[j]);
3141
3171
  }
3142
3172
  }
3143
- window.VtxMap[t.state.mapId] = null;
3173
+ if (window.VtxMap && window.VtxMap[t.state.mapId]) window.VtxMap[t.state.mapId] = null;
3144
3174
  }
3145
3175
  }]);
3146
3176
 
@@ -32,12 +32,6 @@ var _message2 = _interopRequireDefault(_message);
32
32
 
33
33
  require('antd/lib/message/style/css');
34
34
 
35
- var _icon = require('antd/lib/icon');
36
-
37
- var _icon2 = _interopRequireDefault(_icon);
38
-
39
- require('antd/lib/icon/style/css');
40
-
41
35
  var _checkbox = require('antd/lib/checkbox');
42
36
 
43
37
  var _checkbox2 = _interopRequireDefault(_checkbox);
@@ -52,6 +46,8 @@ var _default = require('../default');
52
46
 
53
47
  var _default2 = _interopRequireDefault(_default);
54
48
 
49
+ var _mapping = require('./mapping');
50
+
55
51
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
56
52
 
57
53
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
@@ -83,8 +79,12 @@ var styles = {
83
79
  hiddenLabel: 'vtx-ui-searchmap-hiddenlabel',
84
80
  otherModal: 'vtx-ui-searchmap-othermodal'
85
81
  };
82
+ // import Icon from 'antd/lib/icon';
83
+ // import 'antd/lib/icon/style/css';
84
+
86
85
  //公共地址配置
87
86
 
87
+
88
88
  // message.config({
89
89
  // top: document.getElementById('root').offsetHeight/3,
90
90
  // duration: 5,
@@ -102,6 +102,10 @@ function distinct(ary) {
102
102
  }
103
103
  }
104
104
 
105
+ var getIcon = function getIcon(type) {
106
+ return _default.antdMajorVersion === '4' ? _react2.default.createElement(_default.VtxMapIcon, { type: 'icon-' + _mapping.iconMapping[type] }) : type;
107
+ };
108
+
105
109
  var VtxSearchMap = function (_React$Component) {
106
110
  _inherits(VtxSearchMap, _React$Component);
107
111
 
@@ -599,12 +603,12 @@ var VtxSearchMap = function (_React$Component) {
599
603
  _button2.default,
600
604
  { type: 'primary', onClick: function onClick() {
601
605
  _this4.callback();
602
- }, icon: 'check' },
606
+ }, icon: getIcon('check') },
603
607
  '\u786E\u5B9A'
604
608
  ),
605
609
  _react2.default.createElement(
606
610
  _button2.default,
607
- { onClick: this.closeModal.bind(this), icon: 'close' },
611
+ { onClick: this.closeModal.bind(this), icon: getIcon('close') },
608
612
  '\u5173\u95ED'
609
613
  )
610
614
  )
@@ -617,16 +621,16 @@ var VtxSearchMap = function (_React$Component) {
617
621
  { className: styles.top },
618
622
  mapType == 'gmap' ? '' : [_react2.default.createElement(_input2.default, _extends({ key: '1' }, InputProps)), _react2.default.createElement(
619
623
  _button2.default,
620
- { key: '2', type: 'primary', onClick: this.searchList.bind(this), icon: 'search' },
624
+ { key: '2', type: 'primary', onClick: this.searchList.bind(this), icon: getIcon('search') },
621
625
  '\u67E5\u8BE2'
622
626
  ), _react2.default.createElement(
623
627
  _button2.default,
624
- { key: '3', onClick: this.clearList.bind(this), icon: 'close' },
628
+ { key: '3', onClick: this.clearList.bind(this), icon: getIcon('close') },
625
629
  '\u6E05\u7A7A'
626
630
  )],
627
631
  this.state.graphicType == 'point' ? _react2.default.createElement(
628
632
  _button2.default,
629
- { onClick: this.correction.bind(this), icon: 'environment-o' },
633
+ { onClick: this.correction.bind(this), icon: getIcon('environment') },
630
634
  '\u6821\u6B63'
631
635
  ) : null,
632
636
  this.state.graphicType != 'point' ? _react2.default.createElement(
@@ -645,12 +649,12 @@ var VtxSearchMap = function (_React$Component) {
645
649
  });
646
650
  });
647
651
  _this4.callback('editDraw');
648
- }, icon: 'edit' },
652
+ }, icon: getIcon('edit') },
649
653
  '\u91CD\u65B0\u7ED8\u5236'
650
654
  ) : null,
651
655
  mapType == 'gmap' ? '' : _react2.default.createElement(
652
656
  _button2.default,
653
- { onClick: this.setFitView.bind(this), icon: 'sync' },
657
+ { onClick: this.setFitView.bind(this), icon: getIcon('sync') },
654
658
  '\u8FD4\u56DE\u5168\u5C40\u5730\u56FE'
655
659
  ),
656
660
  isShowOther ? _react2.default.createElement(
@@ -687,7 +691,7 @@ var VtxSearchMap = function (_React$Component) {
687
691
  { onClick: function onClick() {
688
692
  return _this4.showOrhidden(false);
689
693
  }, className: styles.btn },
690
- _react2.default.createElement(_icon2.default, { type: 'double-left' })
694
+ _react2.default.createElement(_default.VtxMapIcon, { type: 'icon-doubleleft' })
691
695
  )
692
696
  ),
693
697
  _react2.default.createElement(
@@ -713,7 +717,7 @@ var VtxSearchMap = function (_React$Component) {
713
717
  { onClick: function onClick() {
714
718
  return _this4.showOrhidden(true);
715
719
  }, className: styles.btn + ' ' + (!isShowList ? styles.show : styles.hidden) },
716
- _react2.default.createElement(_icon2.default, { type: 'double-right' })
720
+ _react2.default.createElement(_default.VtxMapIcon, { type: 'icon-doubleright' })
717
721
  )
718
722
  ),
719
723
  _react2.default.createElement(
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var iconMapping = exports.iconMapping = {
7
+ check: 'check',
8
+ close: 'close',
9
+ search: 'search1',
10
+ environment: 'location',
11
+ edit: 'edit',
12
+ sync: 'sync',
13
+ 'double-left': 'doubleleft',
14
+ 'double-right': 'doubleright'
15
+ };
package/lib/default.js CHANGED
@@ -3,7 +3,25 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.VtxMapIcon = exports.antdMajorVersion = undefined;
6
7
  exports.getTMapTK = getTMapTK;
8
+
9
+ var _package = require('antd/package.json');
10
+
11
+ var createFromIconfontCN = void 0;
12
+ var antdMajorVersion = exports.antdMajorVersion = _package.version.substring(0, 1);
13
+
14
+ // 必须是3.9.0之后的版本
15
+ if (antdMajorVersion === '3') {
16
+ createFromIconfontCN = require('antd/lib/icon').default.createFromIconfontCN;
17
+ } else if (antdMajorVersion === '4') {
18
+ createFromIconfontCN = require('@ant-design/icons').createFromIconfontCN;
19
+ }
20
+
21
+ var VtxMapIcon = exports.VtxMapIcon = createFromIconfontCN({
22
+ scriptUrl: '//at.alicdn.com/t/font_2865072_ecuwrji9qwq.js'
23
+ });
24
+
7
25
  var globalCfg = window.VtxPublicServiceAddress || {};
8
26
 
9
27
  exports.default = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vtx/map",
3
- "version": "1.0.1",
3
+ "version": "1.0.5",
4
4
  "description": "@vtx/map",
5
5
  "main": "lib/index.js",
6
6
  "scripts": {