1 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
2 |
|
3 |
|
4 | var BaiduMap = function BaiduMap(id, params) {
|
5 | if (!window._seeds_lang) window._seeds_lang = {};
|
6 | if (!document.querySelector('#' + id)) {
|
7 | console.log('SeedsUI Error:未找到BaiduMap的DOM对象,请检查id是否存在');
|
8 | return;
|
9 | }
|
10 | |
11 |
|
12 |
|
13 | var defaults = {
|
14 | styleOptions: {
|
15 | strokeColor: '#0C8EFF',
|
16 | strokeWeight: 1,
|
17 | strokeOpacity: 0.8,
|
18 | strokeStyle: 'solid',
|
19 | fillColor: '#0C8EFF',
|
20 | fillOpacity: 0.6
|
21 | },
|
22 | labelStyleOptions: {
|
23 | color: 'red',
|
24 | fontSize: '12px',
|
25 | height: '20px',
|
26 | lineHeight: '20px',
|
27 | fontFamily: '微软雅黑'
|
28 | |
29 |
|
30 |
|
31 | } };
|
32 | params = params || {};
|
33 | for (var def in defaults) {
|
34 | if (params[def] === undefined) {
|
35 | params[def] = defaults[def];
|
36 | }
|
37 | }
|
38 |
|
39 |
|
40 | var s = this;
|
41 |
|
42 |
|
43 | s.params = params;
|
44 |
|
45 | s.map = null;
|
46 | s.drawingManager = null;
|
47 | var _window = window,
|
48 | BMap = _window.BMap,
|
49 | BMapLib = _window.BMapLib,
|
50 | BMAP_ANCHOR_BOTTOM_LEFT = _window.BMAP_ANCHOR_BOTTOM_LEFT,
|
51 | BMAP_ANCHOR_BOTTOM_RIGHT = _window.BMAP_ANCHOR_BOTTOM_RIGHT,
|
52 | BMAP_ANCHOR_TOP_RIGHT = _window.BMAP_ANCHOR_TOP_RIGHT,
|
53 | BMAP_DRAWING_POLYGON = _window.BMAP_DRAWING_POLYGON,
|
54 | BMAP_NAVIGATION_CONTROL_ZOOM = _window.BMAP_NAVIGATION_CONTROL_ZOOM;
|
55 |
|
56 |
|
57 |
|
58 | s.createMap = function () {
|
59 | s.map = new BMap.Map('map');
|
60 | s.map.centerAndZoom(new BMap.Point(116.404, 39.915), 12);
|
61 | s.map.setCurrentCity('北京');
|
62 | s.map.enableScrollWheelZoom(true);
|
63 | };
|
64 | s.createMap();
|
65 |
|
66 |
|
67 | s.createDrawingManager = function () {
|
68 | s.drawingManager = new BMapLib.DrawingManager(s.map, {
|
69 | isOpen: false,
|
70 | drawingToolOptions: {
|
71 | anchor: BMAP_ANCHOR_TOP_RIGHT,
|
72 | offset: new BMap.Size(5, 5)
|
73 | },
|
74 | circleOptions: s.params.styleOptions,
|
75 | polylineOptions: s.params.styleOptions,
|
76 | polygonOptions: s.params.styleOptions,
|
77 | rectangleOptions: s.params.styleOptions
|
78 | });
|
79 | };
|
80 | s.createDrawingManager();
|
81 |
|
82 | |
83 |
|
84 |
|
85 |
|
86 | |
87 |
|
88 |
|
89 |
|
90 | s.formatPoints = function (points) {
|
91 | if (!points || !Array.isArray(points)) return [];
|
92 | if (JSON.stringify(points).indexOf('lng') !== -1) return points;
|
93 | if (!Array.isArray(points[0]) || !points[0][0] || !points[0][1]) return [];
|
94 | return points.map(function (point) {
|
95 | var lng = point[0];
|
96 | var lat = point[1];
|
97 | if (point[0] < point[1]) {
|
98 | lng = point[1];
|
99 | lat = point[0];
|
100 | }
|
101 | return {
|
102 | lng: lng, lat: lat
|
103 | };
|
104 | });
|
105 | };
|
106 |
|
107 | s.showScale = function () {
|
108 | s.map.addControl(new BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT }));
|
109 | };
|
110 |
|
111 | s.showNavigation = function () {
|
112 | s.map.addControl(new BMap.NavigationControl({ anchor: BMAP_ANCHOR_BOTTOM_RIGHT, type: BMAP_NAVIGATION_CONTROL_ZOOM }));
|
113 | };
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
|
127 | s.enableManualDraw = function (type) {
|
128 | if (s.drawingManager) {
|
129 | s.drawingManager.open();
|
130 | s.drawingManager.setDrawingMode(type || BMAP_DRAWING_POLYGON);
|
131 | }
|
132 | };
|
133 |
|
134 | s.autoViewport = function () {
|
135 | var overlays = s.map.getOverlays();
|
136 | var points = [];
|
137 | for (var i = 0; i < overlays.length; i++) {
|
138 | var overlay = overlays[i];
|
139 | if (overlay instanceof BMap.Polygon) {
|
140 | points = points.concat(overlay.getPath());
|
141 | }
|
142 | }
|
143 | s.map.setViewport(points);
|
144 | };
|
145 |
|
146 | s.pointsToPolygon = function (argPoints) {
|
147 | var points = s.formatPoints(argPoints);
|
148 | var ps = [];
|
149 | for (var _iterator = points, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
|
150 | var _ref;
|
151 |
|
152 | if (_isArray) {
|
153 | if (_i >= _iterator.length) break;
|
154 | _ref = _iterator[_i++];
|
155 | } else {
|
156 | _i = _iterator.next();
|
157 | if (_i.done) break;
|
158 | _ref = _i.value;
|
159 | }
|
160 |
|
161 | var point = _ref;
|
162 |
|
163 | ps.push(new BMap.Point(point.lng, point.lat));
|
164 | }
|
165 | return new BMap.Polygon(ps);
|
166 | };
|
167 |
|
168 | s.pointsToPolygons = function (argPointss) {
|
169 | var polygons = [];
|
170 | for (var i = 0; i < argPointss.length; i++) {
|
171 | var polygon = s.pointsToPolygon(argPointss[i]);
|
172 | polygons.push(polygon);
|
173 | }
|
174 | return polygons;
|
175 | };
|
176 |
|
177 | s.drawBoundary = function () {
|
178 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
179 |
|
180 | var boundary = new BMap.Boundary();
|
181 | if (!options.area) {
|
182 | console.warn((window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + 'area, ' + (window._seeds_lang['hint_for_example_address'] || '例如“江苏省南京市建邺区”'));
|
183 | options.onError && options.onError({
|
184 | errMsg: (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + 'area, ' + (window._seeds_lang['hint_for_example_address'] || '例如“江苏省南京市建邺区”')
|
185 | });
|
186 | return;
|
187 | }
|
188 | boundary.get(options.area, function (res) {
|
189 |
|
190 | var count = res.boundaries.length;
|
191 | if (count === 0) {
|
192 | console.warn((window._seeds_lang['hint_pass_in_correct_parameters'] || '请传入正确的参数') + 'area');
|
193 | options.onError && options.onError({
|
194 | errMsg: (window._seeds_lang['hint_pass_in_correct_parameters'] || '请传入正确的参数') + 'area'
|
195 | });
|
196 | return;
|
197 | }
|
198 | var polygons = [];
|
199 | var polygonsPath = [];
|
200 | for (var i = 0; i < count; i++) {
|
201 | polygons[i] = new BMap.Polygon(res.boundaries[i], options.styleOptions || s.params.styleOptions);
|
202 | s.map.addOverlay(polygons[i]);
|
203 | polygonsPath = polygonsPath.concat(polygons[i].getPath());
|
204 | }
|
205 |
|
206 | options.onSuccess && options.onSuccess(_extends({}, res, { polygons: polygons, polygonsPath: polygonsPath }));
|
207 | });
|
208 | return boundary;
|
209 | };
|
210 |
|
211 | s.drawPolygon = function () {
|
212 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
213 |
|
214 | var polygon = null;
|
215 | if (options.polygon && Object.keys(options.polygon) && Object.keys(options.polygon).length) {
|
216 | polygon = options.polygon;
|
217 | if (!options.styleOptions) options.styleOptions = {};
|
218 |
|
219 | polygon.setStrokeColor(options.styleOptions.strokeColor || s.params.styleOptions.strokeColor);
|
220 |
|
221 | polygon.setStrokeWeight(options.styleOptions.strokeWeight || s.params.styleOptions.strokeWeight);
|
222 |
|
223 | polygon.setStrokeOpacity(options.styleOptions.strokeOpacity || s.params.styleOptions.strokeOpacity);
|
224 |
|
225 | polygon.setStrokeStyle(options.styleOptions.strokeStyle || s.params.styleOptions.strokeStyle);
|
226 |
|
227 | polygon.setFillColor(options.styleOptions.fillColor || s.params.styleOptions.fillColor);
|
228 |
|
229 | polygon.setFillOpacity(options.styleOptions.fillOpacity || s.params.styleOptions.fillOpacity);
|
230 | } else if (Array.isArray(options.points) && options.points.length) {
|
231 | polygon = new BMap.Polygon(s.formatPoints(options.points), options.styleOptions || s.params.styleOptions);
|
232 | }
|
233 | if (polygon) {
|
234 | s.map.addOverlay(polygon);
|
235 | options.onSuccess && options.onSuccess(polygon);
|
236 | } else {
|
237 | console.warn('drawPolygon: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{polygon: {}}' + (window._seeds_lang['or'] || '或者') + '{points: []}');
|
238 | options.onError && options.onError({
|
239 | errMsg: 'drawPolygon: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{polygon: {}}' + (window._seeds_lang['or'] || '或者') + '{points: []}'
|
240 | });
|
241 | }
|
242 | return polygon;
|
243 | };
|
244 |
|
245 | s.drawPolygons = function () {
|
246 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
247 |
|
248 | var polygons = [];
|
249 | for (var _iterator2 = options, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
|
250 | var _ref2;
|
251 |
|
252 | if (_isArray2) {
|
253 | if (_i2 >= _iterator2.length) break;
|
254 | _ref2 = _iterator2[_i2++];
|
255 | } else {
|
256 | _i2 = _iterator2.next();
|
257 | if (_i2.done) break;
|
258 | _ref2 = _i2.value;
|
259 | }
|
260 |
|
261 | var option = _ref2;
|
262 |
|
263 | polygons.push(s.drawPolygon(option));
|
264 | }
|
265 | return polygons;
|
266 | };
|
267 |
|
268 | s.drawLabel = function () {
|
269 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
270 |
|
271 | if (!options.point) {
|
272 | console.warn('drawLabel: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{point: }');
|
273 | options.onError && options.onError({
|
274 | errMsg: 'drawLabel: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{point: }'
|
275 | });
|
276 | return;
|
277 | }
|
278 | var opts = {
|
279 | position: options.point,
|
280 | offset: new BMap.Size(0, 0)
|
281 | };
|
282 | var label = new BMap.Label(JSON.stringify(options.point), opts);
|
283 | label.setStyle(options.styleOptions || s.params.labelStyleOptions);
|
284 | s.map.addOverlay(label);
|
285 | options.onSuccess && options.onSuccess(label);
|
286 | return label;
|
287 | };
|
288 |
|
289 | s.drawMarker = function () {
|
290 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
291 |
|
292 | if (!options.point) {
|
293 | console.warn('drawMarker: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{point: }');
|
294 | options.onError && options.onError({
|
295 | errMsg: 'drawMarker: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{point: }'
|
296 | });
|
297 | return;
|
298 | }
|
299 | if (!options.point.lng || !options.point.lat) {
|
300 | console.warn('drawMarker: ' + (window._seeds_lang['hint_pass_in_correct_parameters'] || '请传入正确的参数') + '{point: {lng: ,lat: }}');
|
301 | options.onError && options.onError({
|
302 | errMsg: 'drawMarker: ' + (window._seeds_lang['hint_pass_in_correct_parameters'] || '请传入正确的参数') + '{point: {lng: ,lat: }}'
|
303 | });
|
304 | return;
|
305 | }
|
306 | var point = new BMap.Point(options.point.lng, options.point.lat);
|
307 | var marker = new BMap.Marker(point, {
|
308 | icon: new BMap.Icon(options.icon || 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAwCAMAAABHcohdAAAAOVBMVEUAAAAMjv8Njv8NkP8Nj/8MkP8Nkf8gn/8Nj/8Njv8Mj/8Mj/8Mjv+ZmZn////n8/+Nyv8hj+8vkeUvlTkDAAAADHRSTlMA5oyFdlM8CPPZv6h2+xS8AAAAs0lEQVQ4y+2TWw6EIAxFaQUEvDOo+1/sIFEjKDSZb89vD7TpQ12wHLxzPrBVD4yacEJ6rOOGUECmjA+4MVzjEx6YqvedPwwSc4xzbZi9ftri30Rt0JgFjUTchIgKnQVqC5T7BxQpCraeMnAWeYOTENAhJMH3BJ8E1xOcLMgp5CK5J3BuVAe7t7oF7cNqoo9xN6DxWJgGRlo5aWmltZcORz69O5bXBVhWtqrFJ6PUK7zCv8IP6rMmSWrDD8kAAAAASUVORK5CYII=', new BMap.Size(16, 24), {
|
309 | imageSize: new BMap.Size(16, 24)
|
310 | })
|
311 | }, {
|
312 | offset: new BMap.Size(8, 12)
|
313 | });
|
314 | s.map.addOverlay(marker);
|
315 | options.onSuccess && options.onSuccess(marker);
|
316 | return marker;
|
317 | };
|
318 |
|
319 | s.addContextMenu = function (overlay) {
|
320 | var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
321 |
|
322 | if (!overlay) {
|
323 | console.warn('addContextMenu: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + 'overlay');
|
324 | options.onError && options.onError({
|
325 | errMsg: 'addContextMenu: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + 'overlay'
|
326 | });
|
327 | return;
|
328 | }
|
329 | if (!options.menus || !Array.isArray(options.menus) || !options.menus[0] || !options.menus[0].text) {
|
330 | console.warn('addContextMenu: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{menus: [{text: "", handler: func()}]}');
|
331 | options.onError && options.onError({
|
332 | errMsg: 'addContextMenu: ' + (window._seeds_lang['hint_pass_in_parameters'] || '请传入参数') + '{menus: [{text: "", handler: func()}]}'
|
333 | });
|
334 | return;
|
335 | }
|
336 | var markerMenu = new BMap.ContextMenu();
|
337 |
|
338 | var _loop = function _loop(index, opt) {
|
339 | markerMenu.addItem(new BMap.MenuItem(opt.text || window._seeds_lang['menu'] || '菜单', function () {
|
340 | opt.handler(opt, index);
|
341 | }));
|
342 | };
|
343 |
|
344 | for (var _iterator3 = options.menus.entries(), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
|
345 | var _ref4;
|
346 |
|
347 | if (_isArray3) {
|
348 | if (_i3 >= _iterator3.length) break;
|
349 | _ref4 = _iterator3[_i3++];
|
350 | } else {
|
351 | _i3 = _iterator3.next();
|
352 | if (_i3.done) break;
|
353 | _ref4 = _i3.value;
|
354 | }
|
355 |
|
356 | var _ref3 = _ref4;
|
357 | var index = _ref3[0];
|
358 | var opt = _ref3[1];
|
359 |
|
360 | _loop(index, opt);
|
361 | }
|
362 | overlay.addContextMenu(markerMenu);
|
363 | return markerMenu;
|
364 | };
|
365 | };
|
366 |
|
367 | export default BaiduMap; |
\ | No newline at end of file |