Flutter地图服务插件dgis_mobile_sdk_map的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter地图服务插件dgis_mobile_sdk_map的使用

本包允许您在应用程序中添加一个2GIS地图。通过此SDK,您可以将地图显示在屏幕上,添加标记,绘制几何形状,构建路线,获取对象信息,控制相机等。

地图数据支持OGC标准。

获取访问密钥

要使用SDK,您需要获得一个带有应用ID的dgissdk.key文件。该密钥用于连接到2GIS服务器,获取地理数据以及使用离线导航器。此密钥是这种类型SDK独有的,不能与其他2GIS SDK一起使用。

要获取密钥文件:

  1. dev.2gis.ru填写表单。
  2. 将生成的密钥文件添加到应用的assets目录中。

激活密钥后,您可以在个人账户Platform Manager中注册并查看请求分布统计。

安装

Android

当为Android构建时,会使用.aar格式的二进制构件。为了正确连接,您需要在应用的build.gradle中添加包含此构件的仓库:

repositories {
    maven {
        url "https://artifactory.2gis.dev/sdk-maven-release"
    }
}

示例应用

本包提供了一个位于example文件夹中的用法示例应用。运行应用之前,请确保将您获得的dgissdk.key文件添加到应用的assets目录中。

示例代码

以下是示例代码,展示了如何使用dgis_mobile_sdk_map插件创建一个基本的地图应用:

import 'pages/add_objects.dart';
import 'pages/all_map_controls.dart';
import 'pages/benchmark.dart';
import 'pages/calc_position.dart';
import 'pages/camera_moves.dart';
import 'pages/clustering.dart';
import 'pages/copyright.dart';
import 'pages/fps_page.dart';
import 'pages/indoor_widget.dart';
import 'pages/map_gestures.dart';
import 'pages/map_objects_identification.dart';
import 'pages/map_snapshot.dart';
import 'pages/search_page.dart';
import 'pages/stateless_screen_with_map.dart';
import 'pages/traffic_widget.dart';
import 'package:flutter/material.dart';

import 'pages/common.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter SDK测试应用',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter SDK测试应用首页'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({required this.title, super.key});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
          bottom: const TabBar(
            tabs: [
              Tab(text: '地图'),
              Tab(text: '目录'),
            ],
          ),
        ),
        body: TabBarView(
          children: [
            _mapPages(),
            _directoryPages(),
          ],
        ),
      ),
    );
  }

  Widget _mapPages() {
    return ListView(
      children: [
        ListTile(
          title: buildPageTitle('添加对象'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => AddObjectsPage(title: '添加对象')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('所有地图控件'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      AllMapControlsPage(title: '所有地图控件')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('基准测试'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => BenchmarkPage(title: '基准测试')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('计算位置'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      CalcPositionPage(title: '计算位置')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('相机移动'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      CameraMovesPage(title: '相机移动')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('聚类'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      ClusteringPage(title: '聚类')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('版权信息'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      CopyrightPage(title: '版权信息')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('帧率显示'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => FpsPage(title: '帧率显示')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('室内小部件'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      IndoorWidgetPage(title: '室内小部件')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('地图手势'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      MapGesturesPage(title: '地图手势')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('地图对象识别'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      MapObjectsIdentificationPage(
                          title: '地图对象识别')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('地图快照'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      MapSnapshotPage(title: '地图快照')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('简单的地图屏幕(无状态小部件)'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      SimpleMapScreen(
                          title: '简单的地图屏幕(无状态小部件)')),
            );
          },
        ),
        ListTile(
          title: buildPageTitle('交通小部件'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      TrafficWidgetPage(title: '交通小部件')),
            );
          },
        ),
      ],
    );
  }

  Widget _directoryPages() {
    return ListView(
      children: [
        ListTile(
          title: buildPageTitle('搜索'),
          onTap: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) =>
                      SearchPage(title: '搜索')),
            );
          },
        ),
      ],
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用dgis_mobile_sdk_map插件的示例代码。请注意,dgis_mobile_sdk_map可能是一个假设的插件名称,用于演示目的。在实际项目中,你需要根据具体插件的文档进行调整。

首先,确保你已经在pubspec.yaml文件中添加了dgis_mobile_sdk_map依赖项:

dependencies:
  flutter:
    sdk: flutter
  dgis_mobile_sdk_map: ^x.y.z  # 替换为实际版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤来使用这个插件:

  1. 导入插件

在你的Dart文件中导入插件:

import 'package:dgis_mobile_sdk_map/dgis_mobile_sdk_map.dart';
  1. 初始化地图

在你的主页面或适当的Widget中初始化地图。这里假设你有一个Scaffold作为主布局。

import 'package:flutter/material.dart';
import 'package:dgis_mobile_sdk_map/dgis_mobile_sdk_map.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Map Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MapScreen(),
    );
  }
}

class MapScreen extends StatefulWidget {
  @override
  _MapScreenState createState() => _MapScreenState();
}

class _MapScreenState extends State<MapScreen> {
  DgisMapController? _mapController;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Map Demo'),
      ),
      body: DgisMapView(
        onMapCreated: (DgisMapController controller) {
          _mapController = controller;
          // 可以在这里设置初始位置、缩放级别等
          _moveToInitialLocation();
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          if (_mapController != null) {
            // 示例:在地图上添加一个标记
            _addMarker();
          }
        },
        tooltip: 'Add Marker',
        child: Icon(Icons.add),
      ),
    );
  }

  void _moveToInitialLocation() {
    // 假设我们有一个初始位置
    final LatLng initialLocation = LatLng(37.7749, -122.4194); // 旧金山
    _mapController?.animateCamera(
      CameraUpdate.newLatLngZoom(initialLocation, 15),
    );
  }

  void _addMarker() {
    // 假设我们想要添加一个标记在初始位置
    final Marker marker = Marker(
      markerId: MarkerId('marker_1'),
      position: LatLng(37.7749, -122.4194),
      infoWindow: InfoWindow(title: 'San Francisco', snippet: 'Hello, SF!'),
      icon: BitmapDescriptor.defaultMarker,
    );
    _mapController?.addMarker(marker);
  }
}
  1. 运行应用

确保你的设备或模拟器已经连接,并运行flutter run来启动应用。你应该能看到一个包含地图的界面,并且在点击浮动按钮时会在地图上添加一个标记。

注意

  • DgisMapViewDgisMapControllerLatLngMarkerMarkerIdCameraUpdateInfoWindowBitmapDescriptor等都是假设的类和方法名,用于演示目的。实际使用时,你需要参考dgis_mobile_sdk_map插件的官方文档来获取正确的类和方法名。
  • 如果dgis_mobile_sdk_map插件有特定的初始化步骤(如API密钥配置),请确保按照文档进行配置。

希望这个示例代码能帮助你开始在Flutter项目中使用地图服务插件!

回到顶部