Flutter地图展示插件ntk_map_view的使用

Flutter 地图展示插件 ntk_map_view 的使用

简介

ntk_map_view 是一个跨平台的 Flutter 地图组件,基于 Leaflet 并使用 OSM(OpenStreetMap)。

注意:

  • 这个插件处于早期开发阶段。
  • 使用个人数据时要小心,因为这可能导致数据泄露。使用这些数据的风险由您自行承担,我们不对数据丢失负责。
  • 支持 WASM。

使用地图

如果您只需要一个空白的地图,可以创建一个这样的小部件:

NtkMapViewInterface();

您也可以配置 HTML 文件来使用地图:

NtkMapViewInterface(
  mapPath: 'assets/map.html'
);

如果您需要完全控制地图,则需要在 initState() 中创建一个地图控制器。参数是 viewId,如果不需要自定义,可以设置为 null

NtkMapControllerInterface ntkMapController = NtkMapControllerInterface.init(null);

然后将控制器添加到地图小部件中:

NtkMapViewInterface(
  mapPath: 'assets/map.html',
  mapController: ntkMapController,
);

地图回调

您可以获取地图创建开始的回调:

NtkMapViewInterface(
  onCreateStart: (){

  },
);

您还可以获取地图创建结束的回调,该回调返回使用的控制器:

NtkMapViewInterface(
  onCreateEnd: (controller){
    
  },
);

您也可以获取用户点击地图时的回调,该回调返回地图上的一个点(LatLng):

NtkMapViewInterface(
  onMapClick: (point) async {
    
  },
);

控制器操作

目前,控制器有以下方法:

  • addMarker(LatLng point, Function(LatLng point)? callback)
    • 在地图上添加标记,并在点击标记时返回回调。
  • goToPoint(LatLng point)
    • 将中心相机移动到指定的点(类似于 Leaflet 的 panTo 方法)。
  • goToPointThenZoom(LatLng point, double zoom)
    • 移动相机并缩放到指定的点(类似于 Leaflet 的 flyTo 方法)。
  • addPolyline(List points)
    • 在一系列点上创建折线(同时清除所有先前的折线)。
  • updateCurrentPosition(LatLng point, double accuracy)
    • 更新地图上的当前位置。这会在 [point] 中心创建一个圆和标记,圆的半径为 [accuracy]。(目前在移动设备上未实现)
  • addCustomMarker(LatLng point, String title, List<String> buttons, List&lt;Function()&gt; callbacks)
    • 在指定的点上创建带有标题的标记,在此标记中可以配置按钮及其回调。

示例:

ntkMapController.addCustomMarker(
  latLng, addressName,
  ["from",  "to"],
  [(){
    // "from" 回调
  },
  (){
    // "to" 回调
  },
]);

地图过滤

在您的控制器中使用以下方法进行过滤:

applyNewFilter(MapFilter filter);

MapFilter 字段(默认值如下):

int blur = 0;
double invert = 0;
double grayscale = 0;
double bright = 1;
double contrast = 1;
int hue = 0;
double opacity = 1;
double saturate = 1;
double sepia = 0;

更多关于Flutter地图展示插件ntk_map_view的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter地图展示插件ntk_map_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ntk_map_view 是一个用于 Flutter 应用的地图展示插件。它允许你在 Flutter 应用中集成地图功能,并提供了丰富的 API 来控制地图的显示和交互。以下是如何使用 ntk_map_view 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 ntk_map_view 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  ntk_map_view: ^1.0.0  # 请根据实际情况使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置地图服务

ntk_map_view 支持多种地图服务提供商,如 Google Maps、Mapbox 等。你需要在项目中配置相应的 API 密钥或其他必要的配置。

例如,如果你使用的是 Google Maps,你需要在 AndroidManifest.xmlInfo.plist 文件中配置 API 密钥。

3. 在应用中使用地图

在你的 Flutter 应用中使用 ntk_map_view 的基本步骤如下:

导入插件

import 'package:ntk_map_view/ntk_map_view.dart';

创建地图控制器

final mapController = MapController();

在 Widget 中使用地图

class MapScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Map View'),
      ),
      body: MapView(
        controller: mapController,
        initialCameraPosition: CameraPosition(
          target: LatLng(37.7749, -122.4194), // 初始位置(旧金山)
          zoom: 12.0, // 初始缩放级别
        ),
        onMapCreated: (controller) {
          // 地图创建完成后的回调
        },
      ),
    );
  }
}

4. 控制地图

你可以使用 MapController 来控制地图的显示和交互。例如,你可以移动地图、添加标记、绘制多边形等。

移动地图到指定位置

mapController.moveCamera(
  CameraUpdate.newLatLngZoom(LatLng(34.0522, -118.2437), 10.0),
);

添加标记

mapController.addMarker(
  MarkerOptions(
    position: LatLng(37.7749, -122.4194),
    title: 'San Francisco',
  ),
);

绘制多边形

mapController.addPolygon(
  PolygonOptions(
    points: [
      LatLng(37.7749, -122.4194),
      LatLng(37.7849, -122.4294),
      LatLng(37.7949, -122.4394),
    ],
    strokeColor: Colors.red,
    fillColor: Colors.blue.withOpacity(0.5),
  ),
);

5. 处理地图事件

你可以监听地图的各种事件,如点击、长按、缩放等。

监听地图点击事件

mapController.onMapClick.listen((LatLng position) {
  print('Map clicked at: $position');
});

监听地图长按事件

mapController.onMapLongClick.listen((LatLng position) {
  print('Map long pressed at: $position');
});

6. 其他功能

ntk_map_view 还提供了许多其他功能,如路线规划、地理编码、地点搜索等。你可以根据需求查阅官方文档或源码来了解更多细节。

7. 处理权限

在 Android 和 iOS 上,你可能需要处理地图相关的权限。例如,在 Android 上,你需要在 AndroidManifest.xml 中添加以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

在 iOS 上,你需要在 Info.plist 中添加以下权限:

<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location to show it on the map.</string>
回到顶部