Flutter地图服务插件dgis_mobile_sdk_map的使用
Flutter地图服务插件dgis_mobile_sdk_map的使用
本包允许您在应用程序中添加一个2GIS地图。通过此SDK,您可以将地图显示在屏幕上,添加标记,绘制几何形状,构建路线,获取对象信息,控制相机等。
地图数据支持OGC标准。
获取访问密钥
要使用SDK,您需要获得一个带有应用ID的dgissdk.key
文件。该密钥用于连接到2GIS服务器,获取地理数据以及使用离线导航器。此密钥是这种类型SDK独有的,不能与其他2GIS SDK一起使用。
要获取密钥文件:
- 在dev.2gis.ru填写表单。
- 将生成的密钥文件添加到应用的
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
更多关于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项目中,你可以按照以下步骤来使用这个插件:
- 导入插件:
在你的Dart文件中导入插件:
import 'package:dgis_mobile_sdk_map/dgis_mobile_sdk_map.dart';
- 初始化地图:
在你的主页面或适当的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);
}
}
- 运行应用:
确保你的设备或模拟器已经连接,并运行flutter run
来启动应用。你应该能看到一个包含地图的界面,并且在点击浮动按钮时会在地图上添加一个标记。
注意:
DgisMapView
、DgisMapController
、LatLng
、Marker
、MarkerId
、CameraUpdate
、InfoWindow
和BitmapDescriptor
等都是假设的类和方法名,用于演示目的。实际使用时,你需要参考dgis_mobile_sdk_map
插件的官方文档来获取正确的类和方法名。- 如果
dgis_mobile_sdk_map
插件有特定的初始化步骤(如API密钥配置),请确保按照文档进行配置。
希望这个示例代码能帮助你开始在Flutter项目中使用地图服务插件!