flutter_osm_plugin

pub

适用于 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 )

MIT 许可证

GitHub

查看 Github