UNPKG

18.3 kBTypeScriptView Raw
1import { ComponentType } from 'react'
2import { StandardProps, CommonEventFunction } from './common'
3interface MapProps extends StandardProps {
4 /** 中心经度
5 * @supported weapp, alipay, swan, tt, qq, jd
6 */
7 longitude: number
8 /** 中心纬度
9 * @supported weapp, alipay, swan, tt, qq, jd
10 */
11 latitude: number
12 /** 缩放级别,取值范围为 3-20
13 * @default 16
14 * @supported weapp, alipay, swan, tt, qq, jd
15 * @swan 取值范围为4-21
16 * @alipay 取值范围为5-18
17 */
18 scale?: number
19 /** 最小缩放级别 3-20
20 * @default 3
21 * @supported weapp, tt
22 */
23 minScale?: number
24 /** 最大缩放级别 3-20
25 * @default 20
26 * @supported weapp, tt
27 */
28 maxScale?: number
29 /** 标记点
30 * @supported weapp, alipay, swan, tt, qq, jd
31 */
32 markers?: MapProps.marker[]
33 /** 标记点
34 * @supported weapp
35 */
36 covers?: any[]
37 /** 路线
38 * @supported weapp, alipay, swan, tt, qq, jd
39 */
40 polyline?: MapProps.polyline[]
41 /** 圆
42 * @supported weapp, alipay, swan, tt, qq, jd
43 */
44 circles?: MapProps.circle[]
45 /** 控件(即将废弃,建议使用 cover-view 代替)
46 * @deprecated
47 * @supported weapp, alipay, swan, jd
48 */
49 controls?: MapProps.control[]
50 /** 缩放视野以包含所有给定的坐标点
51 * @supported weapp, alipay, swan, tt, qq, jd
52 */
53 includePoints?: MapProps.point[]
54 /** 显示带有方向的当前定位点
55 * @default false
56 * @supported weapp, alipay, swan, tt, qq, jd
57 */
58 showLocation?: boolean
59 /** 多边形
60 * @supported weapp, swan, tt, qq
61 */
62 polygons?: MapProps.polygon[]
63 /** 个性化地图使用的 key
64 * @supported weapp, qq
65 */
66 subkey?: string
67 /** 个性化地图配置的 style,不支持动态修改
68 * @default 1
69 * @supported weapp, qq
70 */
71 layerStyle?: number
72 /** 旋转角度,范围 0 ~ 360, 地图正北和设备 y 轴角度的夹角
73 * @default 0
74 * @supported weapp, alipay, tt, qq
75 */
76 rotate?: number
77 /** 倾斜角度,范围 0 ~ 40 , 关于 z 轴的倾角
78 * @default 0
79 * @supported weapp, alipay, tt, qq
80 */
81 skew?: number
82 /** 显示指南针
83 * @default false
84 * @supported weapp, alipay, swan, tt, qq
85 */
86 showCompass?: boolean
87 /** 显示比例尺
88 * @default false
89 * @supported weapp, alipay, tt, qq
90 */
91 showScale?: boolean
92 /** 开启俯视
93 * @default false
94 * @supported weapp, alipay, swan, tt, qq
95 */
96 enableOverlooking?: boolean
97 /** 是否支持缩放
98 * @default true
99 * @supported weapp, alipay, swan, tt, qq
100 */
101 enableZoom?: boolean
102 /** 是否支持拖动
103 * @default true
104 * @supported weapp, alipay, swan, tt, qq
105 */
106 enableScroll?: boolean
107 /** 是否支持旋转
108 * @default false
109 * @supported weapp, alipay, swan, tt, qq
110 */
111 enableRotate?: boolean
112 /** 是否开启卫星图
113 * @default false
114 * @supported weapp, alipay, tt, qq
115 */
116 enableSatellite?: boolean
117 /** 是否开启实时路况
118 * @default false
119 * @supported weapp, alipay, tt, qq
120 */
121 enableTraffic?: boolean
122 /** 配置项
123 *
124 * 提供 setting 对象统一设置地图配置。同时对于一些动画属性如 rotate 和 skew,通过 setData 分开设置时无法同时生效,需通过 settting 统一修改。
125 * @supported weapp, alipay, qq
126 */
127 setting?:
128 | MapProps
129 | {
130 [key: string]: number | string | any
131 }
132 /** 视野在地图 padding 范围内展示
133 * @supported alipay
134 */
135 includePadding?: { [key in 'left' | 'right' | 'top' | 'bottom']: number | string }
136 /** 覆盖物,自定义贴图
137 * @supported alipay
138 */
139 groundOverlays?: MapProps.groundOverlays[]
140 /** 覆盖物,网格贴图
141 * @supported alipay
142 */
143 tileOverlay?: MapProps.tileOverlay
144 /** 是否展示 POI 点
145 * @supported weapp, alipay, tt
146 * @default true
147 */
148 enablePoi?: boolean
149 /** 是否展示建筑物
150 * @supported weapp, alipay, tt
151 * @default true
152 */
153 enableBuilding?: boolean
154 /** 覆盖物,多边形。
155 * @supported alipay
156 */
157 polygon?: MapProps.polygon[]
158 /** 设置地图样式。
159 *
160 * default:默认样式
161 * light:精简样式
162 * @supported alipay
163 */
164 customMapStyle?: string
165 /** 基于 map 高级定制渲染,设置覆盖在地图上的 view。
166 * @supported alipay
167 */
168 panels?: MapProps.panels[]
169 /** 否
170 * @supported jd
171 */
172 theme?: string
173 /** 保持缩放比例不变
174 * @supported alipay
175 * @default false
176 */
177 optimize?: boolean
178 /** 开启最大俯视角,俯视角度从 45 度拓展到 75 度
179 * @supported weapp
180 * @default false
181 */
182 enableAutoMaxOverlooking?: boolean
183 /** 展示3D楼块
184 * @supported weapp, swan, tt, qq
185 * @default false
186 */
187 enable3D?: boolean
188 /** 点击地图时触发
189 * @supported weapp, alipay, swan, tt, qq, jd
190 */
191 onTap?: CommonEventFunction
192 /** 点击标记点时触发,e.detail = {markerId}
193 * @supported weapp, alipay, swan, tt, qq, jd
194 */
195 onMarkerTap?: CommonEventFunction<MapProps.onMarkerTapEventDetail>
196 /** 点击label时触发,e.detail = {markerId}
197 * @supported weapp, tt
198 */
199 onLabelTap?: CommonEventFunction<MapProps.onLabelTapEventDetail>
200 /** 点击控件时触发,e.detail = {controlId}
201 * @supported weapp, alipay, swan, jd
202 */
203 onControlTap?: CommonEventFunction<MapProps.onControlTapEventDetail>
204 /** 点击标记点对应的气泡时触发,e.detail = {markerId}
205 * @supported alipay
206 */
207 onCalloutTap?: CommonEventFunction<MapProps.onCalloutTapEventDetail>
208 /** 在地图渲染更新完成时触发
209 * @supported weapp, swan, tt, qq
210 */
211 onUpdated?: CommonEventFunction
212 /** 视野发生变化时触发
213 * @supported weapp, alipay, swan, tt, qq, jd
214 */
215 onRegionChange?: CommonEventFunction<MapProps.onRegionEventDetail<'begin'> | MapProps.onRegionEventDetail<'end'>>
216 /** 点击地图poi点时触发,e.detail = {name, longitude, latitude}
217 * @supported weapp, swan, qq
218 */
219 onPoiTap?: CommonEventFunction<MapProps.onPoiTapEventDetail>
220 /** 点击标记点对应的气泡时触发e.detail = {markerId}
221 * @supported weapp, swan, tt, jd
222 */
223 onCallOutTap?: CommonEventFunction
224 /** 点击定位标时触发,e.detail = {longitude, latitude}
225 * @supported weapp, tt
226 */
227 onAnchorPointTap?: CommonEventFunction
228 /** 点击 panel 时触发。
229 * @supported alipay
230 */
231 onPanelTap?: CommonEventFunction<{
232 panelId
233 layoutId
234 }>
235 /** 地图初始化完成即将开始渲染第一帧时触发。
236 * @supported alipay
237 */
238 onInitComplete?: CommonEventFunction
239}
240declare namespace MapProps {
241 /** 标记点用于在地图上显示标记的位置 */
242 interface marker {
243 /** 标记点id
244 * @remarks marker 点击事件回调会返回此id。建议为每个 marker 设置上 Number 类型 id,保证更新 marker 时有更好的性能。
245 */
246 id?: number
247 /** 纬度
248 * @remarks 浮点数,范围 -90 ~ 90
249 */
250 latitude: number
251 /** 经度
252 * @remarks 浮点数,范围 -180 ~ 180
253 */
254 longitude: number
255 /** 标注点名
256 * @remarks 点击时显示,callout 存在时将被忽略
257 */
258 title?: string
259 /** 显示层级
260 */
261 zIndex?: number
262 /** 显示的图标
263 * @remarks 项目目录下的图片路径,支持相对路径写法,以'/'开头则表示相对小程序根目录;也支持临时路径和网络图片
264 */
265 iconPath: string
266 /** 旋转角度
267 * @remarks 顺时针旋转的角度,范围 0 ~ 360,默认为 0
268 */
269 rotate?: number
270 /** 标注的透明度
271 * @remarks 默认1,无透明,范围 0 ~ 1
272 */
273 alpha?: number
274 /** 标注图标宽度
275 * @remarks 默认为图片实际宽度
276 */
277 width?: number | string
278 /** 标注图标高度
279 * @remarks 默认为图片实际高度
280 */
281 height?: number | string
282 /** 标记点上方的气泡窗口
283 * @remarks 支持的属性见下表,可识别换行符。
284 */
285 callout?: callout
286 /** 自定义气泡窗口
287 * @remarks 支持的属性见下表,可识别换行符。
288 */
289 customCallout?: customCallout
290 /** 为标记点旁边增加标签
291 * @remarks 支持的属性见下表
292 */
293 label?: label
294 /** 经纬度在标注图标的锚点,默认底边中点
295 * @remarks {x, y},x表示横向(0-1),y表示竖向(0-1)。{x: .5, y: 1} 表示底边中点
296 */
297 anchor?: {
298 x: number
299 y: number
300 }
301 /** 无障碍访问,(属性)元素的额外描述 */
302 ariaLabel?: string
303 }
304 /** marker 上的气泡 callout */
305 interface callout {
306 /** 文本 */
307 content: string
308 /** 文本颜色 */
309 color: string
310 /** 文字大小 */
311 fontSize: number
312 /** 横向偏移量,向右为正数 */
313 anchorX: number
314 /** 纵向偏移量,向下为正数 */
315 anchorY: number
316 /** 边框圆角 */
317 borderRadius: number
318 /** 边框宽度 */
319 borderWidth: number
320 /** 边框颜色 */
321 borderColor: string
322 /** 背景色 */
323 bgColor: string
324 /** 文本边缘留白 */
325 padding: number
326 /** 'BYCLICK':点击显示; 'ALWAYS':常显 */
327 display: 'BYCLICK' | 'ALWAYS'
328 /** 文本对齐方式。有效值: left, right, center */
329 textAlign: 'left' | 'right' | 'center'
330 }
331 /** marker 上的自定义气泡 customCallout
332 *
333 * `customCallout` 存在时将忽略 `callout` 与 `title` 属性。自定义气泡采用采用 `cover-view` 定制,灵活度更高。
334 */
335 interface customCallout {
336 /** 'BYCLICK':点击显示; 'ALWAYS':常显 */
337 display: 'BYCLICK' | 'ALWAYS' | string
338 /** 横向偏移量,向右为正数 */
339 anchorX: number
340 /** 纵向偏移量,向下为正数 */
341 anchorY: number
342 }
343 /** marker 上的气泡 label */
344 interface label {
345 /** 文本 */
346 content: string
347 /** 文本颜色 */
348 color: string
349 /** 文字大小 */
350 fontSize: number
351 /** label的坐标,原点是 marker 对应的经纬度 */
352 anchorX: number
353 /** label的坐标,原点是 marker 对应的经纬度 */
354 anchorY: number
355 /** 边框宽度 */
356 borderWidth: number
357 /** 边框颜色 */
358 borderColor: string
359 /** 边框圆角 */
360 borderRadius: number
361 /** 背景色 */
362 bgColor: string
363 /** 文本边缘留白 */
364 padding: number
365 /** 文本对齐方式。有效值: left, right, center */
366 textAlign: 'left' | 'right' | 'center'
367 }
368 /** 指定一系列坐标点,从数组第一项连线至最后一项 */
369 interface polyline {
370 /** 经纬度数组
371 * @remarks [{latitude: 0, longitude: 0}]
372 */
373 points: point[]
374 /** 线的颜色
375 * @remarks 十六进制
376 */
377 color?: string
378 /** 线的宽度 */
379 width?: number
380 /** 是否虚线
381 * @remarks 默认 false
382 */
383 dottedLine?: boolean
384 /** 带箭头的线
385 * @remarks 默认 false,开发者工具暂不支持该属性
386 */
387 arrowLine?: boolean
388 /** 更换箭头图标
389 * @remarks 在 arrowLine 为 true 时生效
390 */
391 arrowIconPath?: string
392 /** 线的边框颜色 */
393 borderColor?: string
394 /** 线的厚度 */
395 borderWidth?: number
396 }
397 /** 指定一系列坐标点,根据 points 坐标数据生成闭合多边形 */
398 interface polygon {
399 /**
400 * 边线虚线
401 * @remarks 默认值 [0, 0] 为实线,[10, 10]表示十个像素的实线和十个像素的空白(如此反复)组成的虚线
402 * @default [0,0]
403 * @supported weapp
404 */
405 dashArray?: number[]
406 /** 经纬度数组
407 * @remarks [{latitude: 0, longitude: 0}]
408 */
409 points: point[]
410 /**
411 * 线的颜色,用 8 位十六进制表示,后两位表示 alpha 值,如:#eeeeeeAA。
412 * @remarks 当前 Android 与 iOS 上此属性默认值存在差异(分别为 transparent 与 #ff0000ff ),建议在代码中统一显式设置。
413 * @supported alipay
414 */
415 color?: string
416 /** 描边的宽度 */
417 strokeWidth?: number
418 /** 描边的颜色
419 * @remarks 十六进制
420 */
421 strokeColor?: string
422 /** 填充颜色
423 * @remarks 十六进制
424 */
425 fillColor?: string
426 /**
427 * 线的宽度
428 * @remarks 当前 Android 与 iOS 上此属性默认值存在差异(分别为 0 与 5),建议在代码中统一显式设置。
429 * @supported alipay
430 */
431 width?: number
432 /** 设置多边形Z轴数值 */
433 zIndex?: number
434 /**
435 * 压盖关系
436 * @supported weapp
437 * @remarks 默认为 abovelabels
438 */
439 level?: string
440 /**
441 * 标明在特定地图缩放级别下展示。
442 * @remarks [{ from: 12, to: 17}]
443 * @supported alipay
444 */
445 displayRanges?: [
446 {
447 from: number
448 to: number
449 }
450 ]
451 }
452 /** 在地图上显示圆 */
453 interface circle {
454 /** 纬度
455 * @remarks 浮点数,范围 -90 ~ 90
456 */
457 latitude: number
458 /** 经度
459 * @remarks 浮点数,范围 -180 ~ 180
460 */
461 longitude?: number
462 /** 描边的颜色
463 * @remarks 十六进制
464 */
465 color?: string
466 /** 填充颜色
467 * @remarks 十六进制
468 */
469 fillColor?: string
470 /** 半径 */
471 radius: number
472 /** 描边的宽度 */
473 strokeWidth?: number
474 }
475 /** 在地图上显示控件,控件不随着地图移动。即将废弃,请使用 cover-view
476 * @deprecated
477 */
478 interface control {
479 /** 控件id
480 * @remarks 在控件点击事件回调会返回此id
481 */
482 id?: number
483 /** 控件在地图的位置
484 * @remarks 控件相对地图位置
485 */
486 position: position
487 /** 显示的图标
488 * @remarks 项目目录下的图片路径,支持本地路径、代码包路径
489 */
490 iconPath: string
491 /** 是否可点击
492 * @remarks 默认不可点击
493 */
494 clickable?: boolean
495 }
496 interface point {
497 /** 经度 */
498 longitude: number
499 /** 纬度 */
500 latitude: number
501 }
502 interface position {
503 /** 距离地图的左边界多远
504 * @default 0
505 */
506 left: number
507 /** 距离地图的上边界多远
508 * @default 0
509 */
510 top: number
511 /** 控件宽度
512 * @default 图片宽度
513 */
514 width: number
515 /** 控件高度
516 * @default 图片宽度
517 */
518 height: number
519 }
520 interface groundOverlays {
521 /**刷新的时候需要变更id值 */
522 id: string
523 /**右上 左下 */
524 'include-points': [
525 {
526 latitude: number
527 longitude: number
528 },
529 {
530 latitude: number
531 longitude: number
532 }
533 ]
534 image: string
535 alpha: number
536 zIndex: number
537 }
538 interface tileOverlay {
539 url: string
540 type: number
541 tileWidth: number
542 tileHeight: number
543 zIndex: number
544 }
545 interface panels {
546 id: number
547 layout: {
548 src: string
549 }
550 position: position
551 }
552 interface onMarkerTapEventDetail {
553 markerId: number | string
554 }
555 interface onLabelTapEventDetail {
556 markerId: number | string
557 }
558 interface onControlTapEventDetail {
559 controlId: number | string
560 }
561 interface onCalloutTapEventDetail {
562 markerId: number | string
563 }
564 namespace RegionChangeDetail {
565 interface type {
566 begin
567 end
568 }
569 interface CausedByBegin {
570 /** 手势触发 */
571 gesture
572 /** 接口触发 */
573 update
574 }
575 interface CausedByEnd {
576 /** 拖动导致 */
577 drag
578 /** 缩放导致 */
579 scale
580 /** 调用更新接口导致 */
581 update
582 }
583 }
584 interface onRegionEventDetail<T = keyof RegionChangeDetail.type> {
585 /** 视野变化开始、结束时触发
586 * @remarks 视野变化开始为begin,结束为end
587 */
588 type: T
589 /** 导致视野变化的原因
590 * @remarks 有效值为 gesture(手势触发)、update(接口触发或调用更新接口导致)、drag(拖动导致)、scale(缩放导致)
591 */
592 causedBy: keyof (T extends 'begin' ? RegionChangeDetail.CausedByBegin : RegionChangeDetail.CausedByEnd)
593 /** 视野改变详情 */
594 detail: regionChangeDetail<RegionChangeDetail.type>
595 }
596 interface regionChangeDetail<T = keyof RegionChangeDetail.type> {
597 /** 旋转角度 */
598 rotate: number
599 /** 倾斜角度 */
600 skew: number
601 causedBy: keyof (T extends 'begin' ? RegionChangeDetail.CausedByBegin : RegionChangeDetail.CausedByEnd)
602 type: T | string
603 scale: number
604 centerLocation: point
605 region: {
606 northeast: point
607 southeast: point
608 }
609 }
610 interface onPoiTapEventDetail {
611 name: string
612 longitude: number
613 latitude: number
614 }
615}
616/** 地图。相关api Taro.createMapContext。
617 * @classification maps
618 * @supported weapp, alipay, swan, tt, qq, jd
619 * @example_react
620 * ```tsx
621 * class App extends Component {
622 * onTap () {}
623 * render () {
624 * return (
625 * <Map onClick={this.onTap} />
626 * )
627 * }
628 * }
629 * ```
630 * @example_vue
631 * ```html
632 * <template>
633 * <map
634 * id="map"
635 * style="width: 100%; height: 300px;"
636 * longitude="113.324520"
637 * latitude="23.099994"
638 * scale="14"
639 * :markers="markers"
640 * :polyline="polyline"
641 * :show-location="true"
642 * `@regionchange="regionchange"
643 * `@markertap="markertap"
644 * />
645 * </template>
646 *
647 * <script>
648 * export default {
649 * data() {
650 * return {
651 * markers: [{
652 * iconPath: "https://avatars2.githubusercontent.com/u/1782542?s=460&u=d20514a52100ed1f82282bcfca6f49052793c889&v=4",
653 * id: 0,
654 * latitude: 23.099994,
655 * longitude: 113.324520,
656 * width: 50,
657 * height: 50
658 * }],
659 * polyline: [{
660 * points: [{
661 * longitude: 113.3245211,
662 * latitude: 23.10229
663 * }, {
664 * longitude: 113.324520,
665 * latitude: 23.21229
666 * }],
667 * color:"#FF0000DD",
668 * width: 2,
669 * dottedLine: true
670 * }]
671 * }
672 * },
673 * methods: {
674 * regionchange(e) {
675 * console.log(e.type)
676 * },
677 * markertap(e) {
678 * console.log("markertap:", e.detail.markerId)
679 * }
680 * }
681 * }
682 * </script>
683 * ```
684 * @see https://developers.weixin.qq.com/miniprogram/dev/component/map.html#map
685 */
686declare const Map: ComponentType<MapProps>
687export { Map, MapProps }