与地图交互 最后更新时间: 2021年01月22日
UI控件开关
AMapWidget属性中控件的开关项属性主要包括
属性名称 | 说明 | 默认值 |
---|---|---|
buildingsEnabled | 是否显示3D建筑物 | true |
compassEnabled | 是否指南针 | false |
scaleEnabled | 比例尺是否显示 | true |
trafficEnabled | 是否显示路况图层 | false |
labelsEnabled | 是否显示底图文字 | true |
手势交互开关
AMapWidget属性中控件的手势交互开关项属性主要包括
属性名称 | 说明 | 默认值 |
---|---|---|
rotateGesturesEnabled | 旋转手势 | true |
scrollGesturesEnabled | 滑动手势 | true |
tiltGesturesEnabled | 倾斜手势 | true |
zoomGesturesEnabled | 缩放手势 | true |
改变地图视角
高德地图插件对于原生SDK改变地图视野的方法进行了封装并对外透出,插件修改视野需要通过AMapController对象进行,只需要调用moveCamera即可实现改变地图显示的区域(即改变地图中心点)、改变地图的缩放级别、改变地图的显示范围等。
实现功能由传入的CameraUpdate对象参数决定,这里简单介绍几种常见的,其他的参数请参考官网文档。
构造AMapWidget获取AMapController
要实现改变视野必须先获取AMapController对象,在AMapWidget的onCreate回调里可以拿到当前AMapWidget对应的AMapController。
改变地图中心点
如果想改变地图中心点,可以通过如下方法构造改变地图中心点的 CameraUpdate参数:
改变地图的缩放级别
如果想改变地图的缩放级别,可以通过如下方法构造改变地图缩放级别的 CameraUpdate参数:
调用方法交互
AMapWidget的相关回调主要包括
属性名称 | 说明 |
---|---|
onMapCreated | 地图创建完成回调 成功后会返回AMapController对象 |
onCameraMove | 地图移动回调 |
onCameraMoveEnd | 地图移动结束回调 |
onLocationChanged | 位置变化回调 |
onTap | 点击地图回调 |
onLongPress | 长按回调 |
onPoiTouched | poi点击回调 |
final AMapWidget map = AMapWidget(
touchPoiEnabled:true,
onMapCreated: _onMapCreated,
onLocationChanged: _onLocationChanged,
onCameraMove: _onCameraMove,
onCameraMoveEnd: _onCameraMoveEnd,
onTap: _onMapTap,
onLongPress: _onMapLongPress,
onPoiTouched: _onMapPoiTouched,
);
AMapController _controller;
void _onMapCreated(AMapController controller) {
setState(() {
_controller = controller;
});
}
void _onLocationChanged(AMapLocation location) {
if (null == location) {
return;
}
print('_onLocationChanged ${location.toJson()}');
}
void _onCameraMove(CameraPosition cameraPosition) {
if (null == cameraPosition) {
return;
}
print('onCameraMove===> ${cameraPosition.toMap()}');
}
void _onCameraMoveEnd(CameraPosition cameraPosition) {
if (null == cameraPosition) {
return;
}
print('_onCameraMoveEnd===> ${cameraPosition.toMap()}');
}
void _onMapTap(LatLng latLng) {
if (null == latLng) {
return;
}
print('_onMapTap===> ${latLng.toJson()}');
}
void _onMapLongPress(LatLng latLng) {
if (null == latLng) {
return;
}
print('_onMapLongPress===> ${latLng.toJson()}');
}
void _onMapPoiTouched(AMapPoi poi) {
if (null == poi) {
return;
}
print('_onMapPoiTouched===> ${poi.toJson()}');
}
当AMapWidget创建完成之后会通过onMapCreated回调透出AMapController对象,通过AMapController可以进行移动地图、截屏等操作。
方法名 | 说明 |
---|---|
Future<void> moveCamera(CameraUpdate cameraUpdate, {bool animated, int duration}) | 移镜头地图视角 通过[CameraUpdate]对象设置新的中心点、缩放比例、放大缩小、显示区域等内容 可选属性[animated]用于控制是否执行动画移动 可选属性[duration]用于控制执行动画的时长 |
Future<void> setRenderFps(int fps) | 设置地图每秒渲染的帧数 |
Future<Uint8List> takeSnapshot() | 地图截屏 |
Future<String> getMapContentApprovalNumber() | 获取地图审图号(普通地图) 任何使用高德地图API调用地图服务的应用必须在其应用中对外透出审图号 如高德地图在"关于"中体现 |
Future<String> getSatelliteImageApprovalNumber() | 获取地图审图号(卫星地图) 任何使用高德地图API调用地图服务的应用必须在其应用中对外透出审图号 如高德地图在"关于"中体现 |
Future<void> clearDisk() | 清空缓存 |
final AMapWidget map = AMapWidget(
touchPoiEnabled:true,
onMapCreated: _onMapCreated,
);
AMapController _controller;
void _onMapCreated(AMapController controller) {
_controller = controller;
}
///移动地图到首开广场
void _moveCamera() {
_controller?.moveCamera(CameraUpdate.newCameraPosition(CameraPosition(
target: LatLng(39.993306, 116.473004),
zoom: 18,
tilt: 30,
bearing: 30)));
}