UNPKG

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