flutter_osm_plugin
适用于 Flutter 应用的 OSM 插件 (目前仅限 Android,iOS 将在未来支持)
- 当前位置
- 改变位置
- 跟踪用户位置
- 自定义图标标记
- 绘制路线,获取当前路线的(持续时间/距离)信息
- 标记点击监听器
- 计算两点之间的距离
入门
安装
将以下内容添加到您的 pubspec.yaml 文件中
dependencies:
flutter_osm_plugin: ^0.6.0
简单用法
创建基本的OSMFlutter
OSMFlutter(
controler:mapController,
currentLocation: false,
road: Road(
startIcon: MarkerIcon(
icon: Icon(
Icons.person,
size: 64,
color: Colors.brown,
),
),
roadColor: Colors.yellowAccent,
),
markerIcon: MarkerIcon(
icon: Icon(
Icons.person_pin_circle,
color: Colors.blue,
size: 56,
),
),
initPosition: GeoPoint(latitude: 47.35387, longitude: 8.43609),
);
声明 MapController 以控制 osm 地图,而不是使用 GlobalKey
初始化
MapController controller = MapController(
initMapWithUserPosition: false,
initPosition: GeoPoint(latitude: 47.4358055, longitude: 8.4737324),
);
销毁
controller.dispose();
MapController
| 属性 | 描述 |
|---|---|
initMapWithUserPosition |
(bool) 使用用户位置初始化地图(默认:true) |
initPosition |
(GeoPoint) 如果不为空,地图将指向此位置 |
GlobalKey 已弃用
将地图设置到用户的当前位置
await controller.currentPosition();
放大
await controller.zoom(2.);
// or
await controller.zoomIn();
缩小
await controller.zoom(-2.);
// or
await controller.zoomOut();
跟踪用户当前位置
await controller.enableTracking();
禁用跟踪用户位置
await controller.disabledTracking();
初始化位置
controller.changeLocation(GeoPoint(latitude: 47.35387, longitude: 8.43609));
获取当前位置
GeoPoint geoPoint = controller.myLocation();
选择/创建新位置
GeoPoint geoPoint = controller.selectPosition();
- 注意:选定的位置可以通过长按移除
移除标记
controller.removePosition(geoPoint);
- 注意:静态位置不能通过此方法移除
绘制路线,获取距离(公里)和持续时间(秒)
RoadInfo roadInfo = await controller.drawRoad( GeoPoint(latitude: 47.35387, longitude: 8.43609),GeoPoint(latitude: 47.4371, longitude: 8.6136));
print("${roadInfo.distance}km");
print("${roadInfo.duration}sec");
删除最后一条路线
await controller.removeLastRoad();
更改静态地理点位置
如果您一开始没有静态位置,并且需要添加一个空列表的地理点的静态点,您可以使用它
您可以使用它随时间更改其位置
osmKey.currentState.setStaticPosition(List<GeoPoint> geoPoints,String id )
OSMFlutter
| 属性 | 描述 |
|---|---|
currentLocation |
启用当前位置。 |
trackMyPosition |
启用跟踪用户位置。 |
showZoomController |
显示默认缩放控制器。 |
markerIcon |
设置标记图标 |
defaultZoom |
设置 zoomIn()/zoomOut() 使用的默认缩放级别(默认为 1) |
road |
设置路线的颜色和起始/结束/中间标记 |
useSecureURL |
启用安全 URL |
staticPoints |
您希望始终显示的标记列表,每个标记都应具有唯一的 ID |
onGeoPointClicked |
(回调) 标记被点击时触发的监听器,返回标记的当前地理点 |
onGeoPointClicked |
(回调) 当您激活跟踪且用户位置发生变化时,会在此处调用 |
静态方法
计算两个地理点位置之间的距离
double distanceEnMetres = await distance2point(GeoPoint(longitude: 36.84612143139903,latitude: 11.099388684927824,), GeoPoint( longitude: 36.8388023164018, latitude: 11.096959785428027, ),);
注意
目前地图仅适用于 Android,iOS 版本即将推出
如果您遇到 SSL 证书异常,可以使用 HTTP,请遵循以下说明
如果您想在 Android PIE 或更高版本中使用 HTTP
-
启用 useSecureURL 并将
android:usesCleartextTraffic="true"添加到您的 manifest 文件中,如下所示<application ... android:usesCleartextTraffic="true">
如果您在新的项目中遇到构建错误,您需要按照这些说明进行操作 ([#40])
1) remove flutter_osm_plugin from pubspec, after that pub get
2) open android module in android studio ( right click in name of project -> flutter-> open android module in android studio)
3) update gradle version to 4.1.1 ( IDE will show popup to make update)
4) update kotlin version to 1.4.21 & re-build the project
5) re-add flutter_osm_plugin in pubspec , pub get ( or flutter clean & pub get )